From 731add1ba6b2b11f59d9cf705baf80b9b813f04d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Jun 26 2012 04:27:05 +0000 Subject: send keycode/event type down the wire when SlowKeys enable, otherwise GNOME won't warn about it (#816764) --- 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 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 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 +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 +--- + 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 +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 +Reviewed-by: Dan Nicholson +--- + 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 +