X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Ffocus.c;h=df02cb7630bf7c9bff8dbc38f385437ba7f4db37;hb=2b80e4e8ef56bb4fba614139601e750344418e5b;hp=9a0b2bdc31b466c21ab6c151fbed345c2225ed5c;hpb=0d0ce065df9ff1acc06fe63e4a0fe45c184de693;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 9a0b2bdc..df02cb76 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -159,7 +159,7 @@ static ObClient* focus_fallback_target(gboolean allow_refocus, } ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer, - gboolean allow_omnipresent) + gboolean allow_omnipresent, gboolean focus_lost) { ObClient *new; ObClient *old = focus_client; @@ -167,7 +167,8 @@ ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer, /* unfocus any focused clients.. they can be focused by Pointer events and such, and then when we try focus them, we won't get a FocusIn event at all for them. */ - focus_nothing(); + if (focus_lost) + focus_nothing(); new = focus_fallback_target(allow_refocus, allow_pointer, allow_omnipresent, old); @@ -177,7 +178,7 @@ ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer, return new; } -void focus_nothing() +void focus_nothing(void) { /* Install our own colormap */ if (focus_client != NULL) { @@ -274,7 +275,7 @@ ObClient *focus_order_find_first(guint desktop) static gboolean focus_target_has_siblings(ObClient *ft, gboolean iconic_windows, gboolean all_desktops) - + { GSList *it; @@ -320,7 +321,7 @@ gboolean focus_valid_target(ObClient *ft, ok = ok && ((dock_windows && ft->type == OB_CLIENT_TYPE_DOCK) || (desktop_windows && ft->type == OB_CLIENT_TYPE_DESKTOP)); /* modal windows are important and can always get focus if they are - visible and stuff, so don't change 'ok' based on their type */ + visible and stuff, so don't change 'ok' based on their type */ else if (!ft->modal) /* normal non-helper windows are valid targets */ ok = ok && @@ -332,7 +333,7 @@ gboolean focus_valid_target(ObClient *ft, include helper windows ... */ ((focus_client && ft->group == focus_client->group && helper_windows) || - /* ... or if there are no other windows in its group + /* ... or if there are no other windows in its group that can be focused instead */ !focus_target_has_siblings(ft, iconic_windows, all_desktops))));