Peter Hutterer 731add1
From 5b5941862cc88193fedd2e381f8bec4dcf411ec9 Mon Sep 17 00:00:00 2001
Peter Hutterer 731add1
From: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer 731add1
Date: Tue, 26 Jun 2012 10:30:35 +1000
Peter Hutterer 731add1
Subject: [PATCH] xkb: fill in keycode and event type for slow keys enablement
Peter Hutterer 731add1
Peter Hutterer 731add1
eventType is set for the type that triggered a XkbControlsNotify event.
Peter Hutterer 731add1
Technically, SlowKeys is triggered by a timer which doesn't have a matching
Peter Hutterer 731add1
core event type. So we used to use 0 here.
Peter Hutterer 731add1
Peter Hutterer 731add1
Practically, the timer is triggered by a key press + hold and cancelled when
Peter Hutterer 731add1
the key is released before the timeout expires. So we might as well set
Peter Hutterer 731add1
KeyPress (keycode) in the ControlsNotify to give clients a chance to differ
Peter Hutterer 731add1
between timer-triggered SlowKeys and client-triggered ones.
Peter Hutterer 731add1
Peter Hutterer 731add1
This is a chance in behaviour, though I suspect with little impact.
Peter Hutterer 731add1
Peter Hutterer 731add1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer 731add1
---
Peter Hutterer 731add1
 include/xkbsrv.h |    1 +
Peter Hutterer 731add1
 xkb/xkbAccessX.c |    6 ++++--
Peter Hutterer 731add1
 2 files changed, 5 insertions(+), 2 deletions(-)
Peter Hutterer 731add1
Peter Hutterer 731add1
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
Peter Hutterer 731add1
index a19c8fb..f839edb 100644
Peter Hutterer 731add1
--- a/include/xkbsrv.h
Peter Hutterer 731add1
+++ b/include/xkbsrv.h
Peter Hutterer 731add1
@@ -171,6 +171,7 @@ typedef struct _XkbSrvInfo {
Peter Hutterer 731add1
     KeyCode mouseKey;
Peter Hutterer 731add1
     KeyCode inactiveKey;
Peter Hutterer 731add1
     KeyCode slowKey;
Peter Hutterer 731add1
+    KeyCode slowKeyEnableKey;
Peter Hutterer 731add1
     KeyCode repeatKey;
Peter Hutterer 731add1
     CARD8 krgTimerActive;
Peter Hutterer 731add1
     CARD8 beepType;
Peter Hutterer 731add1
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
Peter Hutterer 731add1
index fe28e12..e7e0b73 100644
Peter Hutterer 731add1
--- a/xkb/xkbAccessX.c
Peter Hutterer 731add1
+++ b/xkb/xkbAccessX.c
Peter Hutterer 731add1
@@ -291,8 +291,8 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
Peter Hutterer 731add1
         return 4000;
Peter Hutterer 731add1
     }
Peter Hutterer 731add1
     xkbi->krgTimerActive = _OFF_TIMER;
Peter Hutterer 731add1
-    cn.keycode = 0;
Peter Hutterer 731add1
-    cn.eventType = 0;
Peter Hutterer 731add1
+    cn.keycode = xkbi->slowKeyEnableKey;
Peter Hutterer 731add1
+    cn.eventType = KeyPress;
Peter Hutterer 731add1
     cn.requestMajor = 0;
Peter Hutterer 731add1
     cn.requestMinor = 0;
Peter Hutterer 731add1
     if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
Peter Hutterer 731add1
@@ -304,6 +304,7 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
Peter Hutterer 731add1
         LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
Peter Hutterer 731add1
     }
Peter Hutterer 731add1
 
Peter Hutterer 731add1
+    xkbi->slowKeyEnableKey = 0;
Peter Hutterer 731add1
     return 0;
Peter Hutterer 731add1
 }
Peter Hutterer 731add1
 
Peter Hutterer 731add1
@@ -462,6 +463,7 @@ AccessXFilterPressEvent(DeviceEvent *event, DeviceIntPtr keybd)
Peter Hutterer 731add1
     if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
Peter Hutterer 731add1
         /* check for magic sequences */
Peter Hutterer 731add1
         if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
Peter Hutterer 731add1
+            xkbi->slowKeyEnableKey = key;
Peter Hutterer 731add1
             if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
Peter Hutterer 731add1
                 xkbi->krgTimerActive = _KRG_WARN_TIMER;
Peter Hutterer 731add1
                 xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
Peter Hutterer 731add1
-- 
Peter Hutterer 731add1
1.7.10.2
Peter Hutterer 731add1