summaryrefslogtreecommitdiff
path: root/libgnomekbd/gkbd-keyboard-config.c
diff options
context:
space:
mode:
authorSergey V. Udaltsov <svu@gnome.org>2010-10-13 23:39:31 +0100
committerSergey V. Udaltsov <svu@gnome.org>2010-10-13 23:39:31 +0100
commit383f5f0fbfb52c8f97ecb5a81639c118c9aa54a7 (patch)
treea2107deac3523b01dd644ff8f96c8e1f930338ce /libgnomekbd/gkbd-keyboard-config.c
parentdd12792ee893440aa0bc31f3dc8eb2e8996715f5 (diff)
downloadlibgnomekbd-383f5f0fbfb52c8f97ecb5a81639c118c9aa54a7.tar.gz
Support for xmodmap
Overcomplicated code from g-s-d is gone, simple version is supported by libgnomekbd now
Diffstat (limited to 'libgnomekbd/gkbd-keyboard-config.c')
-rw-r--r--libgnomekbd/gkbd-keyboard-config.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/libgnomekbd/gkbd-keyboard-config.c b/libgnomekbd/gkbd-keyboard-config.c
index 6ab4885..3074ce0 100644
--- a/libgnomekbd/gkbd-keyboard-config.c
+++ b/libgnomekbd/gkbd-keyboard-config.c
@@ -36,6 +36,8 @@
#define GROUP_SWITCHERS_GROUP "grp"
#define DEFAULT_GROUP_SWITCH "grp:shift_caps_toggle"
+#define XMODMAP_KNOWN_FILE ".xmodmap"
+#define XMODMAP_CMD "xmodmap"
const gchar GKBD_KEYBOARD_CONFIG_KEY_MODEL[] = "model";
const gchar GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS[] = "layouts";
@@ -563,6 +565,31 @@ gkbd_keyboard_config_activate (GkbdKeyboardConfig * kbd_config)
rv = xkl_config_rec_activate (data, kbd_config->engine);
g_object_unref (G_OBJECT (data));
+ /* Small bit of extensibility by using xmodmap */
+ if (rv) {
+ gchar *xmodmap_file = g_build_filename (g_get_home_dir (),
+ XMODMAP_KNOWN_FILE,
+ NULL);
+ if (g_file_test (xmodmap_file, G_FILE_TEST_EXISTS)) {
+ GError *error = NULL;
+ xkl_debug (150, "Loading custom xmodmap file %s\n",
+ xmodmap_file);
+ gchar *command =
+ g_strconcat (XMODMAP_CMD, " ", xmodmap_file,
+ NULL);
+ /* Fire and forget - do not care about errors */
+ if (!g_spawn_command_line_async (command, &error)) {
+ xkl_debug (0,
+ "Error loading custom xmodmap file: [%s]\n",
+ error->message);
+ g_error_free (error);
+ }
+ g_free (command);
+ }
+
+ g_free (xmodmap_file);
+ }
+
return rv;
}