Imported Debian patch 2:1.11.4-0ubuntu10
[glsdk/xserver.git] / debian / patches / 503_fix_mouse_warp.patch
1 Subject: dix: set raw event values before adding up relative values (#46976)
2 Date: Wed, 21 Mar 2012 04:09:18 -0000
3 From: Peter Hutterer <peter.hutterer@who-t.net>
5 Regression introduced in 4e52cc0ef48145134cd58d357fb7289e6f8bb709
7 Raw event values are values as-is from the driver, modified only be
8 transformation or acceleration. 4e52cc caused the mask to be updated from
9 driver-submitted relative to device-absolute coordinates, and that mask was
10 then written into the raw events.
12 Move the raw event update into the respective branches for absolute/relative
13 events.
15 X.Org Bug 46976 <http://bugs.freedesktop.org/show_bug.cgi?id=46976>
17 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
18 Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
19 Reviewed-by: Daniel Stone <daniel@fooishbar.org>
20 Reviewed-by: Simon Thum <simon.thum@gmx.de>
22 ---
23 dix/getevents.c |    9 +++++----
24  1 files changed, 5 insertions(+), 4 deletions(-)
26 diff --git a/dix/getevents.c b/dix/getevents.c
27 index 5b9cef3..fd5998d 100644
28 --- a/dix/getevents.c
29 +++ b/dix/getevents.c
30 @@ -1311,17 +1311,18 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
31  
32          transformAbsolute(pDev, &mask);
33          clipAbsolute(pDev, &mask);
34 +        if ((flags & POINTER_NORAW) == 0)
35 +            set_raw_valuators(raw, &mask, raw->valuators.data);
36      } else {
37          if (flags & POINTER_ACCELERATE)
38              accelPointer(pDev, &mask, ms);
39 +        if ((flags & POINTER_NORAW) == 0)
40 +            set_raw_valuators(raw, &mask, raw->valuators.data);
41 +
42          moveRelative(pDev, &mask);
43      }
44  
45      /* valuators are in device coordinate system in absolute coordinates */
46 -
47 -    if ((flags & POINTER_NORAW) == 0)
48 -        set_raw_valuators(raw, &mask, raw->valuators.data);
49 -
50      scale_to_desktop(pDev, &mask, &devx, &devy, &screenx, &screeny);
51      scr = positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
52                           &mask, &devx, &devy, &screenx, &screeny);