X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=05024e72a9a59eaffc83debe8ef1461ebab86654;hb=380af80a136214e15ff8efa9f5c8ad6dd511872a;hp=8a15d789f398bbfa606f5fd32e5fdd9cf7abc96d;hpb=2a2008e837b13d32be6b0bb8edea9e9475aa44fc;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 8a15d789..05024e72 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -321,12 +321,23 @@ static void event_client_dest(ObClient *client, gpointer data) focus_in = NULL; if (client == focus_out) focus_out = NULL; + if (client == focus_hilite) + focus_hilite = NULL; } static void event_done(gpointer data) { static ObClient *last = NULL; + /* sometimes focus_hilite can be on an unfocused window, this make sure + it loses its focus hilite when focus moves */ + if (focus_hilite && + (focus_in && focus_hilite != focus_in) && + (focus_out && focus_hilite != focus_out)) + { + frame_adjust_focus(focus_hilite->frame, FALSE); + } + if (focus_in) { if (focus_in != focus_client) { focus_set_client(focus_in); @@ -341,6 +352,8 @@ static void event_done(gpointer data) client_calc_layer(focus_out); } + focus_hilite = focus_in; + if (focus_client != last) { if (!focus_client) focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS); @@ -452,11 +465,9 @@ static void event_process(const XEvent *ec, gpointer data) e->type == MotionNotify) mouse_event(client, e); else if (e->type == KeyPress) - /* when in the middle of a focus cycling action, this - causes the window which appears to be focused to be - the one on which the actions will be executed */ - keyboard_event((focus_cycle_target ? - focus_cycle_target : client), e); + keyboard_event((focus_cycle_target ? focus_cycle_target : + (focus_hilite ? focus_hilite : client)), + e); } } } @@ -625,12 +636,10 @@ static void event_handle_client(ObClient *client, XEvent *e) frame_adjust_state(client->frame); break; case OB_FRAME_CONTEXT_FRAME: - /* - if (config_focus_follow && config_focus_delay) - ob_main_loop_timeout_remove_data(ob_main_loop, - focus_delay_func, - client); - */ + if (config_focus_follow && config_focus_delay) + ob_main_loop_timeout_remove_data(ob_main_loop, + focus_delay_func, + client); break; default: break; @@ -1190,6 +1199,11 @@ static void focus_delay_client_dest(ObClient *client, gpointer data) ob_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func, client); } +void event_halt_focus_delay() +{ + ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func); +} + void event_ignore_queued_enters() { GSList *saved = NULL, *it;