From 4ae6be577de367a62b7986b9f23c14fed38dcc85 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 27 Sep 2003 05:31:40 +0000 Subject: [PATCH] some smarter focus fallback for sloppy focus --- openbox/focus.c | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/openbox/focus.c b/openbox/focus.c index b6d294bb..84bd7b09 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -180,22 +180,38 @@ void focus_fallback(ObFocusFallbackType type) focus_set_client(NULL); if (type == OB_FOCUS_FALLBACK_UNFOCUSING && old) { - /* try for transient relations */ if (old->transient_for) { - if (old->transient_for == OB_TRAN_GROUP) { - for (it = focus_order[screen_desktop]; it; it = it->next) { - GSList *sit; + gboolean trans = FALSE; - for (sit = old->group->members; sit; sit = sit->next) - if (sit->data == it->data) - if (focus_fallback_transient(sit->data, old)) - return; + if (config_focus_last || !config_focus_follow) + trans = TRUE; + else { + ObClient *c; + + if ((c = client_under_pointer()) && + client_search_transient(client_search_top_transient(c), + old)) + trans = TRUE; + } + + /* try for transient relations */ + if (trans) { + if (old->transient_for == OB_TRAN_GROUP) { + for (it = focus_order[screen_desktop]; it; it = it->next) { + GSList *sit; + + for (sit = old->group->members; sit; sit = sit->next) + if (sit->data == it->data) + if (focus_fallback_transient(sit->data, old)) + return; + } + } else { + if (focus_fallback_transient(old->transient_for, old)) + return; } - } else { - if (focus_fallback_transient(old->transient_for, old)) - return; } } + } if (!config_focus_last && config_focus_follow) if (focus_under_pointer()) @@ -217,7 +233,6 @@ void focus_fallback(ObFocusFallbackType type) } } #endif - } for (it = focus_order[screen_desktop]; it != NULL; it = it->next) if (type != OB_FOCUS_FALLBACK_UNFOCUSING || it->data != old) -- 2.39.2