1
Subject: [PATCH] Apply all keyboard settings to new keyboards
3
When libxklavier sends in a new device event, apply all the
4
settings to the new keyboard.
6
https://bugzilla.gnome.org/show_bug.cgi?id=610245
8
plugins/keyboard/gsd-keyboard-manager.c | 14 ++++++++++++--
9
plugins/keyboard/gsd-keyboard-manager.h | 1 +
10
plugins/keyboard/gsd-keyboard-xkb.c | 10 ++++++++--
11
plugins/keyboard/gsd-keyboard-xkb.h | 5 +++--
12
4 files changed, 24 insertions(+), 6 deletions(-)
14
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
15
index c1454e4..2855d41 100644
16
--- a/plugins/keyboard/gsd-keyboard-manager.c
17
+++ b/plugins/keyboard/gsd-keyboard-manager.c
18
@@ -370,6 +370,16 @@ apply_settings (GConfClient *client,
19
gdk_error_trap_pop ();
23
+gsd_keyboard_manager_apply_settings (GsdKeyboardManager *manager)
25
+ GConfClient *client;
27
+ client = gconf_client_get_default ();
28
+ apply_settings (client, 0, NULL, manager);
29
+ g_object_unref (client);
33
start_keyboard_idle_cb (GsdKeyboardManager *manager)
35
@@ -386,14 +396,14 @@ start_keyboard_idle_cb (GsdKeyboardManager *manager)
37
/* Essential - xkb initialization should happen before */
38
gsd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) gsd_load_modmap_files, NULL);
39
- gsd_keyboard_xkb_init (client);
40
+ gsd_keyboard_xkb_init (client, manager);
42
#ifdef HAVE_X11_EXTENSIONS_XKB_H
43
numlock_xkb_init (manager);
44
#endif /* HAVE_X11_EXTENSIONS_XKB_H */
46
/* apply current settings before we install the callback */
47
- apply_settings (client, 0, NULL, manager);
48
+ gsd_keyboard_manager_apply_settings (manager);
50
manager->priv->notify = gconf_client_notify_add (client, GSD_KEYBOARD_KEY,
51
(GConfClientNotifyFunc) apply_settings, manager,
52
diff --git a/plugins/keyboard/gsd-keyboard-manager.h b/plugins/keyboard/gsd-keyboard-manager.h
53
index 42e2600..434e652 100644
54
--- a/plugins/keyboard/gsd-keyboard-manager.h
55
+++ b/plugins/keyboard/gsd-keyboard-manager.h
56
@@ -51,6 +51,7 @@ GsdKeyboardManager * gsd_keyboard_manager_new (void);
57
gboolean gsd_keyboard_manager_start (GsdKeyboardManager *manager,
59
void gsd_keyboard_manager_stop (GsdKeyboardManager *manager);
60
+void gsd_keyboard_manager_apply_settings (GsdKeyboardManager *manager);
64
diff --git a/plugins/keyboard/gsd-keyboard-xkb.c b/plugins/keyboard/gsd-keyboard-xkb.c
65
index ff31149..748ddd2 100644
66
--- a/plugins/keyboard/gsd-keyboard-xkb.c
67
+++ b/plugins/keyboard/gsd-keyboard-xkb.c
70
#define GTK_RESPONSE_PRINT 2
72
+static GsdKeyboardManager *manager = NULL;
74
static XklEngine *xkl_engine;
75
static XklConfigRegistry *xkl_registry = NULL;
77
@@ -140,6 +142,7 @@ apply_desktop_settings (void)
81
+ gsd_keyboard_manager_apply_settings (manager);
82
gkbd_desktop_config_load_from_gconf (¤t_config);
83
/* again, probably it would be nice to compare things
84
before activating them */
85
@@ -813,7 +816,8 @@ gsd_keyboard_new_device (XklEngine * engine)
89
-gsd_keyboard_xkb_init (GConfClient * client)
90
+gsd_keyboard_xkb_init (GConfClient * client,
91
+ GsdKeyboardManager * kbd_manager)
93
gnome_settings_profile_start (NULL);
95
@@ -821,6 +825,7 @@ gsd_keyboard_xkb_init (GConfClient * client)
96
logfile = fopen ("/tmp/gsdkx.log", "a");
97
xkl_set_log_appender (gsd_keyboard_log_appender);
99
+ manager = kbd_manager;
100
gnome_settings_profile_start ("xkl_engine_get_instance");
101
xkl_engine = xkl_engine_get_instance (GDK_DISPLAY ());
102
gnome_settings_profile_end ("xkl_engine_get_instance");
103
@@ -886,6 +891,7 @@ gsd_keyboard_xkb_shutdown (void)
106
pa_callback_user_data = NULL;
109
g_hash_table_destroy (preview_dialogs);
111
diff --git a/plugins/keyboard/gsd-keyboard-xkb.h b/plugins/keyboard/gsd-keyboard-xkb.h
112
index cad70ff..21d3705 100644
113
--- a/plugins/keyboard/gsd-keyboard-xkb.h
114
+++ b/plugins/keyboard/gsd-keyboard-xkb.h
116
#include <gconf/gconf-client.h>
118
#include <libxklavier/xklavier.h>
119
+#include "gsd-keyboard-manager.h"
121
-void gsd_keyboard_xkb_init (GConfClient *client);
122
+void gsd_keyboard_xkb_init (GConfClient *client, GsdKeyboardManager *manager);
123
void gsd_keyboard_xkb_shutdown (void);
125
typedef void (*PostActivationCallback) (void *userData);