all repos — openbox @ 3f372aaebfb4d40947a25a6727559aac7e18e113

openbox fork - make it a bit more like ryudo

make focusDelay check the destroying window properly before killing the timer
Dana Jansens danakj@orodu.net
commit

3f372aaebfb4d40947a25a6727559aac7e18e113

parent

e2b79a0b59e6317ec03cd152ead04fd5bb936610

1 files changed, 13 insertions(+), 6 deletions(-)

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

@@ -72,6 +72,8 @@ Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask

}; static int mask_table_size; +static ObClient *focus_delay_client; + #ifdef USE_SM static void ice_handler(int fd, gpointer conn) {

@@ -657,8 +659,10 @@ break;

case OB_FRAME_CONTEXT_FRAME: /* XXX if doing a 'reconfigure' make sure you kill this timer, maybe all timers.. */ - if (config_focus_delay) + if (config_focus_delay) { + focus_delay_client = NULL; ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func); + } default: break; }

@@ -705,8 +709,8 @@ if (config_focus_delay) {

ob_main_loop_timeout_add(ob_main_loop, config_focus_delay, focus_delay_func, - client, - NULL); + NULL, NULL); + focus_delay_client = client; } else client_focus(client); }

@@ -1178,12 +1182,15 @@ }

static gboolean focus_delay_func(gpointer data) { - ObClient *c = data; - client_focus(c); + client_focus(focus_delay_client); return FALSE; /* no repeat */ } static void focus_delay_client_dest(gpointer data) { - ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func); + ObClient *c = data; + if (c == focus_delay_client) { + focus_delay_client = NULL; + ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func); + } }