X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=1c5d2c7f6ea43a574a01fad8f92af49638c42ac9;hb=e2c3582a5c0230cae0571e8f92829b910039f179;hp=9d4f2e6e5afc51acbf99d7a59d9e331031a64427;hpb=4bd182605c8f1d08c83fdb09cc7ffb4d3690b50d;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 9d4f2e6e..1c5d2c7f 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -118,10 +118,17 @@ void focus_fallback(gboolean switching_desks) gboolean under = FALSE; Client *old = NULL; + old = focus_client; + + /* unfocus any focused clients.. they can be focused by Pointer events + and such, and then when I try focus them, I won't get a FocusIn event + at all for them. + */ + focus_set_client(NULL); + if (switching_desks) { /* don't skip any windows when switching desktops */ - old = focus_client; - focus_client = NULL; + old = NULL; } else { if (!config_get("focusFollowsMouse", Config_Bool, &focus_follow)) g_assert_not_reached(); @@ -130,18 +137,10 @@ void focus_fallback(gboolean switching_desks) } if (!under) { - for (it = focus_order[screen_desktop]; it != NULL; it = it->next) { - if (it->data != focus_client && client_normal(it->data)) { - /* if we're switching desktops, and we get the already focused - window, then we wont get a FocusIn for it, so just restore - the focus_client so that we know it is focused */ - if (it->data == old) { - focus_client = old; - break; - } else if (client_focus(it->data)) + for (it = focus_order[screen_desktop]; it != NULL; it = it->next) + if (it->data != old && client_normal(it->data)) + if (client_focus(it->data)) break; - } - } if (it == NULL) /* nothing to focus */ focus_set_client(NULL); }