xserver: Branch 'mpx' - 2 commits

Peter Hutterer whot at kemper.freedesktop.org
Fri Nov 23 20:39:38 PST 2007


 dix/events.c |   21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

New commits:
commit bf3198c8c56289244c58d36c6869442479fd3481
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Sat Nov 24 15:00:57 2007 +1030

    dix: fix typo

diff --git a/dix/events.c b/dix/events.c
index 123f21f..43f4e37 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4326,7 +4326,7 @@ EnterLeaveEvent(
 #endif
     {
         event.u.enterLeave.state = (keybd) ? keybd->key->state : 0;
-        event.u.enterLeave.state |+ mouse->button->state;
+        event.u.enterLeave.state |= mouse->button->state;
     }
     event.u.enterLeave.mode = mode;
     focus = (keybd) ? keybd->focus->win : None;
commit 5dabe448bda68a483bf444a4adfed2b25b30f600
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Sat Nov 24 15:00:43 2007 +1030

    dix: Add special treatment of NotifyUngrab for enter/leave events.
    
    In some cases (e.g. using x2x) the previous model broke, with a window ending
    not counting down to 0 anymore. Special treatment for NotifyUngrab seems to
    help here.
    
    Current solution: If a NotifyGrab is to be sent ignore it. If a NotifyUngrab
    enter is sent, only adjust the semaphore if it is on 0. Likewise, do the same
    for a NotifyUngrab leave if the semaphore is on 1. This seems to work alright
    so far.

diff --git a/dix/events.c b/dix/events.c
index 88ce501..123f21f 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4468,15 +4468,20 @@ LeaveNotifies(DeviceIntPtr pDev,
     }
 }
 
+/* welcome to insanity */
 #define FOCUS_SEMAPHORE_MODIFY(win, field, mode, val) \
-    { \
-        if (mode != NotifyGrab && mode != NotifyUngrab) \
-        { \
-            FocusSemaphoresPtr sem;\
-            sem = (FocusSemaphoresPtr)win->devPrivates[FocusPrivatesIndex].ptr; \
+{ \
+    FocusSemaphoresPtr sem;\
+    sem = (FocusSemaphoresPtr)win->devPrivates[FocusPrivatesIndex].ptr; \
+    if (mode != NotifyGrab && mode != NotifyUngrab) { \
+        sem->field += val; \
+    } else if (mode == NotifyUngrab) { \
+        if (sem->field == 0 && val > 0) \
             sem->field += val; \
-        } \
-    }
+        else if (sem->field == 1 && val < 0) \
+            sem->field += val; \
+    } \
+}
 #define ENTER_LEAVE_SEMAPHORE_UP(win, mode)  \
         FOCUS_SEMAPHORE_MODIFY(win, enterleave, mode, 1);
 


More information about the xorg-commit mailing list