diff options
author | Sergey V. Udaltsov <svu@gnome.org> | 2010-10-13 23:39:31 +0100 |
---|---|---|
committer | Sergey V. Udaltsov <svu@gnome.org> | 2010-10-13 23:39:31 +0100 |
commit | 383f5f0fbfb52c8f97ecb5a81639c118c9aa54a7 (patch) | |
tree | a2107deac3523b01dd644ff8f96c8e1f930338ce /libgnomekbd/gkbd-keyboard-config.c | |
parent | dd12792ee893440aa0bc31f3dc8eb2e8996715f5 (diff) | |
download | libgnomekbd-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.c | 27 |
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; } |