Index: metacity/ChangeLog
===================================================================
RCS file: /export/cvs/head/metacity/ChangeLog,v
retrieving revision 1.1047
diff -p -u -5 -r1.1047 ChangeLog
--- metacity/ChangeLog	8 Aug 2005 21:49:50 -0000	1.1047
+++ metacity/ChangeLog	9 Aug 2005 08:52:35 -0000
@@ -1,5 +1,15 @@
+2005-06-17  Vinay M R  <vinay.mandyakoppal@wipro.com>
+
+	* src/prefs.[ch]: (init_bindings), (change_notify)
+	(get_gconfvalue_type) (rebuild_list): Changed to care of List.
+	* src/keybindings.c : (rebuild_binding_table) (handle_panel_keybinding):
+	Changed to care of List while rebuilding table.
+	* src/metacity.schemas.in: Added schema sections for alternative keys.
+	Changed to provide additional shortcuts to Main Menu, Run App and
+	Show Desktop. Fixes Bug #164831.
+
 2005-08-08  Elijah Newren  <newren@gmail.com>
 
 	* configure.in: post-release version bump to 2.11.3
 
 2005-08-08  Elijah Newren  <newren@gmail.com>
Index: metacity/src/prefs.h
===================================================================
RCS file: /export/cvs/head/metacity/src/prefs.h,v
retrieving revision 1.37
diff -p -u -5 -r1.37 prefs.h
--- metacity/src/prefs.h	11 Jul 2005 13:25:08 -0000	1.37
+++ metacity/src/prefs.h	9 Aug 2005 08:53:36 -0000
@@ -23,10 +23,13 @@
 #define META_PREFS_H
 
 /* This header is a "common" one between the UI and core side */
 #include "common.h"
 #include <pango/pango-font.h>
+#ifdef HAVE_GCONF
+#include <gconf/gconf-client.h>
+#endif
 
 typedef enum
 {
   META_PREF_MOUSE_BUTTON_MODS,
   META_PREF_FOCUS_MODE,
@@ -120,12 +123,15 @@ int         meta_prefs_get_cursor_size  
 #define META_KEYBINDING_CYCLE_WINDOWS            "cycle_windows"
 #define META_KEYBINDING_CYCLE_WINDOWS_BACKWARD   "cycle_windows_backward"
 #define META_KEYBINDING_CYCLE_PANELS             "cycle_panels"
 #define META_KEYBINDING_CYCLE_PANELS_BACKWARD    "cycle_panels_backward"
 #define META_KEYBINDING_SHOW_DESKTOP             "show_desktop"
+#define META_KEYBINDING_SHOW_DESKTOP_ALT         "show_desktop_alt"
 #define META_KEYBINDING_PANEL_MAIN_MENU          "panel_main_menu"
+#define META_KEYBINDING_PANEL_MAIN_MENU_ALT      "panel_main_menu_alt"
 #define META_KEYBINDING_PANEL_RUN_DIALOG         "panel_run_dialog"
+#define META_KEYBINDING_PANEL_RUN_DIALOG_ALT     "panel_run_dialog_alt"
 #define META_KEYBINDING_COMMAND_1                "run_command_1"
 #define META_KEYBINDING_COMMAND_2                "run_command_2"
 #define META_KEYBINDING_COMMAND_3                "run_command_3"
 #define META_KEYBINDING_COMMAND_4                "run_command_4"
 #define META_KEYBINDING_COMMAND_5                "run_command_5"
@@ -221,12 +227,15 @@ typedef enum _MetaKeyBindingAction
   META_KEYBINDING_ACTION_CYCLE_WINDOWS,
   META_KEYBINDING_ACTION_CYCLE_WINDOWS_BACKWARD,
   META_KEYBINDING_ACTION_CYCLE_PANELS,
   META_KEYBINDING_ACTION_CYCLE_PANELS_BACKWARD,
   META_KEYBINDING_ACTION_SHOW_DESKTOP,
+  META_KEYBINDING_ACTION_SHOW_DESKTOP_ALT,
   META_KEYBINDING_ACTION_PANEL_MAIN_MENU,
+  META_KEYBINDING_ACTION_PANEL_MAIN_MENU_ALT,
   META_KEYBINDING_ACTION_PANEL_RUN_DIALOG,
+  META_KEYBINDING_ACTION_PANEL_RUN_DIALOG_ALT,
   META_KEYBINDING_ACTION_COMMAND_1,
   META_KEYBINDING_ACTION_COMMAND_2,
   META_KEYBINDING_ACTION_COMMAND_3,
   META_KEYBINDING_ACTION_COMMAND_4,
   META_KEYBINDING_ACTION_COMMAND_5,
@@ -244,10 +253,12 @@ typedef struct
   const char   *name;
   unsigned int  keysym;
   MetaVirtualModifier modifiers;
   /* for keybindings that can have shift or not like Alt+Tab */
   gboolean      add_shift;
+  GSList *keysym_alt;
+  GSList *modifiers_alt;
 } MetaKeyPref;
 
 void meta_prefs_get_screen_bindings (const MetaKeyPref **bindings,
                                      int                *n_bindings);
 void meta_prefs_get_window_bindings (const MetaKeyPref **bindings,
@@ -257,10 +268,14 @@ MetaKeyBindingAction meta_prefs_get_keyb
 
 void meta_prefs_get_window_binding (const char          *name,
                                     unsigned int        *keysym,
                                     MetaVirtualModifier *modifiers);
 
+#ifdef HAVE_GCONF
+GConfValueType meta_prefs_get_gconfvalue_type (char *key);
+#endif
+
 typedef enum
 {
   META_VISUAL_BELL_INVALID = 0,
   META_VISUAL_BELL_FULLSCREEN_FLASH,
   META_VISUAL_BELL_FRAME_FLASH
Index: metacity/src/prefs.c
===================================================================
RCS file: /export/cvs/head/metacity/src/prefs.c,v
retrieving revision 1.51
diff -p -u -5 -r1.51 prefs.c
--- metacity/src/prefs.c	11 Jul 2005 13:25:08 -0000	1.51
+++ metacity/src/prefs.c	9 Aug 2005 08:53:43 -0000
@@ -21,13 +21,10 @@
 
 #include <config.h>
 #include "prefs.h"
 #include "ui.h"
 #include "util.h"
-#ifdef HAVE_GCONF
-#include <gconf/gconf-client.h>
-#endif
 #include <string.h>
 #include <stdlib.h>
 
 #define MAX_REASONABLE_WORKSPACES 36
 
@@ -67,10 +64,13 @@
 #define KEY_AUDIBLE_BELL "/apps/metacity/general/audible_bell"
 #define KEY_VISUAL_BELL_TYPE "/apps/metacity/general/visual_bell_type"
 #define KEY_CURSOR_THEME "/desktop/gnome/peripherals/mouse/cursor_theme"
 #define KEY_CURSOR_SIZE "/desktop/gnome/peripherals/mouse/cursor_size"
 
+#define IS_STRING 1
+#define IS_LIST 0
+
 #ifdef HAVE_GCONF
 static GConfClient *default_client = NULL;
 static GList *changes = NULL;
 static guint changed_idle;
 #endif
@@ -109,10 +109,117 @@ static MetaButtonLayout button_layout = 
     META_BUTTON_FUNCTION_CLOSE,
     META_BUTTON_FUNCTION_LAST
   }
 };
 
+/* Indexes must correspond to MetaKeybindingAction */
+static MetaKeyPref screen_bindings[] = {
+  { META_KEYBINDING_WORKSPACE_1, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_2, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_3, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_4, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_5, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_6, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_7, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_8, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_9, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_10, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_11, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_12, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_LEFT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_RIGHT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_UP, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_WORKSPACE_DOWN, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_SWITCH_WINDOWS, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_SWITCH_WINDOWS_BACKWARD, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_SWITCH_PANELS, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_SWITCH_PANELS_BACKWARD, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_CYCLE_WINDOWS, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_CYCLE_WINDOWS_BACKWARD, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_CYCLE_PANELS, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_CYCLE_PANELS_BACKWARD, 0, 0, TRUE, NULL, NULL },
+  { META_KEYBINDING_SHOW_DESKTOP, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_SHOW_DESKTOP_ALT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_PANEL_MAIN_MENU, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_PANEL_MAIN_MENU_ALT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_PANEL_RUN_DIALOG, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_PANEL_RUN_DIALOG_ALT, 0, 0, FALSE, NULL,NULL },
+  { META_KEYBINDING_COMMAND_1, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_2, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_3, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_4, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_5, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_6, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_7, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_8, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_9, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_10, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_11, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_12, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_13, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_14, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_15, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_16, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_17, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_18, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_19, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_20, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_21, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_22, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_23, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_24, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_25, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_26, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_27, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_28, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_29, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_30, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_31, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_32, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_SCREENSHOT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_COMMAND_WIN_SCREENSHOT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_RUN_COMMAND_TERMINAL, 0, 0, FALSE, NULL, NULL },
+  { NULL, 0, 0, FALSE, NULL, NULL}
+};
+
+static MetaKeyPref window_bindings[] = {
+  { META_KEYBINDING_WINDOW_MENU, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_TOGGLE_FULLSCREEN, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_TOGGLE_MAXIMIZE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_TOGGLE_ABOVE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MAXIMIZE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_UNMAXIMIZE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_TOGGLE_SHADE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MINIMIZE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_CLOSE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_BEGIN_MOVE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_BEGIN_RESIZE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_TOGGLE_STICKY, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_1, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_2, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_3, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_4, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_5, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_6, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_7, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_8, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_9, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_10, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_11, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_12, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_LEFT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_RIGHT, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_UP, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MOVE_WORKSPACE_DOWN, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_RAISE_OR_LOWER, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_RAISE, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_LOWER, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MAXIMIZE_VERTICALLY, 0, 0, FALSE, NULL, NULL },
+  { META_KEYBINDING_MAXIMIZE_HORIZONTALLY, 0, 0, FALSE, NULL, NULL },
+  { NULL, 0, 0, FALSE, NULL, NULL }
+};
+
 /* The screenshot commands are at the end */
 static char *commands[MAX_COMMANDS] = { NULL, };
 
 static char *terminal_command = NULL;
 
@@ -136,21 +243,26 @@ static gboolean update_button_layout    
 static gboolean update_window_binding     (const char *name,
                                            const char *value);
 static gboolean update_screen_binding     (const char *name,
                                            const char *value);
 static gboolean update_binding            (MetaKeyPref *binding,
-                                           const char  *value);
+                                           const char  *value,
+                                           int          type);
+static void     update_list               (MetaKeyPref *binding,
+                                           const char  *key);
 static gboolean update_command            (const char  *name,
                                            const char  *value);
 static gboolean update_terminal_command   (const char *value);
 static gboolean update_workspace_name     (const char  *name,
                                            const char  *value);
 static gboolean update_reduced_resources  (gboolean     value);
 static gboolean update_gnome_accessibility  (gboolean     value);
 static gboolean update_cursor_theme       (const char *value);
 static gboolean update_cursor_size        (int size);
 
+static const gchar* relative_key          (const gchar* key);
+
 static void change_notify (GConfClient    *client,
                            guint           cnxn_id,
                            GConfEntry     *entry,
                            gpointer        user_data);
 
@@ -671,19 +783,28 @@ change_notify (GConfClient    *client,
     {
       const char *str;
 
       if (value && value->type != GCONF_VALUE_STRING)
         {
-          meta_warning (_("GConf key \"%s\" is set to an invalid type\n"),
-                        key);
-          goto out;
+          if (value->type == GCONF_VALUE_LIST)
+            {
+              update_list (screen_bindings, key);
+              queue_changed (META_PREF_SCREEN_KEYBINDINGS);
+            }
+          else
+            {
+              meta_warning (_("GConf key \"%s\" is set to an invalid type\n"),
+                            key);
+              goto out;
+            }
+        }
+      else
+        {
+          str = value ? gconf_value_get_string (value) : NULL;
+          if (update_screen_binding (key, str))
+            queue_changed (META_PREF_SCREEN_KEYBINDINGS);
         }
-
-      str = value ? gconf_value_get_string (value) : NULL;
-
-      if (update_screen_binding (key, str))
-        queue_changed (META_PREF_SCREEN_KEYBINDINGS);
     }
   else if (strcmp (key, KEY_ACTION_DOUBLE_CLICK_TITLEBAR) == 0)
     {
       const char *str;
 
@@ -1592,114 +1713,10 @@ meta_prefs_set_num_workspaces (int n_wor
       g_error_free (err);
     }
 #endif /* HAVE_GCONF */
 }
 
-/* Indexes must correspond to MetaKeybindingAction */
-static MetaKeyPref screen_bindings[] = {
-  { META_KEYBINDING_WORKSPACE_1, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_2, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_3, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_4, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_5, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_6, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_7, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_8, 0, 0, FALSE }, 
-  { META_KEYBINDING_WORKSPACE_9, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_10, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_11, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_12, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_LEFT, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_RIGHT, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_UP, 0, 0, FALSE },
-  { META_KEYBINDING_WORKSPACE_DOWN, 0, 0, FALSE },
-  { META_KEYBINDING_SWITCH_WINDOWS, 0, 0, TRUE },
-  { META_KEYBINDING_SWITCH_WINDOWS_BACKWARD, 0, 0, TRUE },
-  { META_KEYBINDING_SWITCH_PANELS, 0, 0, TRUE },
-  { META_KEYBINDING_SWITCH_PANELS_BACKWARD, 0, 0, TRUE },
-  { META_KEYBINDING_CYCLE_WINDOWS, 0, 0, TRUE },
-  { META_KEYBINDING_CYCLE_WINDOWS_BACKWARD, 0, 0, TRUE },
-  { META_KEYBINDING_CYCLE_PANELS, 0, 0, TRUE },
-  { META_KEYBINDING_CYCLE_PANELS_BACKWARD, 0, 0, TRUE },
-  { META_KEYBINDING_SHOW_DESKTOP, 0, 0, FALSE },
-  { META_KEYBINDING_PANEL_MAIN_MENU, 0, 0, FALSE },
-  { META_KEYBINDING_PANEL_RUN_DIALOG, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_1, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_2, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_3, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_4, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_5, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_6, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_7, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_8, 0, 0, FALSE }, 
-  { META_KEYBINDING_COMMAND_9, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_10, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_11, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_12, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_13, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_14, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_15, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_16, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_17, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_18, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_19, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_20, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_21, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_22, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_23, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_24, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_25, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_26, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_27, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_28, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_29, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_30, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_31, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_32, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_SCREENSHOT, 0, 0, FALSE },
-  { META_KEYBINDING_COMMAND_WIN_SCREENSHOT, 0, 0, FALSE },
-  { META_KEYBINDING_RUN_COMMAND_TERMINAL, 0, 0, FALSE },
-  { NULL, 0, 0, FALSE}
-};
-
-static MetaKeyPref window_bindings[] = {
-  { META_KEYBINDING_WINDOW_MENU, 0, 0, FALSE },
-  { META_KEYBINDING_TOGGLE_FULLSCREEN, 0, 0, FALSE },
-  { META_KEYBINDING_TOGGLE_MAXIMIZE, 0, 0, FALSE },
-  { META_KEYBINDING_TOGGLE_ABOVE, 0, 0, FALSE },
-  { META_KEYBINDING_MAXIMIZE, 0, 0, FALSE },
-  { META_KEYBINDING_UNMAXIMIZE, 0, 0, FALSE },
-  { META_KEYBINDING_TOGGLE_SHADE, 0, 0, FALSE },
-  { META_KEYBINDING_MINIMIZE, 0, 0, FALSE },
-  { META_KEYBINDING_CLOSE, 0, 0, FALSE },
-  { META_KEYBINDING_BEGIN_MOVE, 0, 0, FALSE },
-  { META_KEYBINDING_BEGIN_RESIZE, 0, 0, FALSE },
-  { META_KEYBINDING_TOGGLE_STICKY, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_1, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_2, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_3, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_4, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_5, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_6, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_7, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_8, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_9, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_10, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_11, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_12, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_LEFT, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_RIGHT, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_UP, 0, 0, FALSE },
-  { META_KEYBINDING_MOVE_WORKSPACE_DOWN, 0, 0, FALSE },
-  { META_KEYBINDING_RAISE_OR_LOWER, 0, 0, FALSE },
-  { META_KEYBINDING_RAISE, 0, 0, FALSE },
-  { META_KEYBINDING_LOWER, 0, 0, FALSE },
-  { META_KEYBINDING_MAXIMIZE_VERTICALLY, 0, 0, FALSE },
-  { META_KEYBINDING_MAXIMIZE_HORIZONTALLY, 0, 0, FALSE },
-  { NULL, 0, 0, FALSE }
-};
-
 static void
 init_bindings (void)
 {
 #ifdef HAVE_GCONF
   int i;
@@ -1716,36 +1733,57 @@ init_bindings (void)
 
       err = NULL;
       str_val = gconf_client_get_string (default_client, key, &err);
       cleanup_error (&err);
 
-      update_binding (&window_bindings[i], str_val);
+      update_binding (&window_bindings[i], str_val, IS_STRING);
 
       g_free (str_val);      
       g_free (key);
 
       ++i;
     }
 
   i = 0;
   while (screen_bindings[i].name)
     {
-      char *str_val;
       char *key;
+      GConfValueType type;
 
       key = g_strconcat (KEY_SCREEN_BINDINGS_PREFIX, "/",
                          screen_bindings[i].name, NULL);
+      type = meta_prefs_get_gconfvalue_type (key);
 
-      err = NULL;
-      str_val = gconf_client_get_string (default_client, key, &err);
-      cleanup_error (&err);
+      if (type == GCONF_VALUE_LIST)
+        {
+          GSList *slist, *tmp;
+
+          err = NULL;
+          slist = gconf_client_get_list (default_client, key, GCONF_VALUE_STRING, &err);
+          cleanup_error (&err);
+          tmp = slist;
+          while (tmp)
+            {
+              update_binding (&screen_bindings[i], tmp->data, IS_LIST);
+              tmp = g_slist_next (tmp);
+            }
+          g_slist_foreach (slist, (GFunc) g_free, NULL);
+          g_slist_free (slist);
+        }
+      else if (type == GCONF_VALUE_STRING)
+        {
+          char *str_val;
 
-      update_binding (&screen_bindings[i], str_val);
+          err = NULL;
+          str_val = gconf_client_get_string (default_client, key, &err);
+          cleanup_error (&err);
 
-      g_free (str_val);      
-      g_free (key);
+          update_binding (&screen_bindings[i], str_val, IS_STRING);
 
+          g_free (str_val);      
+        }
+      g_free (key);
       ++i;
     }
 #endif /* HAVE_GCONF */
 }
 
@@ -1810,11 +1848,12 @@ init_workspace_names (void)
 }
 
 #ifdef HAVE_GCONF
 static gboolean
 update_binding (MetaKeyPref *binding,
-                const char  *value)
+                const char  *value,
+                int          type) 
 {
   unsigned int keysym;
   MetaVirtualModifier mods;
   gboolean changed;
   
@@ -1839,26 +1878,84 @@ update_binding (MetaKeyPref *binding,
   if (keysym != binding->keysym ||
       mods != binding->modifiers)
     {
       changed = TRUE;
       
-      binding->keysym = keysym;
-      binding->modifiers = mods;
-      
+      if (type)
+        {
+          binding->keysym = keysym;
+          binding->modifiers = mods;
+        }
+      else
+        {
+          binding->keysym_alt = g_slist_append (binding->keysym_alt, GUINT_TO_POINTER(keysym));
+          binding->modifiers_alt = g_slist_append (binding->modifiers_alt, GUINT_TO_POINTER(mods));
+        }       
       meta_topic (META_DEBUG_KEYBINDINGS,
                   "New keybinding for \"%s\" is keysym = 0x%x mods = 0x%x\n",
-                  binding->name, binding->keysym, binding->modifiers);
+                  binding->name, keysym, mods);
     }
   else
     {
       meta_topic (META_DEBUG_KEYBINDINGS,
                   "Keybinding for \"%s\" is unchanged\n", binding->name);
     }
   
   return changed;
 }
 
+static void
+update_list (MetaKeyPref *bindings,
+             const char  *name)
+{
+  const char *key;
+  int i;
+ 
+  if (*name == '/')
+    key = relative_key (name);
+  else
+    key = name;
+ 
+  i = 0;
+  while (bindings[i].name &&
+         strcmp (key, bindings[i].name) != 0)
+    ++i;
+ 
+  if (bindings[i].name)
+    {
+      GSList *list, *tmp;
+      GError *err = NULL;
+
+      g_slist_free (bindings[i].keysym_alt);
+      g_slist_free (bindings[i].modifiers_alt);
+
+      bindings[i].keysym_alt = NULL;
+      bindings[i].modifiers_alt = NULL;
+      list = gconf_client_get_list (default_client, name, GCONF_VALUE_STRING, &err);
+      tmp = list;
+      while (tmp)
+        {
+          unsigned int keysym = 0;
+          MetaVirtualModifier mods = 0;
+
+          if (tmp->data)
+            {
+              if (meta_ui_parse_accelerator (tmp->data, &keysym, &mods))
+                {
+                  bindings[i].keysym_alt = g_slist_append (bindings[i].keysym_alt,
+                                                           GUINT_TO_POINTER(keysym));
+                  bindings[i].modifiers_alt = g_slist_append (bindings[i].modifiers_alt,
+                                                              GUINT_TO_POINTER(mods));
+                }
+            }
+          tmp = g_slist_next (tmp);
+        }
+      g_slist_foreach (list, (GFunc) g_free, NULL);
+      g_slist_free (list);
+    }
+}
+
 static const gchar*
 relative_key (const gchar* key)
 {
   const gchar* end;
   
@@ -1889,11 +1986,11 @@ find_and_update_binding (MetaKeyPref *bi
   while (bindings[i].name &&
          strcmp (key, bindings[i].name) != 0)
     ++i;
 
   if (bindings[i].name)
-    return update_binding (&bindings[i], value);
+    return update_binding (&bindings[i], value, IS_STRING);
   else
     return FALSE;
 }
 
 static gboolean
@@ -2314,5 +2411,50 @@ meta_prefs_get_window_binding (const cha
       --i;
     }
 
   g_assert_not_reached ();
 }
+
+#ifdef HAVE_GCONF
+GConfValueType
+meta_prefs_get_gconfvalue_type(char *key)
+{
+  GConfClient *client;
+  GConfEntry *entry;
+  GConfSchema *schema = NULL;
+  GError *error = NULL;
+  GConfValueType type;
+ 
+  client = gconf_client_get_default();
+ 
+  entry = gconf_client_get_entry (client,
+                                  key,
+                                  NULL,
+                                  TRUE,
+                                  &error);
+ 
+  if (error || entry == NULL)
+    {
+      /* We don't actually want to popup a dialog - just skip this one */
+      if (error)
+        g_error_free (error);
+      return (GCONF_VALUE_INVALID);
+    }
+ 
+  if (gconf_entry_get_schema_name (entry))
+    schema = gconf_client_get_schema (client, gconf_entry_get_schema_name (entry), &error);
+ 
+  if (error || schema == NULL)
+    {
+      /* We don't actually want to popup a dialog - just skip this one */
+      if (error)
+        g_error_free (error);
+      return (GCONF_VALUE_INVALID);
+    }
+ 
+  type = gconf_schema_get_type(schema);
+ 
+  g_object_unref (client);
+ 
+  return (type);
+}
+#endif
Index: metacity/src/keybindings.c
===================================================================
RCS file: /export/cvs/head/metacity/src/keybindings.c,v
retrieving revision 1.112
diff -p -u -5 -r1.112 keybindings.c
--- metacity/src/keybindings.c	3 Aug 2005 02:22:00 -0000	1.112
+++ metacity/src/keybindings.c	9 Aug 2005 08:53:51 -0000
@@ -38,10 +38,13 @@
 
 #ifdef HAVE_XKB
 #include <X11/XKBlib.h>
 #endif
 
+#define KEY_SCREEN_BINDINGS_PREFIX "/apps/metacity/global_keybindings"
+#define KEY_WINDOW_BINDINGS_PREFIX "/apps/metacity/window_keybindings"
+
 static gboolean all_bindings_disabled = FALSE;
 
 typedef void (* MetaKeyHandlerFunc) (MetaDisplay    *display,
                                      MetaScreen     *screen,
                                      MetaWindow     *window,
@@ -286,14 +289,20 @@ static const MetaKeyHandler screen_handl
     GINT_TO_POINTER (META_TAB_LIST_DOCKS) },  
   { META_KEYBINDING_CYCLE_PANELS_BACKWARD, handle_cycle_backward,
     GINT_TO_POINTER (META_TAB_LIST_DOCKS) },  
   { META_KEYBINDING_SHOW_DESKTOP, handle_toggle_desktop,
     NULL },
+  { META_KEYBINDING_SHOW_DESKTOP_ALT, handle_toggle_desktop,
+    NULL },
   { META_KEYBINDING_PANEL_MAIN_MENU, handle_panel_keybinding,
     GINT_TO_POINTER (META_KEYBINDING_ACTION_PANEL_MAIN_MENU) },
+  { META_KEYBINDING_PANEL_MAIN_MENU_ALT, handle_panel_keybinding,
+    GINT_TO_POINTER (META_KEYBINDING_ACTION_PANEL_MAIN_MENU_ALT) },
   { META_KEYBINDING_PANEL_RUN_DIALOG, handle_panel_keybinding,
     GINT_TO_POINTER (META_KEYBINDING_ACTION_PANEL_RUN_DIALOG) },
+  { META_KEYBINDING_PANEL_RUN_DIALOG_ALT, handle_panel_keybinding,
+    GINT_TO_POINTER (META_KEYBINDING_ACTION_PANEL_RUN_DIALOG_ALT) },
   { META_KEYBINDING_COMMAND_1, handle_run_command,
     GINT_TO_POINTER (0) },
   { META_KEYBINDING_COMMAND_2, handle_run_command,
     GINT_TO_POINTER (1) },
   { META_KEYBINDING_COMMAND_3, handle_run_command,
@@ -619,20 +628,27 @@ reload_modifiers (MetaDisplay *display)
     }
 }
 
 static int
 count_bindings (const MetaKeyPref *prefs,
-                int                n_prefs)
+                int                n_prefs,
+                char              *prefix)
 {
   int i;
   int count;
 
   count = 0;
   i = 0;
   while (i < n_prefs)
     {
-      if (prefs[i].keysym != None)
+      char *key;
+      key = g_strconcat (prefix, "/", prefs[i].name, NULL);
+
+      if (meta_prefs_get_gconfvalue_type (key) == GCONF_VALUE_LIST)
+        count = count + g_slist_length (prefs[i].keysym_alt);
+
+      else if (prefs[i].keysym != None)
         {
           count += 1;
 
           if (prefs[i].add_shift &&
               (prefs[i].modifiers & META_VIRTUAL_SHIFT_MASK) == 0)
@@ -648,49 +664,94 @@ count_bindings (const MetaKeyPref *prefs
 static void
 rebuild_binding_table (MetaDisplay        *display,
                        MetaKeyBinding    **bindings_p,
                        int                *n_bindings_p,
                        const MetaKeyPref  *prefs,
-                       int                 n_prefs)
+                       int                 n_prefs,
+                       char               *prefix)
 {
   int n_bindings;
   int src, dest;
   
-  n_bindings = count_bindings (prefs, n_prefs);
+  n_bindings = count_bindings (prefs, n_prefs, prefix);
   g_free (*bindings_p);
   *bindings_p = g_new0 (MetaKeyBinding, n_bindings);
 
   src = 0;
   dest = 0;
   while (src < n_prefs)
     {
-      if (prefs[src].keysym != None)
+      char *key;
+      GSList *keysym_alt, *modifiers_alt;
+      GConfValueType type;
+
+      key = g_strconcat (prefix, "/", prefs[src].name, NULL);
+      type = meta_prefs_get_gconfvalue_type (key);
+
+      if (type == GCONF_VALUE_LIST)
         {
-          (*bindings_p)[dest].name = prefs[src].name;
-          (*bindings_p)[dest].keysym = prefs[src].keysym;
-          (*bindings_p)[dest].modifiers = prefs[src].modifiers;
-          (*bindings_p)[dest].mask = 0;
-          (*bindings_p)[dest].keycode = 0;          
-          
-          ++dest;
+          keysym_alt = prefs[src].keysym_alt;
+          modifiers_alt = prefs[src].modifiers_alt;
 
-          if (prefs[src].add_shift &&
-              (prefs[src].modifiers & META_VIRTUAL_SHIFT_MASK) == 0)
+          while (keysym_alt != NULL)
+            {
+              (*bindings_p)[dest].name = prefs[src].name;
+              (*bindings_p)[dest].keysym = (int) keysym_alt->data;
+              (*bindings_p)[dest].modifiers =(int) modifiers_alt->data;
+              (*bindings_p)[dest].mask = 0;
+              (*bindings_p)[dest].keycode = 0;
+              ++dest;
+
+              if (prefs[src].add_shift &&
+                  ((int) modifiers_alt->data & META_VIRTUAL_SHIFT_MASK) == 0)
+                {
+                  meta_topic (META_DEBUG_KEYBINDINGS,
+                              "Binding %s also needs Shift grabbed\n",
+                              prefs[src].name);
+
+                  (*bindings_p)[dest].name = prefs[src].name;
+                  (*bindings_p)[dest].keysym = (int) keysym_alt->data;
+                  (*bindings_p)[dest].modifiers = (int) modifiers_alt->data |
+                    META_VIRTUAL_SHIFT_MASK;
+                  (*bindings_p)[dest].mask = 0;
+                  (*bindings_p)[dest].keycode = 0;
+
+                  ++dest;
+                }
+              keysym_alt = keysym_alt->next;
+              modifiers_alt = modifiers_alt->next;
+            }
+        }
+      else if (type == GCONF_VALUE_STRING)
+        {
+          if (prefs[src].keysym != None)
             {
-              meta_topic (META_DEBUG_KEYBINDINGS,
-                          "Binding %s also needs Shift grabbed\n",
-                          prefs[src].name);
-              
               (*bindings_p)[dest].name = prefs[src].name;
               (*bindings_p)[dest].keysym = prefs[src].keysym;
-              (*bindings_p)[dest].modifiers = prefs[src].modifiers |
-                META_VIRTUAL_SHIFT_MASK;
+              (*bindings_p)[dest].modifiers = prefs[src].modifiers;
               (*bindings_p)[dest].mask = 0;
               (*bindings_p)[dest].keycode = 0;          
               
               ++dest;
-            }
+
+              if (prefs[src].add_shift &&
+                  (prefs[src].modifiers & META_VIRTUAL_SHIFT_MASK) == 0)
+                {
+                  meta_topic (META_DEBUG_KEYBINDINGS,
+                              "Binding %s also needs Shift grabbed\n",
+                              prefs[src].name);
+ 
+                  (*bindings_p)[dest].name = prefs[src].name;
+                  (*bindings_p)[dest].keysym = prefs[src].keysym;
+                  (*bindings_p)[dest].modifiers = prefs[src].modifiers |
+                    META_VIRTUAL_SHIFT_MASK;
+                  (*bindings_p)[dest].mask = 0;
+                  (*bindings_p)[dest].keycode = 0;          
+                  
+                  ++dest;
+                }
+             }
         }
       
       ++src;
     }
 
@@ -714,11 +775,12 @@ rebuild_screen_binding_table (MetaDispla
   
   meta_prefs_get_screen_bindings (&prefs, &n_prefs);
   rebuild_binding_table (display,
                          &display->screen_bindings,
                          &display->n_screen_bindings,
-                         prefs, n_prefs);
+                         prefs, n_prefs,
+                         KEY_SCREEN_BINDINGS_PREFIX);
 }
 
 static void
 rebuild_window_binding_table (MetaDisplay *display)
 {
@@ -730,11 +792,12 @@ rebuild_window_binding_table (MetaDispla
   
   meta_prefs_get_window_bindings (&prefs, &n_prefs);
   rebuild_binding_table (display,
                          &display->window_bindings,
                          &display->n_window_bindings,
-                         prefs, n_prefs);
+                         prefs, n_prefs,
+                         KEY_WINDOW_BINDINGS_PREFIX);
 }
 
 static void
 regrab_screen_bindings (MetaDisplay *display)
 {
@@ -2921,13 +2984,15 @@ handle_panel_keybinding (MetaDisplay    
 
   action_atom = None;
   switch (action)
     {
     case META_KEYBINDING_ACTION_PANEL_MAIN_MENU:
+    case META_KEYBINDING_ACTION_PANEL_MAIN_MENU_ALT:
       action_atom = display->atom_gnome_panel_action_main_menu;
       break;
     case META_KEYBINDING_ACTION_PANEL_RUN_DIALOG:
+    case META_KEYBINDING_ACTION_PANEL_RUN_DIALOG_ALT:
       action_atom = display->atom_gnome_panel_action_run_dialog;
       break;
     default:
       return;
     }
Index: metacity/src/main.c
===================================================================
RCS file: /export/cvs/head/metacity/src/main.c,v
retrieving revision 1.57
diff -p -u -5 -r1.57 main.c
--- metacity/src/main.c	12 Jul 2005 20:54:34 -0000	1.57
+++ metacity/src/main.c	9 Aug 2005 08:54:01 -0000
@@ -28,13 +28,10 @@
 #include "session.h"
 #include "prefs.h"
 
 #include <glib-object.h>
 #include <gmodule.h>
-#ifdef HAVE_GCONF
-#include <gconf/gconf-client.h>
-#endif
 
 
 #include <stdlib.h>
 #include <sys/types.h>
 #include <stdio.h>
Index: metacity/src/metacity.schemas.in
===================================================================
RCS file: /export/cvs/head/metacity/src/metacity.schemas.in,v
retrieving revision 1.43
diff -p -u -5 -r1.43 metacity.schemas.in
--- metacity/src/metacity.schemas.in	1 Aug 2005 14:56:24 -0000	1.43
+++ metacity/src/metacity.schemas.in	9 Aug 2005 08:54:26 -0000
@@ -1253,10 +1253,35 @@ you set
          </long>
       </locale>
     </schema>
 
     <schema>
+      <key>/schemas/apps/metacity/global_keybindings/show_desktop_alt</key>
+      <applyto>/apps/metacity/global_keybindings/show_desktop_alt</applyto>
+      <owner>metacity</owner>
+      <type>list</type>
+      <list_type>string</list_type>
+      <default>[&lt;Mod4&gt;d]</default>
+      <locale name="C">
+         <short>Hide all windows and focus desktop</short>
+         <long>
+          The alternative keybinding list used to hide all normal windows
+          and set the focus to the desktop background.
+
+          The format looks like "&lt;Control&gt;a" or
+          "&lt;Shift&gt;&lt;Alt&gt;F1".
+
+          The parser is fairly liberal and allows lower or upper case,
+          and also abbreviations such as "&lt;Ctl&gt;" and
+          "&lt;Ctrl&gt;". If you set the option to the special string
+          "disabled", then there will be no keybinding for this
+         action.
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/metacity/global_keybindings/switch_to_workspace_1</key>
       <applyto>/apps/metacity/global_keybindings/switch_to_workspace_1</applyto>
       <owner>metacity</owner>
       <type>string</type>
       <default>disabled</default>
@@ -1665,10 +1690,34 @@ you set
          </long>
       </locale>
     </schema>
 
     <schema>
+      <key>/schemas/apps/metacity/global_keybindings/panel_main_menu_alt</key>
+      <applyto>/apps/metacity/global_keybindings/panel_main_menu_alt</applyto>
+      <owner>metacity</owner>
+      <type>list</type>
+      <list_type>string</list_type>
+      <default>[&lt;Control&gt;Escape]</default>
+      <locale name="C">
+         <short>Show the panel menu</short>
+         <long>
+          The alternative keybinding list which shows the panel's main menu.
+
+          The format looks like "&lt;Control&gt;a" or
+          "&lt;Shift&gt;&lt;Alt&gt;F1".
+
+          The parser is fairly liberal and allows lower or upper case,
+          and also abbreviations such as "&lt;Ctl&gt;" and
+          "&lt;Ctrl&gt;". If you set the option to the special string
+          "disabled", then there will be no keybinding for this
+          action.
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/metacity/global_keybindings/panel_run_dialog</key>
       <applyto>/apps/metacity/global_keybindings/panel_run_dialog</applyto>
       <owner>metacity</owner>
       <type>string</type>
       <default>&lt;Alt&gt;F2</default>
@@ -1689,10 +1738,35 @@ you set
          </long>
       </locale>
     </schema>
 
     <schema>
+      <key>/schemas/apps/metacity/global_keybindings/panel_run_dialog_alt</key>
+      <applyto>/apps/metacity/global_keybindings/panel_run_dialog_alt</applyto>
+      <owner>metacity</owner>
+      <type>list</type>
+      <list_type>string</list_type>
+      <default>[&lt;Mod4&gt;r]</default>
+      <locale name="C">
+         <short>Show the panel run application dialog</short>
+         <long>
+          The alternative keybinding list which display's the panel's
+          "Run Application" dialog box.
+
+          The format looks like "&lt;Control&gt;a" or
+          "&lt;Shift&gt;&lt;Alt&gt;F1".
+
+          The parser is fairly liberal and allows lower or upper case,
+          and also abbreviations such as "&lt;Ctl&gt;" and
+          "&lt;Ctrl&gt;". If you set the option to the special string
+          "disabled", then there will be no keybinding for this
+          action.
+        </long>
+     </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/metacity/global_keybindings/run_command_screenshot</key>
       <applyto>/apps/metacity/global_keybindings/run_command_screenshot</applyto>
       <owner>metacity</owner>
       <type>string</type>
       <default>Print</default>
