From b44e99a72dbdf87438c24b9a9ab5c77d29524d8e Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Sat, 29 Apr 2006 22:12:59 +0000
Subject: [PATCH] Clean-up the modifier mess in shortcut editor, now should be
 using the same codebase as Terminal.

(Old svn revision: 21369)
---
 mcs-plugin/xfwm4_shortcuteditor.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/mcs-plugin/xfwm4_shortcuteditor.c b/mcs-plugin/xfwm4_shortcuteditor.c
index 6d36d929e..0b893c907 100644
--- a/mcs-plugin/xfwm4_shortcuteditor.c
+++ b/mcs-plugin/xfwm4_shortcuteditor.c
@@ -687,6 +687,7 @@ cb_compose_shortcut (GtkWidget * widget, GdkEventKey * event, gpointer data)
     ThemeInfo *ti;
     GdkModifierType consumed_modifiers = 0;
     guint keyval;
+    guint modifiers;
     gchar *accelerator;
     gint i;
     gchar **shortcuts;
@@ -700,13 +701,29 @@ cb_compose_shortcut (GtkWidget * widget, GdkEventKey * event, gpointer data)
 
     keyval = gdk_keyval_to_lower (event->keyval);
 
-    if (keyval == GDK_ISO_Left_Tab)
-        keyval = GDK_Tab;
+    switch (keyval)
+    {
+        case GDK_ISO_Left_Tab:
+            keyval = GDK_Tab;
+            break;
+        case GDK_ISO_Level3_Latch:
+        case GDK_ISO_Level3_Lock:
+        case GDK_ISO_Level3_Shift:
+        case GDK_Scroll_Lock:
+        case GDK_Super_L:
+        case GDK_Super_R:
+            return TRUE;
+            break;
+        default:
+            break;
+    }
 
     /* Release keyboard */
     gdk_keyboard_ungrab (GDK_CURRENT_TIME);
 
-    accelerator = gtk_accelerator_name (keyval, event->state);
+    modifiers = event->state & (~consumed_modifiers | GDK_MODIFIER_MASK);
+    modifiers = modifiers & gtk_accelerator_get_default_mod_mask ();
+    accelerator = gtk_accelerator_name (keyval, modifiers);
 
     for (i = 0; i < strlen (accelerator); i++)
     {
@@ -719,7 +736,7 @@ cb_compose_shortcut (GtkWidget * widget, GdkEventKey * event, gpointer data)
     current_shortcut = shortcuts;
     while (*current_shortcut)
     {
-        if (strlen (*current_shortcut) > 0 && (strcmp (*current_shortcut, "Mod2") != 0))
+        if (strlen (*current_shortcut))
         {
             strcat (shortcut_string, *current_shortcut);
             strcat (shortcut_string, "+");
-- 
GitLab