Index: app/dialogs/preferences-dialog.c
===================================================================
RCS file: /cvs/gnome/gimp/app/dialogs/preferences-dialog.c,v
retrieving revision 1.374
diff -u -p -r1.374 preferences-dialog.c
--- app/dialogs/preferences-dialog.c	12 Apr 2006 12:49:18 -0000	1.374
+++ app/dialogs/preferences-dialog.c	10 May 2006 17:37:30 -0000
@@ -59,6 +59,13 @@
 
 #include "gimp-intl.h"
 
+enum {
+  KBS_IGNORE,
+  KBS_SAVE,
+  KBS_RESET,
+  KBS_CLEAR
+};
+
 
 /*  preferences local functions  */
 
@@ -87,10 +94,6 @@ static void   prefs_input_devices_dialog
 static void   prefs_input_dialog_able_callback    (GtkWidget  *widget,
                                                    GdkDevice  *device,
                                                    gpointer    data);
-static void   prefs_menus_save_callback           (GtkWidget  *widget,
-                                                   Gimp       *gimp);
-static void   prefs_menus_clear_callback          (GtkWidget  *widget,
-                                                   Gimp       *gimp);
 static void   prefs_session_save_callback         (GtkWidget  *widget,
                                                    Gimp       *gimp);
 static void   prefs_session_clear_callback        (GtkWidget  *widget,
@@ -103,6 +106,8 @@ static void   prefs_tool_options_save_ca
                                                    Gimp       *gimp);
 static void   prefs_tool_options_clear_callback   (GtkWidget  *widget,
                                                    Gimp       *gimp);
+static void   prefs_menus_keyboard_shortcuts      (GtkWidget  *widget,
+                                                   Gimp       *gimp);
 
 
 /*  private variables  */
@@ -476,37 +481,49 @@ prefs_keyboard_shortcuts_dialog (GtkWidg
 }
 
 static void
-prefs_menus_save_callback (GtkWidget *widget,
-                           Gimp      *gimp)
-{
-  GtkWidget *clear_button;
-
-  menus_save (gimp, TRUE);
-
-  clear_button = g_object_get_data (G_OBJECT (widget), "clear-button");
-
-  if (clear_button)
-    gtk_widget_set_sensitive (clear_button, TRUE);
-}
-
-static void
-prefs_menus_clear_callback (GtkWidget *widget,
-                            Gimp      *gimp)
+prefs_menus_keyboard_shortcuts(GtkWidget *combo,
+                               Gimp      *gimp)
 {
-  GError *error = NULL;
+  gint     value;
+  gint     fd;
+  GError  *error = NULL;
+  gchar   *filename;
+
+  gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (combo), &value);
+
+  switch(value)
+  {
+    case KBS_IGNORE:
+      /* Do nothing - first menu entry is a no-op. */
+      break;
+
+    case KBS_SAVE:
+      menus_save (gimp, TRUE);
+      g_message (_("Your keyboard shortcuts have been saved."));
+      break;
 
-  if (! menus_clear (gimp, &error))
-    {
-      g_message (error->message);
-      g_clear_error (&error);
-    }
-  else
-    {
-      gtk_widget_set_sensitive (widget, FALSE);
+    case KBS_RESET:
+      if (! menus_clear (gimp, &error))
+        {
+          g_message (error->message);
+          g_clear_error (&error);
+        }
+      else
+        {
+          g_message (_("Your keyboard shortcuts will be reset to default "
+                       "values the next time you start GIMP."));
+        }
+      break;
 
-      g_message (_("Your keyboard shortcuts will be reset to default values "
+    case KBS_CLEAR:
+      /* Iterate over the list of actions, then save */
+      menus_remove (gimp);
+      menus_save (gimp, TRUE);
+      g_message (_("Your keyboard shortcuts will be cleared "
                    "the next time you start GIMP."));
-    }
+      break;
+  }
+  gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), KBS_IGNORE);
 }
 
 static void
@@ -1182,6 +1199,7 @@ prefs_dialog_new (Gimp       *gimp,
   GtkWidget         *calibrate_button;
   GSList            *group;
   GtkWidget         *editor;
+  GtkWidget         *combo;
   gint               i;
 
   GObject           *object;
@@ -1434,22 +1452,27 @@ prefs_dialog_new (Gimp       *gimp,
                           _("_Save keyboard shortcuts on exit"),
                           GTK_BOX (vbox2));
 
-  button = prefs_button_add (GTK_STOCK_SAVE,
-                             _("Save Keyboard Shortcuts _Now"),
-                             GTK_BOX (vbox2));
-  g_signal_connect (button, "clicked",
-                    G_CALLBACK (prefs_menus_save_callback),
-                    gimp);
+  hbox = gtk_hbox_new (FALSE, 6);
+  gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
 
-  button2 = prefs_button_add (GIMP_STOCK_RESET,
-                              _("_Reset Saved Keyboard Shortcuts to "
-                                "Default Values"),
-                              GTK_BOX (vbox2));
-  g_signal_connect (button2, "clicked",
-                    G_CALLBACK (prefs_menus_clear_callback),
-                    gimp);
+  label = gtk_label_new (_("Keyboard Shortcut Status:"));
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
 
-  g_object_set_data (G_OBJECT (button), "clear-button", button2);
+  combo = gimp_int_combo_box_new (
+              _("Choose an Action"),              KBS_IGNORE,
+              _("Save Now"),                      KBS_SAVE,
+              _("Reset to Default Values"),       KBS_RESET,
+              _("Remove All Keyboard Shortcuts"), KBS_CLEAR,
+              NULL);
+  gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), KBS_IGNORE);
+  gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);
+  gtk_widget_show (combo);
+
+  g_signal_connect (combo, "changed",
+                    G_CALLBACK (prefs_menus_keyboard_shortcuts),
+                    gimp);
 
 
   /***********/
Index: app/menus/menus.c
===================================================================
RCS file: /cvs/gnome/gimp/app/menus/menus.c,v
retrieving revision 1.385
diff -u -p -r1.385 menus.c
--- app/menus/menus.c	27 Apr 2006 09:23:14 -0000	1.385
+++ app/menus/menus.c	10 May 2006 17:37:31 -0000
@@ -55,6 +55,11 @@
 /*  local function prototypes  */
 
 static void   menus_can_change_accels (GimpGuiConfig *config);
+static void   menus_remove_actions (gpointer        data,
+                                    const gchar    *accel_path,
+                                    guint           accel_key,
+                                    GdkModifierType accel_mods,
+                                    gboolean        changed);
 
 
 /*  global variables  */
@@ -424,6 +429,12 @@ menus_clear (Gimp    *gimp,
   return success;
 }
 
+void
+menus_remove (Gimp *gimp)
+{
+  gtk_accel_map_foreach(0,menus_remove_actions);
+}
+
 
 /*  private functions  */
 
@@ -433,4 +444,14 @@ menus_can_change_accels (GimpGuiConfig *
   g_object_set (gtk_settings_get_for_screen (gdk_screen_get_default ()),
                 "gtk-can-change-accels", config->can_change_accels,
                 NULL);
+}
+
+static void
+menus_remove_actions (gpointer        data,
+                      const gchar    *accel_path,
+                      guint           accel_key,
+                      GdkModifierType accel_mods,
+                      gboolean        changed)
+{
+  gtk_accel_map_change_entry (accel_path, 0, 0, TRUE);
 }
Index: app/menus/menus.h
===================================================================
RCS file: /cvs/gnome/gimp/app/menus/menus.h,v
retrieving revision 1.34
diff -u -p -r1.34 menus.h
--- app/menus/menus.h	20 Sep 2004 14:41:54 -0000	1.34
+++ app/menus/menus.h	10 May 2006 17:37:31 -0000
@@ -33,6 +33,7 @@ void       menus_save    (Gimp          
 
 gboolean   menus_clear   (Gimp               *gimp,
                           GError            **error);
+void       menus_remove  (Gimp               *gimp);
 
 
 #endif /* __MENUS_H__ */
