X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=9d4f2e6e5afc51acbf99d7a59d9e331031a64427;hb=76943cdfe07390b031ad6404dbb59413364a5a17;hp=98f81800f4de7092372542d836ed8fa96b07d49a;hpb=ad4062833dc36c50bdd601fd8016a0feb743c2a5;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 98f81800..9d4f2e6e 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -116,9 +116,11 @@ void focus_fallback(gboolean switching_desks) ConfigValue focus_follow; GList *it; gboolean under = FALSE; + Client *old = NULL; if (switching_desks) { /* don't skip any windows when switching desktops */ + old = focus_client; focus_client = NULL; } else { if (!config_get("focusFollowsMouse", Config_Bool, &focus_follow)) @@ -128,10 +130,18 @@ 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 (client_focus(it->data)) + 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)) + break; + } + } if (it == NULL) /* nothing to focus */ focus_set_client(NULL); }