mi: fix cursor warping screens

The server was processing ET_RawMotion type when the cursor was wrapping to
another screen and getting wrong valuator values. This fix such issue
considering only ET_Motion, ET_KeyPress, ET_KeyRelease, ET_ButtonPress and
ET_ButtonRelease types when the cursor detects a new screen, keeping the
"normal" processing of device events.

Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Tiago Vignatti 2009-08-05 21:02:29 +03:00
parent d573cc46d3
commit f9a2fff224

View File

@ -367,14 +367,24 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
/* Custom event handler */ /* Custom event handler */
handler = miEventQueue.handlers[event->any.type]; handler = miEventQueue.handlers[event->any.type];
switch (event->any.type) {
/* Catch events that include valuator information and check if they
* are changing the screen */
case ET_Motion:
case ET_KeyPress:
case ET_KeyRelease:
case ET_ButtonPress:
case ET_ButtonRelease:
if (dev && screen && screen != DequeueScreen(dev) && !handler) { if (dev && screen && screen != DequeueScreen(dev) && !handler) {
/* Assumption - screen switching can only occur on motion events. */
DequeueScreen(dev) = screen; DequeueScreen(dev) = screen;
x = event->device.root_x; x = event->device.root_x;
y = event->device.root_y; y = event->device.root_y;
NewCurrentScreen (dev, DequeueScreen(dev), x, y); NewCurrentScreen (dev, DequeueScreen(dev), x, y);
} }
else { break;
default:
break;
}
master = CopyGetMasterEvent(dev, event, &mevent); master = CopyGetMasterEvent(dev, event, &mevent);
if (master) if (master)
@ -401,7 +411,6 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
master->public.processInputProc(&mevent, master); master->public.processInputProc(&mevent, master);
} }
} }
}
/* Call this from ProcessInputEvents(). */ /* Call this from ProcessInputEvents(). */
void void