|
|
8d5c8ef |
commit fc972b964905b52d2cf12e6a770e9ab7bc4a22a6
|
|
|
8d5c8ef |
Author: Bastien Nocera <hadess@hadess.net>
|
|
|
8d5c8ef |
Date: Tue Mar 9 14:40:07 2010 +0000
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
Apply all keyboard settings to new keyboards
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
When libxklavier sends in a new device event, apply all the
|
|
|
8d5c8ef |
settings to the new keyboard.
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
https://bugzilla.gnome.org/show_bug.cgi?id=610245
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
|
|
|
8d5c8ef |
index c1454e4..2855d41 100644
|
|
|
8d5c8ef |
--- a/plugins/keyboard/gsd-keyboard-manager.c
|
|
|
8d5c8ef |
+++ b/plugins/keyboard/gsd-keyboard-manager.c
|
|
|
8d5c8ef |
@@ -370,6 +370,16 @@ apply_settings (GConfClient *client,
|
|
|
8d5c8ef |
gdk_error_trap_pop ();
|
|
|
8d5c8ef |
}
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
+void
|
|
|
8d5c8ef |
+gsd_keyboard_manager_apply_settings (GsdKeyboardManager *manager)
|
|
|
8d5c8ef |
+{
|
|
|
8d5c8ef |
+ GConfClient *client;
|
|
|
8d5c8ef |
+
|
|
|
8d5c8ef |
+ client = gconf_client_get_default ();
|
|
|
8d5c8ef |
+ apply_settings (client, 0, NULL, manager);
|
|
|
8d5c8ef |
+ g_object_unref (client);
|
|
|
8d5c8ef |
+}
|
|
|
8d5c8ef |
+
|
|
|
8d5c8ef |
static gboolean
|
|
|
8d5c8ef |
start_keyboard_idle_cb (GsdKeyboardManager *manager)
|
|
|
8d5c8ef |
{
|
|
|
8d5c8ef |
@@ -386,14 +396,14 @@ start_keyboard_idle_cb (GsdKeyboardManager *manager)
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
/* Essential - xkb initialization should happen before */
|
|
|
8d5c8ef |
gsd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) gsd_load_modmap_files, NULL);
|
|
|
8d5c8ef |
- gsd_keyboard_xkb_init (client);
|
|
|
8d5c8ef |
+ gsd_keyboard_xkb_init (client, manager);
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
#ifdef HAVE_X11_EXTENSIONS_XKB_H
|
|
|
8d5c8ef |
numlock_xkb_init (manager);
|
|
|
8d5c8ef |
#endif /* HAVE_X11_EXTENSIONS_XKB_H */
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
/* apply current settings before we install the callback */
|
|
|
8d5c8ef |
- apply_settings (client, 0, NULL, manager);
|
|
|
8d5c8ef |
+ gsd_keyboard_manager_apply_settings (manager);
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
manager->priv->notify = gconf_client_notify_add (client, GSD_KEYBOARD_KEY,
|
|
|
8d5c8ef |
(GConfClientNotifyFunc) apply_settings, manager,
|
|
|
8d5c8ef |
diff --git a/plugins/keyboard/gsd-keyboard-manager.h b/plugins/keyboard/gsd-keyboard-manager.h
|
|
|
8d5c8ef |
index 42e2600..434e652 100644
|
|
|
8d5c8ef |
--- a/plugins/keyboard/gsd-keyboard-manager.h
|
|
|
8d5c8ef |
+++ b/plugins/keyboard/gsd-keyboard-manager.h
|
|
|
8d5c8ef |
@@ -51,6 +51,7 @@ GsdKeyboardManager * gsd_keyboard_manager_new (void);
|
|
|
8d5c8ef |
gboolean gsd_keyboard_manager_start (GsdKeyboardManager *manager,
|
|
|
8d5c8ef |
GError **error);
|
|
|
8d5c8ef |
void gsd_keyboard_manager_stop (GsdKeyboardManager *manager);
|
|
|
8d5c8ef |
+void gsd_keyboard_manager_apply_settings (GsdKeyboardManager *manager);
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
G_END_DECLS
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
diff --git a/plugins/keyboard/gsd-keyboard-xkb.c b/plugins/keyboard/gsd-keyboard-xkb.c
|
|
|
8d5c8ef |
index cb969e3..0933d7e 100644
|
|
|
8d5c8ef |
--- a/plugins/keyboard/gsd-keyboard-xkb.c
|
|
|
8d5c8ef |
+++ b/plugins/keyboard/gsd-keyboard-xkb.c
|
|
|
8d5c8ef |
@@ -1,6 +1,6 @@
|
|
|
8d5c8ef |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
|
8d5c8ef |
*
|
|
|
8d5c8ef |
- * Copyright © 2001 Udaltsoft
|
|
|
8d5c8ef |
+ * Copyright (C) 2001 Udaltsoft
|
|
|
8d5c8ef |
*
|
|
|
8d5c8ef |
* Written by Sergey V. Oudaltsov <svu@users.sourceforge.net>
|
|
|
8d5c8ef |
*
|
|
|
8d5c8ef |
@@ -39,6 +39,8 @@
|
|
|
8d5c8ef |
#include "delayed-dialog.h"
|
|
|
8d5c8ef |
#include "gnome-settings-profile.h"
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
+static GsdKeyboardManager *manager = NULL;
|
|
|
8d5c8ef |
+
|
|
|
8d5c8ef |
static XklEngine *xkl_engine;
|
|
|
8d5c8ef |
static XklConfigRegistry *xkl_registry = NULL;
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
@@ -131,6 +133,7 @@ apply_desktop_settings (void)
|
|
|
8d5c8ef |
if (!inited_ok)
|
|
|
8d5c8ef |
return;
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
+ gsd_keyboard_manager_apply_settings (manager);
|
|
|
8d5c8ef |
gkbd_desktop_config_load_from_gconf (¤t_config);
|
|
|
8d5c8ef |
/* again, probably it would be nice to compare things
|
|
|
8d5c8ef |
before activating them */
|
|
|
8d5c8ef |
@@ -463,7 +466,8 @@ gsd_keyboard_new_device (XklEngine * engine)
|
|
|
8d5c8ef |
}
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
void
|
|
|
8d5c8ef |
-gsd_keyboard_xkb_init (GConfClient * client)
|
|
|
8d5c8ef |
+gsd_keyboard_xkb_init (GConfClient * client,
|
|
|
8d5c8ef |
+ GsdKeyboardManager * kbd_manager)
|
|
|
8d5c8ef |
{
|
|
|
8d5c8ef |
gnome_settings_profile_start (NULL);
|
|
|
8d5c8ef |
#ifdef GSDKX
|
|
|
8d5c8ef |
@@ -471,6 +475,7 @@ gsd_keyboard_xkb_init (GConfClient * client)
|
|
|
8d5c8ef |
logfile = fopen ("/tmp/gsdkx.log", "a");
|
|
|
8d5c8ef |
xkl_set_log_appender (gsd_keyboard_log_appender);
|
|
|
8d5c8ef |
#endif
|
|
|
8d5c8ef |
+ manager = kbd_manager;
|
|
|
8d5c8ef |
gnome_settings_profile_start ("xkl_engine_get_instance");
|
|
|
8d5c8ef |
xkl_engine = xkl_engine_get_instance (GDK_DISPLAY ());
|
|
|
8d5c8ef |
gnome_settings_profile_end ("xkl_engine_get_instance");
|
|
|
8d5c8ef |
@@ -535,6 +540,7 @@ gsd_keyboard_xkb_shutdown (void)
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
pa_callback = NULL;
|
|
|
8d5c8ef |
pa_callback_user_data = NULL;
|
|
|
8d5c8ef |
+ manager = NULL;
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
if (!inited_ok)
|
|
|
8d5c8ef |
return;
|
|
|
8d5c8ef |
diff --git a/plugins/keyboard/gsd-keyboard-xkb.h b/plugins/keyboard/gsd-keyboard-xkb.h
|
|
|
8d5c8ef |
index cad70ff..21d3705 100644
|
|
|
8d5c8ef |
--- a/plugins/keyboard/gsd-keyboard-xkb.h
|
|
|
8d5c8ef |
+++ b/plugins/keyboard/gsd-keyboard-xkb.h
|
|
|
8d5c8ef |
@@ -1,7 +1,7 @@
|
|
|
8d5c8ef |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
|
8d5c8ef |
* gnome-settings-keyboard-xkb.h
|
|
|
8d5c8ef |
*
|
|
|
8d5c8ef |
- * Copyright © 2001 Udaltsoft
|
|
|
8d5c8ef |
+ * Copyright (C) 2001 Udaltsoft
|
|
|
8d5c8ef |
*
|
|
|
8d5c8ef |
* Written by Sergey V. Oudaltsov <svu@users.sourceforge.net>
|
|
|
8d5c8ef |
*
|
|
|
8d5c8ef |
@@ -28,8 +28,9 @@
|
|
|
8d5c8ef |
#include <gconf/gconf-client.h>
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
#include <libxklavier/xklavier.h>
|
|
|
8d5c8ef |
+#include "gsd-keyboard-manager.h"
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
-void gsd_keyboard_xkb_init (GConfClient *client);
|
|
|
8d5c8ef |
+void gsd_keyboard_xkb_init (GConfClient *client, GsdKeyboardManager *manager);
|
|
|
8d5c8ef |
void gsd_keyboard_xkb_shutdown (void);
|
|
|
8d5c8ef |
|
|
|
8d5c8ef |
typedef void (*PostActivationCallback) (void *userData);
|