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:
parent
d573cc46d3
commit
f9a2fff224
15
mi/mieq.c
15
mi/mieq.c
|
@ -367,14 +367,24 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
|
|||
/* Custom event handler */
|
||||
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) {
|
||||
/* Assumption - screen switching can only occur on motion events. */
|
||||
DequeueScreen(dev) = screen;
|
||||
x = event->device.root_x;
|
||||
y = event->device.root_y;
|
||||
NewCurrentScreen (dev, DequeueScreen(dev), x, y);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
master = CopyGetMasterEvent(dev, event, &mevent);
|
||||
|
||||
if (master)
|
||||
|
@ -401,7 +411,6 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
|
|||
master->public.processInputProc(&mevent, master);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Call this from ProcessInputEvents(). */
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue