all repos — openbox @ d5f9df0845eb28dee542a789e43ca4cc1b6d0a4f

openbox fork - make it a bit more like ryudo

provide a means to properly ignore enter events for focus changes
Dana Jansens danakj@orodu.net
commit

d5f9df0845eb28dee542a789e43ca4cc1b6d0a4f

parent

f595277f1c9c5359fc8a1dc0a0f190333a464779

2 files changed, 35 insertions(+), 11 deletions(-)

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

@@ -612,11 +612,8 @@ ob_main_loop_timeout_add(ob_main_loop,

config_focus_delay, focus_delay_func, client, NULL); - } else { - client_focus(client); - if (config_focus_raise) - stacking_raise(CLIENT_AS_WINDOW(client)); - } + } else + focus_delay_func(client); } }

@@ -712,6 +709,12 @@ client->frame->close_hover = FALSE;

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); + */ break; default: break;

@@ -1267,7 +1270,28 @@

ob_main_loop_timeout_remove_data(ob_main_loop, focus_delay_func, c); } -void event_ignore_enter_focus(guint num) +void event_ignore_queued_enters() { - ignore_enter_focus += num; + GSList *saved = NULL, *it; + XEvent *e; + + XSync(ob_display, FALSE); + + /* count the events */ + while (TRUE) { + e = g_new(XEvent, 1); + if (XCheckTypedEvent(ob_display, EnterNotify, e)) { + saved = g_slist_append(saved, e); + ++ignore_enter_focus; + } else { + g_free(e); + break; + } + } + /* put the events back */ + for (it = saved; it; it = g_slist_next(it)) { + XPutBackEvent(ob_display, it->data); + g_free(it->data); + } + g_slist_free(saved); }
M openbox/event.hopenbox/event.h

@@ -35,12 +35,12 @@

void event_startup(gboolean reconfig); void event_shutdown(gboolean reconfig); -/*! Request that a number of EnterNotify events not be used for distributing - focus */ -void event_ignore_enter_focus(guint num); - /*! Make as if the mouse just entered the client, use only when using focus follows mouse */ void event_enter_client(struct _ObClient *client); + +/*! Request that any queued EnterNotify events not be used for distributing + focus */ +void event_ignore_queued_enters(); #endif