From 4b875221558eb1402eab13182bbe9a4ab8bf724c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 9 Oct 2008 17:26:00 +1030 Subject: [PATCH] kdrive: fix dixflags so they're always defined before enqueuing events #17734 If absolute events were posted, dixflags got set conditionally on whether the valuators are different from the last posted set of values. If dixflags are undefined however, the DIX interprets them as relative valuators. Fix this by making sure defining dixflags is always defined. X.Org Bug 17724 --- hw/kdrive/src/kinput.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 8a1380f..15fd3b7 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -2105,13 +2105,17 @@ KdEnqueuePointerEvent(KdPointerInfo *pi, unsigned long flags, int rx, int ry, if (flags & KD_MOUSE_DELTA) { if (x || y || z) + { dixflags = POINTER_RELATIVE | POINTER_ACCELERATE; - } else if (x != pi->dixdev->last.valuators[0] || - y != pi->dixdev->last.valuators[1]) - dixflags = POINTER_ABSOLUTE; - - if (dixflags) - _KdEnqueuePointerEvent(pi, MotionNotify, x, y, z, 0, dixflags, FALSE); + _KdEnqueuePointerEvent(pi, MotionNotify, x, y, z, 0, dixflags, FALSE); + } + } else + { + dixflags = POINTER_ABSOLUTE; + if (x != pi->dixdev->last.valuators[0] || + y != pi->dixdev->last.valuators[1]) + _KdEnqueuePointerEvent(pi, MotionNotify, x, y, z, 0, dixflags, FALSE); + } buttons = flags; -- 1.5.4.3