all repos — openbox @ 96a81e8837ae71f5bffe4f2c7c427d2402078393

openbox fork - make it a bit more like ryudo

handle better the case of choosing the window to focus but it is already focused when switching desktops
Dana Jansens danakj@orodu.net
commit

96a81e8837ae71f5bffe4f2c7c427d2402078393

parent

beb489feeb8a66c59be2f3c83f4397d2b4e6dc01

1 files changed, 14 insertions(+), 3 deletions(-)

jump to
M openbox/focus.copenbox/focus.c

@@ -116,9 +116,11 @@ {

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 @@ under = focus_under_pointer();

} 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); }