From 8d5c8ef45f0fe6549809524352d9c5d48c21c31e Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mar 10 2010 10:57:42 +0000 Subject: - Fix hotplugged keyboards not picking up the repeat settings --- diff --git a/gnome-settings-daemon.spec b/gnome-settings-daemon.spec index ad13a3e..f7da12f 100644 --- a/gnome-settings-daemon.spec +++ b/gnome-settings-daemon.spec @@ -1,6 +1,6 @@ Name: gnome-settings-daemon Version: 2.28.1 -Release: 12%{?dist} +Release: 13%{?dist} Summary: The daemon sharing settings from GNOME to GTK+/KDE applications Group: System Environment/Daemons @@ -57,6 +57,9 @@ Patch9: osd-spam.patch # https://bugzilla.gnome.org/show_bug.cgi?id=606794 Patch10: left-handed-single-button.patch +# https://bugzilla.gnome.org/show_bug.cgi?id=610245 +Patch11: gsd-2.28-new-keyboard-settings.patch + %description A daemon to share settings from GNOME to other applications. It also handles global keybindings, as well as a number of desktop-wide settings. @@ -85,6 +88,7 @@ developing applications that use %{name}. %patch8 -p1 -b .survive-xmm %patch9 -p1 -b .osd-spam %patch10 -p1 -b .single-button +%patch11 -p1 -b .new-keyboards %build %configure --enable-static=no --enable-profiling --disable-esd @@ -196,6 +200,9 @@ fi %{_libdir}/pkgconfig/gnome-settings-daemon.pc %changelog +* Wed Mar 10 2010 Bastien Nocera 2.28.1-13 +- Fix hotplugged keyboards not picking up the repeat settings + * Mon Jan 18 2010 Peter Hutterer 2.28.1-12 - left-handed-single-button.patch: Don't allow left-handed setting for single-button touchpads. (related #548978) diff --git a/gsd-2.28-new-keyboard-settings.patch b/gsd-2.28-new-keyboard-settings.patch new file mode 100644 index 0000000..9c5714e --- /dev/null +++ b/gsd-2.28-new-keyboard-settings.patch @@ -0,0 +1,140 @@ +commit fc972b964905b52d2cf12e6a770e9ab7bc4a22a6 +Author: Bastien Nocera +Date: Tue Mar 9 14:40:07 2010 +0000 + + Apply all keyboard settings to new keyboards + + When libxklavier sends in a new device event, apply all the + settings to the new keyboard. + + https://bugzilla.gnome.org/show_bug.cgi?id=610245 + +diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c +index c1454e4..2855d41 100644 +--- a/plugins/keyboard/gsd-keyboard-manager.c ++++ b/plugins/keyboard/gsd-keyboard-manager.c +@@ -370,6 +370,16 @@ apply_settings (GConfClient *client, + gdk_error_trap_pop (); + } + ++void ++gsd_keyboard_manager_apply_settings (GsdKeyboardManager *manager) ++{ ++ GConfClient *client; ++ ++ client = gconf_client_get_default (); ++ apply_settings (client, 0, NULL, manager); ++ g_object_unref (client); ++} ++ + static gboolean + start_keyboard_idle_cb (GsdKeyboardManager *manager) + { +@@ -386,14 +396,14 @@ start_keyboard_idle_cb (GsdKeyboardManager *manager) + + /* Essential - xkb initialization should happen before */ + gsd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) gsd_load_modmap_files, NULL); +- gsd_keyboard_xkb_init (client); ++ gsd_keyboard_xkb_init (client, manager); + + #ifdef HAVE_X11_EXTENSIONS_XKB_H + numlock_xkb_init (manager); + #endif /* HAVE_X11_EXTENSIONS_XKB_H */ + + /* apply current settings before we install the callback */ +- apply_settings (client, 0, NULL, manager); ++ gsd_keyboard_manager_apply_settings (manager); + + manager->priv->notify = gconf_client_notify_add (client, GSD_KEYBOARD_KEY, + (GConfClientNotifyFunc) apply_settings, manager, +diff --git a/plugins/keyboard/gsd-keyboard-manager.h b/plugins/keyboard/gsd-keyboard-manager.h +index 42e2600..434e652 100644 +--- a/plugins/keyboard/gsd-keyboard-manager.h ++++ b/plugins/keyboard/gsd-keyboard-manager.h +@@ -51,6 +51,7 @@ GsdKeyboardManager * gsd_keyboard_manager_new (void); + gboolean gsd_keyboard_manager_start (GsdKeyboardManager *manager, + GError **error); + void gsd_keyboard_manager_stop (GsdKeyboardManager *manager); ++void gsd_keyboard_manager_apply_settings (GsdKeyboardManager *manager); + + G_END_DECLS + +diff --git a/plugins/keyboard/gsd-keyboard-xkb.c b/plugins/keyboard/gsd-keyboard-xkb.c +index cb969e3..0933d7e 100644 +--- a/plugins/keyboard/gsd-keyboard-xkb.c ++++ b/plugins/keyboard/gsd-keyboard-xkb.c +@@ -1,6 +1,6 @@ + /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * +- * Copyright � 2001 Udaltsoft ++ * Copyright (C) 2001 Udaltsoft + * + * Written by Sergey V. Oudaltsov + * +@@ -39,6 +39,8 @@ + #include "delayed-dialog.h" + #include "gnome-settings-profile.h" + ++static GsdKeyboardManager *manager = NULL; ++ + static XklEngine *xkl_engine; + static XklConfigRegistry *xkl_registry = NULL; + +@@ -131,6 +133,7 @@ apply_desktop_settings (void) + if (!inited_ok) + return; + ++ gsd_keyboard_manager_apply_settings (manager); + gkbd_desktop_config_load_from_gconf (¤t_config); + /* again, probably it would be nice to compare things + before activating them */ +@@ -463,7 +466,8 @@ gsd_keyboard_new_device (XklEngine * engine) + } + + void +-gsd_keyboard_xkb_init (GConfClient * client) ++gsd_keyboard_xkb_init (GConfClient * client, ++ GsdKeyboardManager * kbd_manager) + { + gnome_settings_profile_start (NULL); + #ifdef GSDKX +@@ -471,6 +475,7 @@ gsd_keyboard_xkb_init (GConfClient * client) + logfile = fopen ("/tmp/gsdkx.log", "a"); + xkl_set_log_appender (gsd_keyboard_log_appender); + #endif ++ manager = kbd_manager; + gnome_settings_profile_start ("xkl_engine_get_instance"); + xkl_engine = xkl_engine_get_instance (GDK_DISPLAY ()); + gnome_settings_profile_end ("xkl_engine_get_instance"); +@@ -535,6 +540,7 @@ gsd_keyboard_xkb_shutdown (void) + + pa_callback = NULL; + pa_callback_user_data = NULL; ++ manager = NULL; + + if (!inited_ok) + return; +diff --git a/plugins/keyboard/gsd-keyboard-xkb.h b/plugins/keyboard/gsd-keyboard-xkb.h +index cad70ff..21d3705 100644 +--- a/plugins/keyboard/gsd-keyboard-xkb.h ++++ b/plugins/keyboard/gsd-keyboard-xkb.h +@@ -1,7 +1,7 @@ + /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * gnome-settings-keyboard-xkb.h + * +- * Copyright � 2001 Udaltsoft ++ * Copyright (C) 2001 Udaltsoft + * + * Written by Sergey V. Oudaltsov + * +@@ -28,8 +28,9 @@ + #include + + #include ++#include "gsd-keyboard-manager.h" + +-void gsd_keyboard_xkb_init (GConfClient *client); ++void gsd_keyboard_xkb_init (GConfClient *client, GsdKeyboardManager *manager); + void gsd_keyboard_xkb_shutdown (void); + + typedef void (*PostActivationCallback) (void *userData);