[xorg-x11-server] send keycode/event type down the wire when SlowKeys enable, otherwise

Peter Hutterer whot at fedoraproject.org
Tue Jun 26 04:40:56 UTC 2012


commit 04385c3d6870b276071cdc2dc755f814fbafa326
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jun 26 14:11:20 2012 +1000

    send keycode/event type down the wire when SlowKeys enable, otherwise
    
      GNOME won't warn about it (#816764)

 xorg-x11-server.spec                               |   10 +++-
 ...-keycode-and-event-type-for-slow-keys-ena.patch |   68 ++++++++++++++++++++
 ...-XKB-SlowKeys-have-been-automatically-ena.patch |   43 ++++++++++++
 3 files changed, 120 insertions(+), 1 deletions(-)
---
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index 8738a71..6d4ee90 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -48,7 +48,7 @@
 Summary:   X.Org X11 X server
 Name:      xorg-x11-server
 Version:   1.12.2
-Release:   3%{?gitdate:.%{gitdate}}%{dist}
+Release:   4%{?gitdate:.%{gitdate}}%{dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X
@@ -109,6 +109,10 @@ Patch7017: xserver-1.12.2-xorg-touch-test.patch
 # print newline on -displayfd (824594)
 Patch7018: xserver-1.12-os-print-newline-after-printing-display-name.patch
 
+# send keycode/event type for slow keys enable (#816764)
+Patch7019: xserver-1.12-xkb-warn-if-XKB-SlowKeys-have-been-automatically-ena.patch
+Patch7020: xserver-1.12-xkb-fill-in-keycode-and-event-type-for-slow-keys-ena.patch
+
 %define moduledir	%{_libdir}/xorg/modules
 %define drimoduledir	%{_libdir}/dri
 %define sdkdir		%{_includedir}/xorg
@@ -578,6 +582,10 @@ rm -rf $RPM_BUILD_ROOT
 %{xserver_source_dir}
 
 %changelog
+* Tue Jun 26 2012 Peter Hutterer <peter.hutterer at redhat.com> 1.12.2-4
+- send keycode/event type down the wire when SlowKeys enable, otherwise
+  GNOME won't warn about it (#816764)
+
 * Thu Jun 21 2012 Peter Hutterer <peter.hutterer at redhat.com> 1.12.2-3
 - print newline after printing $DISPLAY to -displayfd (#824594)
 
diff --git a/xserver-1.12-xkb-fill-in-keycode-and-event-type-for-slow-keys-ena.patch b/xserver-1.12-xkb-fill-in-keycode-and-event-type-for-slow-keys-ena.patch
new file mode 100644
index 0000000..acf79b1
--- /dev/null
+++ b/xserver-1.12-xkb-fill-in-keycode-and-event-type-for-slow-keys-ena.patch
@@ -0,0 +1,68 @@
+From 5b5941862cc88193fedd2e381f8bec4dcf411ec9 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Tue, 26 Jun 2012 10:30:35 +1000
+Subject: [PATCH] xkb: fill in keycode and event type for slow keys enablement
+
+eventType is set for the type that triggered a XkbControlsNotify event.
+Technically, SlowKeys is triggered by a timer which doesn't have a matching
+core event type. So we used to use 0 here.
+
+Practically, the timer is triggered by a key press + hold and cancelled when
+the key is released before the timeout expires. So we might as well set
+KeyPress (keycode) in the ControlsNotify to give clients a chance to differ
+between timer-triggered SlowKeys and client-triggered ones.
+
+This is a chance in behaviour, though I suspect with little impact.
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+ include/xkbsrv.h |    1 +
+ xkb/xkbAccessX.c |    6 ++++--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/include/xkbsrv.h b/include/xkbsrv.h
+index a19c8fb..f839edb 100644
+--- a/include/xkbsrv.h
++++ b/include/xkbsrv.h
+@@ -171,6 +171,7 @@ typedef struct _XkbSrvInfo {
+     KeyCode mouseKey;
+     KeyCode inactiveKey;
+     KeyCode slowKey;
++    KeyCode slowKeyEnableKey;
+     KeyCode repeatKey;
+     CARD8 krgTimerActive;
+     CARD8 beepType;
+diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
+index fe28e12..e7e0b73 100644
+--- a/xkb/xkbAccessX.c
++++ b/xkb/xkbAccessX.c
+@@ -291,8 +291,8 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
+         return 4000;
+     }
+     xkbi->krgTimerActive = _OFF_TIMER;
+-    cn.keycode = 0;
+-    cn.eventType = 0;
++    cn.keycode = xkbi->slowKeyEnableKey;
++    cn.eventType = KeyPress;
+     cn.requestMajor = 0;
+     cn.requestMinor = 0;
+     if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
+@@ -304,6 +304,7 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
+         LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
+     }
+ 
++    xkbi->slowKeyEnableKey = 0;
+     return 0;
+ }
+ 
+@@ -462,6 +463,7 @@ AccessXFilterPressEvent(DeviceEvent *event, DeviceIntPtr keybd)
+     if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
+         /* check for magic sequences */
+         if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
++            xkbi->slowKeyEnableKey = key;
+             if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
+                 xkbi->krgTimerActive = _KRG_WARN_TIMER;
+                 xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
+-- 
+1.7.10.2
+
diff --git a/xserver-1.12-xkb-warn-if-XKB-SlowKeys-have-been-automatically-ena.patch b/xserver-1.12-xkb-warn-if-XKB-SlowKeys-have-been-automatically-ena.patch
new file mode 100644
index 0000000..3981a3d
--- /dev/null
+++ b/xserver-1.12-xkb-warn-if-XKB-SlowKeys-have-been-automatically-ena.patch
@@ -0,0 +1,43 @@
+From 2503936e2be820220ba0c4d80e45e268d433c063 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Wed, 6 Jun 2012 14:38:49 +1000
+Subject: [PATCH] xkb: warn if XKB SlowKeys have been automatically enabled
+
+Slow keys are enabled when the XKB AccessX features are generally enabled
+(ctrls->enabled_ctrls & XkbAccessXKeysMask) and either shift key is held for
+8 seconds. For the unsuspecting user this appears as if the keyboard
+suddenly stops working.
+
+Print a warning to the log, so we can later tell them "told you so".
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
+---
+ xkb/xkbAccessX.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
+index 111bf9f..765772b 100644
+--- a/xkb/xkbAccessX.c
++++ b/xkb/xkbAccessX.c
+@@ -295,10 +295,15 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
+     cn.eventType = 0;
+     cn.requestMajor = 0;
+     cn.requestMinor = 0;
+-    if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask)
++    if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
+         AccessXKRGTurnOff((DeviceIntPtr) arg, &cn);
+-    else
++        LogMessage(X_INFO, "XKB SlowKeys are disabled.\n");
++    }
++    else {
+         AccessXKRGTurnOn((DeviceIntPtr) arg, XkbSlowKeysMask, &cn);
++        LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
++    }
++
+     return 0;
+ }
+ 
+-- 
+1.7.10.2
+


More information about the scm-commits mailing list