From: Dana Jansens Date: Fri, 28 Mar 2003 08:21:38 +0000 (+0000) Subject: handle better the case of choosing the window to focus but it is already focused... X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=96a81e8837ae71f5bffe4f2c7c427d2402078393;p=chaz%2Fopenbox handle better the case of choosing the window to focus but it is already focused when switching desktops --- diff --git a/openbox/focus.c b/openbox/focus.c index 98f81800..5c5130f6 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,19 @@ 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) { + g_message("fallback trying 0x%lx", ((Client*)it->data)->window); + 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); }