diff -Nur xfce-mcs-plugins-4.4.0/plugins/keyboard_plugin/keys_management.c xfce-mcs-plugins-4.4.0.new/plugins/keyboard_plugin/keys_management.c --- xfce-mcs-plugins-4.4.0/plugins/keyboard_plugin/keys_management.c 2007-01-20 16:45:31.000000000 +0100 +++ xfce-mcs-plugins-4.4.0.new/plugins/keyboard_plugin/keys_management.c 2007-02-24 19:02:16.000000000 +0100 @@ -44,6 +44,29 @@ unsigned int SuperMask = 0; unsigned int HyperMask = 0; +static gboolean +get_keycode (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; +} + MyKey * parseKeyString (char *str) { @@ -67,7 +90,7 @@ tmp = g_ascii_strdown ((gchar *) str, strlen (str)); - my_key->keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (gdisplay), XStringToKeysym (++k)); + get_keycode (GDK_DISPLAY_XDISPLAY (gdisplay), ++k, &my_key->keycode); if (strstr (tmp, "shift")) { my_key->modifier = my_key->modifier | ShiftMask; @@ -116,7 +139,7 @@ } else { - my_key->keycode = XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (gdisplay), XStringToKeysym (str)); + get_keycode (GDK_DISPLAY_XDISPLAY (gdisplay), str, &my_key->keycode); my_key->modifier = 0; } --- xfce-mcs-plugins-4.4.0.orig/plugins/keyboard_plugin/shortcuts_plugin.c +++ xfce-mcs-plugins-4.4.0/plugins/keyboard_plugin/shortcuts_plugin.c @@ -1003,6 +1003,12 @@ 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); + } + /* check if shorcut already exists */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview_shortcuts)); gtk_tree_selection_get_selected (selection, &model, &iter);