diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-03-28 08:21:38 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-03-28 08:21:38 +0000 |
| commit | 96a81e8837ae71f5bffe4f2c7c427d2402078393 (patch) | |
| tree | ca6403c8e3a69e421184fb3d14d4a551ea2ce1d8 /openbox/focus.c | |
| parent | beb489feeb8a66c59be2f3c83f4397d2b4e6dc01 (diff) | |
handle better the case of choosing the window to focus but it is already focused when switching desktops
Diffstat (limited to 'openbox/focus.c')
| -rw-r--r-- | openbox/focus.c | 17 |
1 files changed, 14 insertions, 3 deletions
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); } |
