X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=8afbdcb6f6fc942569679db9e6701d5b03c6f4f4;hb=63b0c5616ffe67aa021234abe6635adb9c91879b;hp=d0886a50f7cccda5951dc91c3aba2f6472abefd6;hpb=40bfb2b6e5249608f6f7d0c8012ca44f67883843;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index d0886a50..8afbdcb6 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -163,7 +163,7 @@ static gboolean focus_under_pointer() return FALSE; } -void focus_fallback(gboolean switching_desks) +void focus_fallback(FallbackType type) { GList *it; Client *old = NULL; @@ -176,17 +176,12 @@ void focus_fallback(gboolean switching_desks) */ focus_set_client(NULL); - if (switching_desks) { - /* don't skip any windows when switching desktops */ - old = NULL; - } - - if (!(switching_desks ? focus_last_on_desktop : focus_last)) { + if (!(type == Fallback_Desktop ? focus_last_on_desktop : focus_last)) { if (focus_follow) focus_under_pointer(); return; } - if (old && old->transient_for) { + if (type == Fallback_Unfocusing && old && old->transient_for) { if (old->transient_for == TRAN_GROUP) { for (it = focus_order[screen_desktop]; it != NULL; it = it->next) { GSList *sit; @@ -196,14 +191,15 @@ void focus_fallback(gboolean switching_desks) return; } } else { - if (client_focus(old->transient_for)) - return; + if (client_normal(old->transient_for)) + if (client_focus(old->transient_for)) + return; } } for (it = focus_order[screen_desktop]; it != NULL; it = it->next) - if (it->data != old && client_normal(it->data)) - if (client_focus(it->data)) + if (type != Fallback_Unfocusing || it->data != old) + if (client_normal(it->data) && client_focus(it->data)) return; /* nothing to focus */ @@ -249,11 +245,9 @@ Client *focus_cycle(gboolean forward, gboolean linear, gboolean done, } ft = client_focus_target(it->data); if (ft == it->data && focus_client != ft && client_normal(ft) && - client_focusable(ft)) { - if (client_focus(ft)) { - noreorder++; /* avoid reordering the focus_order */ - return ft; - } + client_focus(ft)) { + noreorder++; /* avoid reordering the focus_order */ + return ft; } } while (it != start); return NULL;