File u_dix_make-sure-the-mask-is-set-for-emulated-scroll-events.patch of Package xorg-x11-server.openSUSE_12.2_Update
Git-Commit: cb306a8f174bec9ded95191b91797f59250e6808
Path-Mainline: Upstream
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue, 31 Jul 2012 16:09:38 +1000
Subject: [PATCH] dix: make sure the mask is set for emulated scroll events
References: bnc#779322 fdo#52508
Signed-off-by: Michal Srb <msrb@suse.com>
If a device has smooth scrolling axes, but submits scroll button events, we
convert those to motion events and update the valuators. For legacy button
events, the valuator mask is likely unset though, causing
add_to_scroll_valuator() to return early, leaving us with an empty mask.
That again skipped the rest of the code and no events were generated.
Fix it by making sure that the scroll valuator in the mask is at least
initialized to 0.
Broke evdev wheel emulation, introduced by
54476b5e4461ff523e935961affabcf0de12c556.
X.Org Bug 52508 <http://bugs.freedesktop.org/show_bug.cgi?id=52508>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
diff --git a/dix/getevents.c b/dix/getevents.c
index 27c2e04..b3bb162 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -1625,6 +1625,8 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
if (adj != 0.0 && axis != -1) {
adj *= pDev->valuator->axes[axis].scroll.increment;
+ if (!valuator_mask_isset(&mask, axis))
+ valuator_mask_set(&mask, axis, 0);
add_to_scroll_valuator(pDev, &mask, axis, adj);
type = MotionNotify;
buttons = 0;