summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-17 23:20:50 +0000
committerDana Jansens <danakj@orodu.net>2007-05-17 23:20:50 +0000
commitbba37f0cd103e033d77ed24cc1da92aa3d57f778 (patch)
treeb1ae091e7c4832e6ab5ffe2f76f7ebf5b01a398d
parent18ef3dce1c0c93b5370c7b8bb322ba8ddd5deea3 (diff)
ignore enter events without disrupting the event queue
-rw-r--r--openbox/event.c46
1 files changed, 18 insertions, 28 deletions
diff --git a/openbox/event.c b/openbox/event.c
index 458e4a35..0250bfc8 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -1717,39 +1717,29 @@ void event_halt_focus_delay()
ob_main_loop_timeout_remove(ob_main_loop, focus_delay_func);
}
+static Bool event_look_for_enters(Display *d, XEvent *e, XPointer arg)
+{
+ guint *count = (guint*)arg;
+ if (e->type == EnterNotify) {
+ ObWindow *win;
+
+ win = g_hash_table_lookup(window_map, &e->xany.window);
+ if (win && WINDOW_IS_CLIENT(win))
+ ++(*count);
+ }
+ return False; /* don't disrupt the focus order, just count them */
+}
+
void event_ignore_queued_enters()
{
- GSList *saved = NULL, *it;
- XEvent *e;
- gint i = 0;
+ XEvent e;
XSync(ob_display, FALSE);
- /* count the events */
- while (TRUE) {
- e = g_new(XEvent, 1);
- if (XCheckTypedEvent(ob_display, EnterNotify, e)) {
- ObWindow *win;
-
- win = g_hash_table_lookup(window_map, &e->xany.window);
- /* check to make sure we're not ignoring the same event multiple
- times */
- if (win && WINDOW_IS_CLIENT(win) && i >= ignore_enter_focus)
- ++ignore_enter_focus;
-
- saved = g_slist_append(saved, e);
- ++i;
- } 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);
+ /* count the events without disrupting them */
+ XCheckIfEvent(ob_display, &e, event_look_for_enters,
+ (XPointer)&ignore_enter_focus);
+
}
gboolean event_time_after(Time t1, Time t2)