summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-12-19 16:20:36 +1030
committerPeter Hutterer <peter@cs.unisa.edu.au>2007-12-19 16:20:36 +1030
commiteace88989c3b65d5c20e9f37ea9b23c7c8e19335 (patch)
treed28ce1bffe89f43e495336847b97b59e7f82d355
parent9f6ae61ad12cc2813d04405458e1ca5aed8a539e (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)
-rw-r--r--include/xkbsrv.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 4395c87e3..b9d70843a 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;