summaryrefslogtreecommitdiff
blob: c733ad24309a7ba9827f743927081389b1716e4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Fix handling of events when the X and Y valuators are not set. This fixes cursor
warping to (0,0) on Wacom button press events.

Index: xorg-server/dix/getevents.c
===================================================================
--- xorg-server.orig/dix/getevents.c	2011-08-24 12:56:49.905650624 +0300
+++ xorg-server/dix/getevents.c	2011-08-24 12:56:49.925650626 +0300
@@ -1185,31 +1185,37 @@
             }
         }
 
-        if (valuator_mask_isset(&mask, 0))
+        if (valuator_mask_isset(&mask, 0) || valuator_mask_isset(&mask, 1))
         {
-            x = valuator_mask_get(&mask, 0);
-            pDev->last.untransformed_x = x;
-        } else
-            x = pDev->last.untransformed_x;
-        if (valuator_mask_isset(&mask, 1))
-        {
-            y = valuator_mask_get(&mask, 1);
-            pDev->last.untransformed_y = y;
-        } else
-            y = pDev->last.untransformed_y;
+            if (valuator_mask_isset(&mask, 0))
+            {
+                x = valuator_mask_get(&mask, 0);
+                pDev->last.untransformed_x = x;
+            } else
+                x = pDev->last.untransformed_x;
+            if (valuator_mask_isset(&mask, 1))
+            {
+                y = valuator_mask_get(&mask, 1);
+                pDev->last.untransformed_y = y;
+            } else
+                y = pDev->last.untransformed_y;
 
-        transformAbsolute(pDev, &mask, &x, &y);
+            transformAbsolute(pDev, &mask, &x, &y);
 
-        if (x != pDev->last.valuators[0])
-            valuator_mask_set(&mask, 0, x);
-        else
-            valuator_mask_unset(&mask, 0);
-        if (y != pDev->last.valuators[1])
-            valuator_mask_set(&mask, 1, y);
-        else
-            valuator_mask_unset(&mask, 1);
+            if (x != pDev->last.valuators[0])
+                valuator_mask_set(&mask, 0, x);
+            else
+                valuator_mask_unset(&mask, 0);
+            if (y != pDev->last.valuators[1])
+                valuator_mask_set(&mask, 1, y);
+            else
+                valuator_mask_unset(&mask, 1);
 
-        moveAbsolute(pDev, &x, &y, &mask);
+            moveAbsolute(pDev, &x, &y, &mask);
+        } else {
+            x = pDev->last.valuators[0];
+            y = pDev->last.valuators[1];
+        }
     } else {
         if (flags & POINTER_ACCELERATE) {
             /* FIXME: Pointer acceleration only requires X and Y values. This