X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Ffocus.c;h=1c5d2c7f6ea43a574a01fad8f92af49638c42ac9;hb=e2c3582a5c0230cae0571e8f92829b910039f179;hp=d9ea43cbe7895dd730838ae93cc639caf32b828e;hpb=045c4f035cf6d2bad3e4615ee7cf9cd05627aa3f;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index d9ea43cb..1c5d2c7f 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,10 +116,19 @@ void focus_fallback(gboolean switching_desks) ConfigValue focus_follow; GList *it; 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 */ - focus_client = NULL; + old = NULL; } else { if (!config_get("focusFollowsMouse", Config_Bool, &focus_follow)) g_assert_not_reached(); @@ -128,7 +138,7 @@ 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 (it->data != old && client_normal(it->data)) if (client_focus(it->data)) break; if (it == NULL) /* nothing to focus */