xserver: Branch 'master'

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Sun Sep 21 17:33:05 PDT 2008


 mi/mieq.c |   30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

New commits:
commit dac9e91870f9c787eac97c9d7d0607979c57eb5b
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Sep 21 17:32:24 2008 -0700

    mieq: Made custom event handlers safer for nevents >1

diff --git a/mi/mieq.c b/mi/mieq.c
index e1785a2..0a1b740 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -318,18 +318,10 @@ mieqProcessInputEvents(void)
         e = &miEventQueue.events[miEventQueue.head];
         miEventQueue.head = (miEventQueue.head + 1) % QUEUE_SIZE;
 
-        if ((handler = miEventQueue.handlers[e->events->event->u.u.type]))
-        {
-            /* If someone's registered a custom event handler, let them
-             * steal it. */
-            handler(DequeueScreen(e->pDev)->myNum, e->events->event,
-                    e->pDev, e->nevents);
-            if (!e->pDev->isMaster && e->pDev->u.master)
-            {
-                handler(DequeueScreen(e->pDev->u.master)->myNum,
-                        e->events->event, e->pDev->u.master, e->nevents);
-            }
-        } else if (e->pScreen != DequeueScreen(e->pDev)) {
+        /* Custom event handler */
+        handler = miEventQueue.handlers[e->events->event->u.u.type];
+
+        if (e->pScreen != DequeueScreen(e->pDev) && !handler) {
             /* Assumption - screen switching can only occur on motion events. */
             DequeueScreen(e->pDev) = e->pScreen;
             x = e->events[0].event->u.keyButtonPointer.rootX;
@@ -363,6 +355,19 @@ mieqProcessInputEvents(void)
             } else
                 master_event = NULL;
 
+            /* If someone's registered a custom event handler, let them
+             * steal it. */
+            if (handler)
+            {
+                handler(DequeueScreen(e->pDev)->myNum, e->events->event,
+                        e->pDev, e->nevents);
+                if (!e->pDev->isMaster && e->pDev->u.master)
+                {
+                    handler(DequeueScreen(e->pDev->u.master)->myNum,
+                            e->events->event, e->pDev->u.master, e->nevents);
+                }
+            } else
+            {
                 /* process slave first, then master */
                 e->pDev->public.processInputProc(event, e->pDev, e->nevents);
 
@@ -371,6 +376,7 @@ mieqProcessInputEvents(void)
                     e->pDev->u.master->public.processInputProc(master_event,
                             e->pDev->u.master, e->nevents);
                 }
+            }
 
             if (e->nevents > 1)
                 xfree(event);


More information about the xorg-commit mailing list