summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-12-19 16:20:36 +1030
committerDaniel Stone <daniel@fooishbar.org>2007-12-29 00:14:12 +0200
commit60144ac814ee26e151186f7c93cb1a273468d497 (patch)
treeb4ddc97df47ce1c275df9674efd94c4e829f8421
parent102c012c206cbb3bbf0fa5b0c8f0ce2ce9bba72a (diff)
include: never overwrite realInputProc with enqueueInputProc. Bug #13511
In some cases (triggered by a key repeat during a sync grab) XKB unwrapping can overwrite the device's realInputProc with the enqueueInputProc. When the grab is released and the events are replayed, we end up in an infinite loop. Each event is replayed and in replaying pushed to the end of the queue again. This fix is a hack only. It ensures that the realInputProc is never overwritten with the enqueueInputProc. This fixes Bug #13511 (https://bugs.freedesktop.org/show_bug.cgi?id=13511) (cherry picked from commit eace88989c3b65d5c20e9f37ea9b23c7c8e19335) (cherry picked from commit 50e80c39870adfdc84fdbc00dddf1362117ad443)
-rw-r--r--include/xkbsrv.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 167dbec59..9174eb64e 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -258,7 +258,8 @@ typedef struct
device->public.processInputProc = proc; \
oldprocs->processInputProc = \
oldprocs->realInputProc = device->public.realInputProc; \
- device->public.realInputProc = proc; \
+ if (proc != device->public.enqueueInputProc) \
+ device->public.realInputProc = proc; \
oldprocs->unwrapProc = device->unwrapProc; \
device->unwrapProc = unwrapproc;