/[pkg-src]/trunk/xorg-server/patches/xorg-server-1.17.1-dix-hook-up-the-unaccelerated-valuator-masks.patch |
Contents of /trunk/xorg-server/patches/xorg-server-1.17.1-dix-hook-up-the-unaccelerated-valuator-masks.patch
Parent Directory | Revision Log
Revision 2576 -
(show annotations)
(download)
Mon Jun 15 13:02:17 2015 UTC (9 years, 3 months ago) by niro
File size: 5208 byte(s)
Mon Jun 15 13:02:17 2015 UTC (9 years, 3 months ago) by niro
File size: 5208 byte(s)
-fixed garbage patches
1 | From 7504fbd2239257f1a00a1a15d02862eea81f167c Mon Sep 17 00:00:00 2001 |
2 | From: Peter Hutterer <peter.hutterer@who-t.net> |
3 | Date: Tue, 5 May 2015 14:48:41 +1000 |
4 | Subject: [PATCH] dix: hook up the unaccelerated valuator masks |
5 | |
6 | If present, access the unaccelerated valuator mask values for DGA and XI2 raw |
7 | events. |
8 | |
9 | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> |
10 | Reviewed-by: Hans de Goede <hdegoede@redhat.com> |
11 | --- |
12 | dix/getevents.c | 31 ++++++++++++++++++++++--------- |
13 | hw/xfree86/common/xf86Xinput.c | 4 ++++ |
14 | 2 files changed, 26 insertions(+), 9 deletions(-) |
15 | |
16 | diff --git a/dix/getevents.c b/dix/getevents.c |
17 | index 6fb12c5..64bf76e 100644 |
18 | --- a/dix/getevents.c |
19 | +++ b/dix/getevents.c |
20 | @@ -213,14 +213,25 @@ init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail) |
21 | } |
22 | |
23 | static void |
24 | -set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, double *data) |
25 | +set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, |
26 | + BOOL use_unaccel, double *data) |
27 | { |
28 | int i; |
29 | |
30 | + use_unaccel = use_unaccel && valuator_mask_has_unaccelerated(mask); |
31 | + |
32 | for (i = 0; i < valuator_mask_size(mask); i++) { |
33 | if (valuator_mask_isset(mask, i)) { |
34 | + double v; |
35 | + |
36 | SetBit(event->valuators.mask, i); |
37 | - data[i] = valuator_mask_get_double(mask, i); |
38 | + |
39 | + if (use_unaccel) |
40 | + v = valuator_mask_get_unaccelerated(mask, i); |
41 | + else |
42 | + v = valuator_mask_get_double(mask, i); |
43 | + |
44 | + data[i] = v; |
45 | } |
46 | } |
47 | } |
48 | @@ -1138,11 +1149,11 @@ GetKeyboardEvents(InternalEvent *events, DeviceIntPtr pDev, int type, |
49 | valuator_mask_copy(&mask, mask_in); |
50 | |
51 | init_raw(pDev, raw, ms, type, key_code); |
52 | - set_raw_valuators(raw, &mask, raw->valuators.data_raw); |
53 | + set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw); |
54 | |
55 | clipValuators(pDev, &mask); |
56 | |
57 | - set_raw_valuators(raw, &mask, raw->valuators.data); |
58 | + set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); |
59 | |
60 | event = &events->device_event; |
61 | init_device_event(event, pDev, ms); |
62 | @@ -1423,9 +1434,11 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, |
63 | num_events++; |
64 | |
65 | init_raw(pDev, raw, ms, type, buttons); |
66 | - set_raw_valuators(raw, &mask, raw->valuators.data_raw); |
67 | + set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw); |
68 | } |
69 | |
70 | + valuator_mask_drop_unaccelerated(&mask); |
71 | + |
72 | /* valuators are in driver-native format (rel or abs) */ |
73 | |
74 | if (flags & POINTER_ABSOLUTE) { |
75 | @@ -1438,7 +1451,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, |
76 | transformAbsolute(pDev, &mask); |
77 | clipAbsolute(pDev, &mask); |
78 | if ((flags & POINTER_NORAW) == 0 && raw) |
79 | - set_raw_valuators(raw, &mask, raw->valuators.data); |
80 | + set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); |
81 | } |
82 | else { |
83 | transformRelative(pDev, &mask); |
84 | @@ -1446,7 +1459,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, |
85 | if (flags & POINTER_ACCELERATE) |
86 | accelPointer(pDev, &mask, ms); |
87 | if ((flags & POINTER_NORAW) == 0 && raw) |
88 | - set_raw_valuators(raw, &mask, raw->valuators.data); |
89 | + set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); |
90 | |
91 | moveRelative(pDev, flags, &mask); |
92 | } |
93 | @@ -1951,7 +1964,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, |
94 | events++; |
95 | num_events++; |
96 | init_raw(dev, raw, ms, type, client_id); |
97 | - set_raw_valuators(raw, &mask, raw->valuators.data_raw); |
98 | + set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw); |
99 | } |
100 | |
101 | event = &events->device_event; |
102 | @@ -2013,7 +2026,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, |
103 | screeny = dev->spriteInfo->sprite->hotPhys.y; |
104 | } |
105 | if (need_rawevent) |
106 | - set_raw_valuators(raw, &mask, raw->valuators.data); |
107 | + set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); |
108 | |
109 | /* Indirect device touch coordinates are not used for cursor positioning. |
110 | * They are merely informational, and are provided in device coordinates. |
111 | diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c |
112 | index 1fb5b16..5ce4c71 100644 |
113 | --- a/hw/xfree86/common/xf86Xinput.c |
114 | +++ b/hw/xfree86/common/xf86Xinput.c |
115 | @@ -1137,12 +1137,16 @@ xf86CheckMotionEvent4DGA(DeviceIntPtr device, int is_absolute, |
116 | dx = valuator_mask_get(mask, 0); |
117 | if (is_absolute) |
118 | dx -= device->last.valuators[0]; |
119 | + else if (valuator_mask_has_unaccelerated(mask)) |
120 | + dx = valuator_mask_get_unaccelerated(mask, 0); |
121 | } |
122 | |
123 | if (valuator_mask_isset(mask, 1)) { |
124 | dy = valuator_mask_get(mask, 1); |
125 | if (is_absolute) |
126 | dy -= device->last.valuators[1]; |
127 | + else if (valuator_mask_has_unaccelerated(mask)) |
128 | + dy = valuator_mask_get_unaccelerated(mask, 1); |
129 | } |
130 | |
131 | if (DGAStealMotionEvent(device, idx, dx, dy)) |
132 | -- |
133 | 2.4.1 |
134 |