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