all repos — openbox @ 6b7cc88c9d4ae2019f3b8fcd300dd3069f2bc680

openbox fork - make it a bit more like ryudo

validate clients before trying to focus them in fallback

also validate before trying to set the focus on a window

this should fix those crashes, and should just be better over all
Dana Jansens danakj@orodu.net
commit

6b7cc88c9d4ae2019f3b8fcd300dd3069f2bc680

parent

3a33642be4be34d57b355b273461e49549cdf554

2 files changed, 14 insertions(+), 4 deletions(-)

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

@@ -2937,6 +2937,9 @@ {

/* choose the correct target */ self = client_focus_target(self); + if (!client_validate(self)) + return FALSE; + if (!client_can_focus(self)) { if (!self->frame->visible) { /* update the focus lists */
M openbox/focus.copenbox/focus.c

@@ -223,8 +223,12 @@

for (it = c->transients; it; it = g_slist_next(it)) { if (it->data == top) return NULL; ret = find_transient_recursive(it->data, top, skip); - if (ret && ret != skip && client_normal(ret)) return ret; - if (it->data != skip && client_normal(it->data)) return it->data; + if (ret && ret != skip && client_normal(ret) && + client_can_focus(ret) && client_validate(ret)) + return ret; + if (it->data != skip && client_normal(it->data) && + client_can_focus(it->data) && client_validate(it->data)) + return it->data; } return NULL; }

@@ -301,7 +305,8 @@ if (config_focus_follow &&

(type == OB_FOCUS_FALLBACK_UNFOCUSING || !config_focus_last)) { if ((target = client_under_pointer())) - if (client_normal(target) && client_can_focus(target)) { + if (client_normal(target) && client_can_focus(target) && + client_validate(target)) { ob_debug("found in pointer stuff\n"); return target; }

@@ -324,7 +329,9 @@

ob_debug("trying the focus order\n"); for (it = focus_order[screen_desktop]; it; it = g_list_next(it)) if (type != OB_FOCUS_FALLBACK_UNFOCUSING || it->data != old) - if (client_normal(it->data) && client_can_focus(it->data)) { + if (client_normal(it->data) && client_can_focus(it->data) && + client_validate(it->data)) + { ob_debug("found in focus order\n"); return it->data; }