[gnome-settings-daemon/f13/master] - Apply a11y settings to newly plugged keyboards as well (#647022)
Bastien Nocera
hadess at fedoraproject.org
Wed Oct 27 14:03:04 UTC 2010
commit d9be2ebe25f386200fc851d9ca5edd4fe603fe95
Author: Bastien Nocera <hadess at hadess.net>
Date: Wed Oct 27 15:03:02 2010 +0100
- Apply a11y settings to newly plugged keyboards as well (#647022)
...-keyboard-a11y-settings-for-new-keyboards.patch | 139 ++++++++++++++++++++
gnome-settings-daemon.spec | 10 ++-
2 files changed, 148 insertions(+), 1 deletions(-)
---
diff --git a/0001-Apply-keyboard-a11y-settings-for-new-keyboards.patch b/0001-Apply-keyboard-a11y-settings-for-new-keyboards.patch
new file mode 100644
index 0000000..e5acfc7
--- /dev/null
+++ b/0001-Apply-keyboard-a11y-settings-for-new-keyboards.patch
@@ -0,0 +1,139 @@
+From 5972dd9c1628de941215bd3a3a31fbcfa098089f Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess at hadess.net>
+Date: Thu, 17 Jun 2010 15:58:27 +0100
+Subject: [PATCH] Apply keyboard a11y settings for new keyboards
+
+1. Enable mouse-keys, check they work
+2. Unplug keyboard
+3. Replug keyboard
+4. Mouse keys don't work any more.
+
+This patch fixes the above.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=621899
+---
+ plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c | 80 +++++++++++++++++++++
+ 1 files changed, 80 insertions(+), 0 deletions(-)
+
+diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c
+index ba19b42..f355b24 100644
+--- a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c
++++ b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c
+@@ -41,6 +41,11 @@
+ #include <X11/XKBlib.h>
+ #include <X11/extensions/XKBstr.h>
+
++#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
++#include <X11/extensions/XInput.h>
++#include <X11/extensions/XIproto.h>
++#endif
++
+ #ifdef HAVE_LIBNOTIFY
+ #include <libnotify/notify.h>
+ #endif /* HAVE_LIBNOTIFY */
+@@ -76,6 +81,8 @@ static void gsd_a11y_keyboard_manager_class_init (GsdA11yKeyboardManagerCla
+ static void gsd_a11y_keyboard_manager_init (GsdA11yKeyboardManager *a11y_keyboard_manager);
+ static void gsd_a11y_keyboard_manager_finalize (GObject *object);
+ static void gsd_a11y_keyboard_manager_ensure_status_icon (GsdA11yKeyboardManager *manager);
++static void set_server_from_gconf (GsdA11yKeyboardManager *manager,
++ GConfClient *client);
+
+ G_DEFINE_TYPE (GsdA11yKeyboardManager, gsd_a11y_keyboard_manager, G_TYPE_OBJECT)
+
+@@ -88,6 +95,71 @@ static gpointer manager_object = NULL;
+ #define d(str) do { } while (0)
+ #endif
+
++#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
++static GdkFilterReturn
++devicepresence_filter (GdkXEvent *xevent,
++ GdkEvent *event,
++ gpointer data)
++{
++ XEvent *xev = (XEvent *) xevent;
++ XEventClass class_presence;
++ int xi_presence;
++
++ DevicePresence (gdk_x11_get_default_xdisplay (), xi_presence, class_presence);
++
++ if (xev->type == xi_presence)
++ {
++ XDevicePresenceNotifyEvent *dpn = (XDevicePresenceNotifyEvent *) xev;
++ if (dpn->devchange == DeviceEnabled) {
++ GConfClient *client;
++ client = gconf_client_get_default ();
++ set_server_from_gconf (data, client);
++ g_object_unref (client);
++ }
++ }
++ return GDK_FILTER_CONTINUE;
++}
++
++static gboolean
++supports_xinput_devices (void)
++{
++ gint op_code, event, error;
++
++ return XQueryExtension (GDK_DISPLAY (),
++ "XInputExtension",
++ &op_code,
++ &event,
++ &error);
++}
++
++static void
++set_devicepresence_handler (GsdA11yKeyboardManager *manager)
++{
++ Display *display;
++ XEventClass class_presence;
++ int xi_presence;
++
++ if (!supports_xinput_devices ())
++ return;
++
++ display = gdk_x11_get_default_xdisplay ();
++
++ gdk_error_trap_push ();
++ DevicePresence (display, xi_presence, class_presence);
++ /* FIXME:
++ * Note that this might overwrite other events, see:
++ * https://bugzilla.gnome.org/show_bug.cgi?id=610245#c2
++ **/
++ XSelectExtensionEvent (display,
++ RootWindow (display, DefaultScreen (display)),
++ &class_presence, 1);
++
++ gdk_flush ();
++ if (!gdk_error_trap_pop ())
++ gdk_window_add_filter (NULL, devicepresence_filter, manager);
++}
++#endif
++
+ static gboolean
+ xkb_enabled (GsdA11yKeyboardManager *manager)
+ {
+@@ -996,6 +1068,10 @@ start_a11y_keyboard_idle_cb (GsdA11yKeyboardManager *manager)
+ (GConfClientNotifyFunc) keyboard_callback,
+ &manager->priv->gconf_notify);
+
++#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
++ set_devicepresence_handler (manager);
++#endif
++
+ /* Save current xkb state so we can restore it on exit
+ */
+ manager->priv->original_xkb_desc = get_xkb_desc_rec (manager);
+@@ -1072,6 +1148,10 @@ gsd_a11y_keyboard_manager_stop (GsdA11yKeyboardManager *manager)
+
+ g_debug ("Stopping a11y_keyboard manager");
+
++#ifdef HAVE_X11_EXTENSIONS_XINPUT_H
++ gdk_window_remove_filter (NULL, devicepresence_filter, manager);
++#endif
++
+ if (p->status_icon)
+ gtk_status_icon_set_visible (p->status_icon, FALSE);
+
+--
+1.7.3.1
+
diff --git a/gnome-settings-daemon.spec b/gnome-settings-daemon.spec
index 0b3e03f..c92ebbb 100644
--- a/gnome-settings-daemon.spec
+++ b/gnome-settings-daemon.spec
@@ -1,6 +1,6 @@
Name: gnome-settings-daemon
Version: 2.30.1
-Release: 8%{?dist}
+Release: 9%{?dist}
Summary: The daemon sharing settings from GNOME to GTK+/KDE applications
Group: System Environment/Daemons
@@ -39,6 +39,10 @@ BuildRequires: libcanberra-devel
# https://bugzilla.redhat.com/show_bug.cgi?id=624380
Patch0: 0001-Check-whether-XGetWindowProperty-returns-no-items-an.patch
+# https://bugzilla.gnome.org/show_bug.cgi?id=621899
+# https://bugzilla.redhat.com/show_bug.cgi?id=647022
+Patch1: 0001-Apply-keyboard-a11y-settings-for-new-keyboards.patch
+
# change font rendering
Patch3: slight-hinting.patch
@@ -63,6 +67,7 @@ developing applications that use %{name}.
%prep
%setup -q
%patch0 -p1 -b .copy-crasher
+%patch1 -p1 -b .new-kbd
%patch3 -p1 -b .slight-hinting
%patch4 -p1 -b .keyboard-icon
@@ -133,6 +138,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || :
%{_libdir}/pkgconfig/gnome-settings-daemon.pc
%changelog
+* Wed Oct 27 2010 Bastien Nocera <bnocera at redhat.com> 2.30.1-9
+- Apply a11y settings to newly plugged keyboards as well (#647022)
+
* Thu Sep 23 2010 Bastien Nocera <bnocera at redhat.com> 2.30.1-8
- Don't crash if we don't recognise the copy/paste buffer content (#624380)
More information about the scm-commits
mailing list