From 270ab11b7022afe2906516e083a44790cdb9bccd Mon Sep 17 00:00:00 2001 From: Olivier Fourdan <fourdan.olivier@wanadoo.fr> Date: Tue, 13 Feb 2007 20:25:24 +0000 Subject: [PATCH] Add support for keycode when no keysym is available (bug #2503) (Old svn revision: 24971) --- mcs-plugin/xfwm4_shortcuteditor.c | 6 ++++++ src/keyboard.c | 27 +++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/mcs-plugin/xfwm4_shortcuteditor.c b/mcs-plugin/xfwm4_shortcuteditor.c index 45f8102b9..ed9cf6894 100644 --- a/mcs-plugin/xfwm4_shortcuteditor.c +++ b/mcs-plugin/xfwm4_shortcuteditor.c @@ -757,6 +757,12 @@ cb_compose_shortcut (GtkWidget * widget, GdkEventKey * event, gpointer data) g_free (accelerator); g_strfreev (shortcuts); + /* Use keycode if unknown keysym */ + if (!strlen (shortcut_string)) + { + g_snprintf (shortcut_string, sizeof (shortcut_string), "0x%X", (guint) event->hardware_keycode); + } + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (itf->treeview3)); /* Apply change */ diff --git a/src/keyboard.c b/src/keyboard.c index 7eb9cf237..aa97f7d83 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -38,6 +38,29 @@ unsigned int ScrollLockMask; unsigned int SuperMask; unsigned int HyperMask; +static gboolean +getKeycode (Display *dpy, const char *str, KeyCode *keycode) +{ + unsigned int value; + KeySym keysym; + + keysym = XStringToKeysym (str); + if (keysym == NoSymbol) + { + if (sscanf (str, "0x%X", (unsigned int *) &value) != 1) + { + *keycode = 0; + return FALSE; + } + *keycode = (KeyCode) value; + } + else + { + *keycode = XKeysymToKeycode (dpy, keysym); + } + return TRUE; +} + int getModifierMap (char *str) { @@ -120,12 +143,12 @@ parseKeyString (Display * dpy, MyKey * key, char *str) if (k) { /* There is a modifier */ - key->keycode = XKeysymToKeycode (dpy, XStringToKeysym (++k)); + getKeycode (dpy, ++k, &key->keycode); key->modifier = getModifierMap (str); } else { - key->keycode = XKeysymToKeycode (dpy, XStringToKeysym (str)); + getKeycode (dpy, str, &key->keycode); key->modifier = 0; } } -- GitLab