]> Dogcows Code - chaz/openbox/blobdiff - obt/mainloop.c
make an event queue for X events. the queue's min size is 16 XEvents (~3k)
[chaz/openbox] / obt / mainloop.c
index ecdd7f7f535fdfafeb265884dbb79cf5ca32dbfb..753662569013c66d14bd95e58c19340b9646f05e 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "obt/mainloop.h"
 #include "obt/display.h"
+#include "obt/xqueue.h"
 #include "obt/util.h"
 
 #ifdef HAVE_STDIO_H
@@ -296,10 +297,8 @@ void obt_main_loop_run(ObtMainLoop *loop)
             loop->signal_fired = FALSE;
 
             sigprocmask(SIG_SETMASK, &oldset, NULL);
-        } else if (loop->display && XPending(loop->display)) {
-            do {
-                XNextEvent(loop->display, &e);
-
+        } else if (loop->display && xqueue_pending_local()) {
+            while (xqueue_next_local(&e) && loop->run) {
                 if (e.type == MappingNotify)
                     XRefreshKeyboardMapping(&e.xmapping);
 
@@ -307,10 +306,9 @@ void obt_main_loop_run(ObtMainLoop *loop)
                     ObtMainLoopXHandlerType *h = it->data;
                     h->func(&e, h->data);
                 }
-            } while (XPending(loop->display) && loop->run);
+            }
         } else {
             /* this only runs if there were no x events received */
-
             timer_dispatch(loop, (GTimeVal**)&wait);
 
             selset = loop->fd_set;
This page took 0.021157 seconds and 4 git commands to generate.