--- /dev/null
+From 24e682d0fcc98d7c3f63fa484cc28285df48b499 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed, 25 Mar 2009 13:08:27 +1000
+Subject: [PATCH] dix: ignore non-pointer events in XineramaCheckMotion (#20557)
+
+Note that deviceKeyButtonPointer and keyButtonPointer have the same wire
+layout, so we only need to check for event types.
+
+X.Org Bug 20557 <http://bugs.freedesktop.org/show_bug.cgi?id=20557>
+
+Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+---
+ dix/events.c | 17 +++++++++++++++++
+ 1 files changed, 17 insertions(+), 0 deletions(-)
+
+diff --git a/dix/events.c b/dix/events.c
+index 6743cae..63b0674 100644
+--- a/dix/events.c
++++ b/dix/events.c
+@@ -625,6 +625,23 @@ XineramaCheckMotion(xEvent *xE, DeviceIntPtr pDev)
+
+ if (xE && !syncEvents.playingEvents)
+ {
++ /* GetPointerEvents() guarantees that pointer events have the correct
++ rootX/Y set already. */
++ switch(xE->u.u.type)
++ {
++ case ButtonPress:
++ case ButtonRelease:
++ case MotionNotify:
++ break;
++ default:
++ if (xE->u.u.type == DeviceButtonPress ||
++ xE->u.u.type == DeviceButtonRelease ||
++ xE->u.u.type == DeviceMotionNotify)
++ break;
++ /* all other events return FALSE */
++ return FALSE;
++ }
++
+ /* Motion events entering DIX get translated to Screen 0
+ coordinates. Replayed events have already been
+ translated since they've entered DIX before */
+--
+1.6.0.6
+