From f1989bb7292fc5b5c2c34587291e5b2a1a2830e1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer <peter.hutterer@who-t.net> Date: Sat, 11 Feb 2012 04:47:54 +1000 Subject: [PATCH] xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch: reset last.scroll on the device whenever the slave device switched to avoid jumps during scrolling (#788632). --- xorg-x11-server.spec | 10 +++- ...croll-when-resetting-the-valuator-45.patch | 47 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 0618c51..d0f6044 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -48,7 +48,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.11.99.901 -Release: 3%{?gitdate:.%{gitdate}}%{dist} +Release: 4%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -102,6 +102,9 @@ Patch7007: xserver-1.10.99.1-test.patch # RedHat/Fedora-specific patch Patch7013: xserver-1.12-Xext-fix-selinux-build-failure.patch +# Bug 788632 - all scrolled windows jump up one page after you middle click a link +Patch7014: xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch + %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri %define sdkdir %{_includedir}/xorg @@ -557,6 +560,11 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Sat Feb 11 2012 Peter Hutterer <peter.hutterer@redhat.com> 1.11.99.901-4.20120124 +- xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch: + reset last.scroll on the device whenever the slave device switched to + avoid jumps during scrolling (#788632). + * Tue Jan 24 2012 Peter Hutterer <peter.hutterer@redhat.com> 1.11.99.901-3.20120124 - Today's git snapshot - xserver-1.12-xaa-sdk-headers.patch: drop, a55214d11916b diff --git a/xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch b/xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch new file mode 100644 index 0000000..61199f3 --- /dev/null +++ b/xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch @@ -0,0 +1,47 @@ +From 6538a7d96844526516dd76ec5c4159abfb56cefe Mon Sep 17 00:00:00 2001 +From: Peter Hutterer <peter.hutterer@who-t.net> +Date: Sat, 11 Feb 2012 01:29:26 +1000 +Subject: [PATCH] dix: reset last.scroll when resetting the valuator (#45611) + +last.scroll remained on the last-submitted scrolling value but last.valuator +was changed whenever the slave device changed. The first scrolling delta +after a switch was then calculated as (last.scroll - new abs value), causing +erroneous scrolling events. + +Test case: +- synaptics with a scrolling method enabled, other device with 3+ axes (e.g. + wacom) +- scroll on touchpad +- use other device +- scroll on touchpad + +The second scroll caused erroneous button press/release events. + +X.Org Bug 45611 <http://bugs.freedesktop.org/show_bug.cgi?id=45611> +--- + dix/getevents.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/dix/getevents.c b/dix/getevents.c +index 7678aa1..6ea4ba0 100644 +--- a/dix/getevents.c ++++ b/dix/getevents.c +@@ -360,6 +360,7 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev) + if (i >= lastSlave->valuator->numAxes) + { + pDev->last.valuators[i] = 0; ++ valuator_mask_set_double(pDev->last.scroll, i, 0); + } + else + { +@@ -367,6 +368,7 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev) + val = rescaleValuatorAxis(val, lastSlave->valuator->axes + i, + pDev->valuator->axes + i, 0, 0); + pDev->last.valuators[i] = val; ++ valuator_mask_set_double(pDev->last.scroll, i, val); + } + } + } +-- +1.7.7.5 +