X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=9d4f2e6e5afc51acbf99d7a59d9e331031a64427;hb=76943cdfe07390b031ad6404dbb59413364a5a17;hp=d9ea43cbe7895dd730838ae93cc639caf32b828e;hpb=045c4f035cf6d2bad3e4615ee7cf9cd05627aa3f;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index d9ea43cb..9d4f2e6e 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -67,6 +67,7 @@ void focus_set_client(Client *client) /* when nothing will be focused, send focus to the backup target */ XSetInputFocus(ob_display, focus_backup, RevertToPointerRoot, event_lasttime); + XSync(ob_display, FALSE); } old = focus_client; @@ -115,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)) @@ -127,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); }