X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=1c5d2c7f6ea43a574a01fad8f92af49638c42ac9;hb=e2c3582a5c0230cae0571e8f92829b910039f179;hp=98f81800f4de7092372542d836ed8fa96b07d49a;hpb=ad4062833dc36c50bdd601fd8016a0feb743c2a5;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 98f81800..1c5d2c7f 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -116,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(); @@ -129,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 */