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 */
|
/* 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
|
||||||
|
|
Loading…
Reference in New Issue