[PATCH] mi: fix cursor warping screens
Tiago Vignatti
tiago.vignatti at nokia.com
Wed Aug 5 11:02:29 PDT 2009
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 at nokia.com>
---
mi/mieq.c | 24 ++++++++++++++++--------
1 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/mi/mieq.c b/mi/mieq.c
index 6ec2dba..da110c3 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -367,14 +367,22 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
/* Custom event handler */
handler = miEventQueue.handlers[event->any.type];
- 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 {
+ 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) {
+ DequeueScreen(dev) = screen;
+ x = event->device.root_x;
+ y = event->device.root_y;
+ NewCurrentScreen (dev, DequeueScreen(dev), x, y);
+ }
+ /* No break here. Intentional fallthrough */
+ default:
master = CopyGetMasterEvent(dev, event, &mevent);
if (master)
--
1.5.6.3
--7JfCtLOvnd9MIVvH--
More information about the xorg-devel
mailing list