Index: gtk/gtktextview.c
===================================================================
--- gtk/gtktextview.c	(revision 20049)
+++ gtk/gtktextview.c	(working copy)
@@ -1083,7 +1083,7 @@ gtk_text_view_class_init (GtkTextViewCla
                     GTK_MOVEMENT_HORIZONTAL_PAGES, 1);
 
   /* Select all */
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK,
 				"select_all", 1,
   				G_TYPE_BOOLEAN, TRUE);
 
@@ -1096,7 +1096,7 @@ gtk_text_view_class_init (GtkTextViewCla
 				 "select_all", 1,
 				 G_TYPE_BOOLEAN, FALSE);
 
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_SHIFT_MASK | GTK_ACCEL_CONTROL_MASK,
 				 "select_all", 1,
 				 G_TYPE_BOOLEAN, FALSE);
 
@@ -1135,11 +1135,11 @@ gtk_text_view_class_init (GtkTextViewCla
 
   /* Cut/copy/paste */
 
-  gtk_binding_entry_add_signal (binding_set, GDK_x, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_x, GTK_ACCEL_CONTROL_MASK,
 				"cut_clipboard", 0);
-  gtk_binding_entry_add_signal (binding_set, GDK_c, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_c, GTK_ACCEL_CONTROL_MASK,
 				"copy_clipboard", 0);
-  gtk_binding_entry_add_signal (binding_set, GDK_v, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_v, GTK_ACCEL_CONTROL_MASK,
 				"paste_clipboard", 0);
 
   gtk_binding_entry_add_signal (binding_set, GDK_Delete, GDK_SHIFT_MASK,
Index: gtk/gtkfilechooserdefault.c
===================================================================
--- gtk/gtkfilechooserdefault.c	(revision 20049)
+++ gtk/gtkfilechooserdefault.c	(working copy)
@@ -706,7 +706,7 @@ _gtk_file_chooser_default_class_init (Gt
   binding_set = gtk_binding_set_by_class (class);
 
   gtk_binding_entry_add_signal (binding_set,
-				GDK_l, GDK_CONTROL_MASK,
+				GDK_l, GTK_ACCEL_CONTROL_MASK,
 				"location-toggle-popup",
 				0);
 
@@ -727,7 +727,7 @@ _gtk_file_chooser_default_class_init (Gt
 #endif
 
   gtk_binding_entry_add_signal (binding_set,
-				GDK_v, GDK_CONTROL_MASK,
+				GDK_v, GTK_ACCEL_CONTROL_MASK,
 				"location-popup-on-paste",
 				0);
   gtk_binding_entry_add_signal (binding_set,
Index: gtk/gtktreeview.c
===================================================================
--- gtk/gtktreeview.c	(revision 20049)
+++ gtk/gtktreeview.c	(working copy)
@@ -1167,10 +1167,10 @@ gtk_tree_view_class_init (GtkTreeViewCla
   gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "toggle_cursor_row", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_KP_Space, GDK_CONTROL_MASK, "toggle_cursor_row", 0);
 
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK, "select_all", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK, "select_all", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_slash, GDK_CONTROL_MASK, "select_all", 0);
 
-  gtk_binding_entry_add_signal (binding_set, GDK_A, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "unselect_all", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_A, GTK_ACCEL_CONTROL_MASK | GDK_SHIFT_MASK, "unselect_all", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_backslash, GDK_CONTROL_MASK, "unselect_all", 0);
 
   gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_SHIFT_MASK, "select_cursor_row", 1,
@@ -1299,9 +1299,9 @@ gtk_tree_view_class_init (GtkTreeViewCla
   gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, 0, "select_cursor_parent", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, GDK_CONTROL_MASK, "select_cursor_parent", 0);
 
-  gtk_binding_entry_add_signal (binding_set, GDK_f, GDK_CONTROL_MASK, "start_interactive_search", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_f, GTK_ACCEL_CONTROL_MASK, "start_interactive_search", 0);
 
-  gtk_binding_entry_add_signal (binding_set, GDK_F, GDK_CONTROL_MASK, "start_interactive_search", 0);
+  gtk_binding_entry_add_signal (binding_set, GDK_F, GTK_ACCEL_CONTROL_MASK, "start_interactive_search", 0);
 
   g_type_class_add_private (o_class, sizeof (GtkTreeViewPrivate));
 }
@@ -14332,7 +14332,7 @@ gtk_tree_view_search_key_press_event (Gt
       retval = TRUE;
     }
 
-  if (((event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) == (GDK_CONTROL_MASK | GDK_SHIFT_MASK))
+  if (((event->state & (GTK_ACCEL_CONTROL_MASK | GDK_SHIFT_MASK)) == (GTK_ACCEL_CONTROL_MASK | GDK_SHIFT_MASK))
       && (event->keyval == GDK_g || event->keyval == GDK_G))
     {
       if (!gtk_tree_view_search_move (widget, tree_view, TRUE))
@@ -14350,7 +14350,7 @@ gtk_tree_view_search_key_press_event (Gt
       retval = TRUE;
     }
 
-  if (((event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) == GDK_CONTROL_MASK)
+  if (((event->state & (GTK_ACCEL_CONTROL_MASK | GDK_SHIFT_MASK)) == GTK_ACCEL_CONTROL_MASK)
       && (event->keyval == GDK_g || event->keyval == GDK_G))
     {
       if (!gtk_tree_view_search_move (widget, tree_view, FALSE))
Index: gtk/gtkstock.c
===================================================================
--- gtk/gtkstock.c	(revision 20049)
+++ gtk/gtkstock.c	(working copy)
@@ -27,6 +27,7 @@
 #include <config.h>
 #include <string.h>
 
+#include "gtkprivate.h"
 #include "gtkstock.h"
 #include "gtkiconfactory.h"
 #include "gtkintl.h"
@@ -300,18 +301,18 @@ static const GtkStockItem builtin_items 
   { GTK_STOCK_CANCEL, N_("_Cancel"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_CDROM, N_("_CD-Rom"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_CLEAR, N_("_Clear"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_CLOSE, N_("_Close"), GDK_CONTROL_MASK, 'w', GETTEXT_PACKAGE },
+  { GTK_STOCK_CLOSE, N_("_Close"), GTK_ACCEL_CONTROL_MASK, 'w', GETTEXT_PACKAGE },
   { GTK_STOCK_CONNECT, N_("C_onnect"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_CONVERT, N_("_Convert"), 0, 0, GETTEXT_PACKAGE },
-   { GTK_STOCK_COPY, N_("_Copy"), GDK_CONTROL_MASK, 'c', GETTEXT_PACKAGE },
-  { GTK_STOCK_CUT, N_("Cu_t"), GDK_CONTROL_MASK, 'x', GETTEXT_PACKAGE },
+   { GTK_STOCK_COPY, N_("_Copy"), GTK_ACCEL_CONTROL_MASK, 'c', GETTEXT_PACKAGE },
+  { GTK_STOCK_CUT, N_("Cu_t"), GTK_ACCEL_CONTROL_MASK, 'x', GETTEXT_PACKAGE },
   { GTK_STOCK_DELETE, N_("_Delete"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_DISCARD, N_("_Discard"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_DISCONNECT, N_("_Disconnect"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_EXECUTE, N_("_Execute"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_EDIT, N_("_Edit"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_FIND, N_("_Find"), GDK_CONTROL_MASK, 'f', GETTEXT_PACKAGE },
-  { GTK_STOCK_FIND_AND_REPLACE, N_("Find and _Replace"), GDK_CONTROL_MASK, 'r', GETTEXT_PACKAGE },
+  { GTK_STOCK_FIND, N_("_Find"), GTK_ACCEL_CONTROL_MASK, 'f', GETTEXT_PACKAGE },
+  { GTK_STOCK_FIND_AND_REPLACE, N_("Find and _Replace"), GTK_ACCEL_CONTROL_MASK, 'r', GETTEXT_PACKAGE },
   { GTK_STOCK_FLOPPY, N_("_Floppy"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_FULLSCREEN, N_("_Fullscreen"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_LEAVE_FULLSCREEN, N_("_Leave Fullscreen"), 0, 0, GETTEXT_PACKAGE },
@@ -332,7 +333,13 @@ static const GtkStockItem builtin_items 
   /* translators, strip the prefix up to and including the first | */
   { GTK_STOCK_GO_UP, N_("Navigation|_Up"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_HARDDISK, N_("_Harddisk"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_HELP, N_("_Help"), GDK_CONTROL_MASK, 'h', GETTEXT_PACKAGE },
+  { GTK_STOCK_HELP, N_("_Help"),
+#ifndef GDK_WINDOWING_QUARTZ
+    GDK_CONTROL_MASK, 'h',
+#else
+    GDK_META_MASK, '?',
+#endif
+    GETTEXT_PACKAGE },
   { GTK_STOCK_HOME, N_("_Home"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_INDENT, N_("Increase Indent"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_UNINDENT, N_("Decrease Indent"), 0, 0, GETTEXT_PACKAGE },
@@ -366,26 +373,26 @@ static const GtkStockItem builtin_items 
   /* translators, strip the prefix up to and including the first | */
   { GTK_STOCK_MEDIA_STOP, N_("Media|_Stop"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_NETWORK, N_("_Network"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_NEW, N_("_New"), GDK_CONTROL_MASK, 'n', GETTEXT_PACKAGE },
+  { GTK_STOCK_NEW, N_("_New"), GTK_ACCEL_CONTROL_MASK, 'n', GETTEXT_PACKAGE },
   { GTK_STOCK_NO, N_("_No"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_OK, N_("_OK"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_OPEN, N_("_Open"), GDK_CONTROL_MASK, 'o', GETTEXT_PACKAGE },
+  { GTK_STOCK_OPEN, N_("_Open"), GTK_ACCEL_CONTROL_MASK, 'o', GETTEXT_PACKAGE },
   { GTK_STOCK_ORIENTATION_LANDSCAPE, N_("Landscape"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_ORIENTATION_PORTRAIT, N_("Portrait"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_ORIENTATION_REVERSE_LANDSCAPE, N_("Reverse landscape"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_ORIENTATION_REVERSE_PORTRAIT, N_("Reverse portrait"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_PAGE_SETUP, N_("Page Set_up"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_PASTE, N_("_Paste"), GDK_CONTROL_MASK, 'v', GETTEXT_PACKAGE },
+  { GTK_STOCK_PASTE, N_("_Paste"), GTK_ACCEL_CONTROL_MASK, 'v', GETTEXT_PACKAGE },
   { GTK_STOCK_PREFERENCES, N_("_Preferences"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_PRINT, N_("_Print"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_PRINT_PREVIEW, N_("Print Pre_view"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_PROPERTIES, N_("_Properties"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_QUIT, N_("_Quit"), GDK_CONTROL_MASK, 'q', GETTEXT_PACKAGE },
+  { GTK_STOCK_QUIT, N_("_Quit"), GTK_ACCEL_CONTROL_MASK, 'q', GETTEXT_PACKAGE },
   { GTK_STOCK_REDO, N_("_Redo"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_REFRESH, N_("_Refresh"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_REMOVE, N_("_Remove"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_REVERT_TO_SAVED, N_("_Revert"), 0, 0, GETTEXT_PACKAGE },
-  { GTK_STOCK_SAVE, N_("_Save"), GDK_CONTROL_MASK, 's', GETTEXT_PACKAGE },
+  { GTK_STOCK_SAVE, N_("_Save"), GTK_ACCEL_CONTROL_MASK, 's', GETTEXT_PACKAGE },
   { GTK_STOCK_SAVE_AS, N_("Save _As"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_SELECT_ALL, N_("Select _All"), 0, 0, GETTEXT_PACKAGE },
   { GTK_STOCK_SELECT_COLOR, N_("_Color"), 0, 0, GETTEXT_PACKAGE },
Index: gtk/gtkiconview.c
===================================================================
--- gtk/gtkiconview.c	(revision 20049)
+++ gtk/gtkiconview.c	(working copy)
@@ -865,9 +865,9 @@ gtk_icon_view_class_init (GtkIconViewCla
 		  G_TYPE_INT);
 
   /* Key bindings */
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK, 
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK, 
 				"select_all", 0);
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK | GDK_SHIFT_MASK, 
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK | GDK_SHIFT_MASK, 
 				"unselect_all", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, 
 				"toggle_cursor_item", 0);
Index: gtk/gtkimcontextsimple.c
===================================================================
--- gtk/gtkimcontextsimple.c	(revision 20049)
+++ gtk/gtkimcontextsimple.c	(working copy)
@@ -22,6 +22,7 @@
 #include <string.h>
 
 #include <gdk/gdkkeysyms.h>
+#include "gtkprivate.h"
 #include "gtkaccelgroup.h"
 #include "gtkimcontextsimple.h"
 #include "gtksettings.h"
@@ -491,7 +492,7 @@ check_algorithmically (GtkIMContextSimpl
  * with Ctrl-Shift-U, then release the modifiers before typing any
  * digits, and enter the digits without modifiers.
  */
-#define HEX_MOD_MASK (GDK_CONTROL_MASK | GDK_SHIFT_MASK)
+#define HEX_MOD_MASK (GTK_ACCEL_CONTROL_MASK | GDK_SHIFT_MASK)
 
 static gboolean
 check_hex (GtkIMContextSimple *context_simple,
Index: gtk/gtklabel.c
===================================================================
--- gtk/gtklabel.c	(revision 20049)
+++ gtk/gtklabel.c	(working copy)
@@ -569,13 +569,13 @@ gtk_label_class_init (GtkLabelClass *cla
 		    GTK_MOVEMENT_WORDS, -1);
 
   /* select all */
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK,
 				"move_cursor", 3,
 				G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS,
 				G_TYPE_INT, -1,
 				G_TYPE_BOOLEAN, FALSE);
 
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK,
 				"move_cursor", 3,
 				G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS,
 				G_TYPE_INT, 1,
@@ -594,7 +594,7 @@ gtk_label_class_init (GtkLabelClass *cla
 				G_TYPE_BOOLEAN, TRUE);
 
   /* unselect all */
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_SHIFT_MASK | GTK_ACCEL_CONTROL_MASK,
 				"move_cursor", 3,
 				G_TYPE_ENUM, GTK_MOVEMENT_PARAGRAPH_ENDS,
 				G_TYPE_INT, 0,
@@ -637,7 +637,7 @@ gtk_label_class_init (GtkLabelClass *cla
 		    GTK_MOVEMENT_BUFFER_ENDS, 1);
 
   /* copy */
-  gtk_binding_entry_add_signal (binding_set, GDK_c, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_c, GTK_ACCEL_CONTROL_MASK,
 				"copy_clipboard", 0);
 
   gtk_settings_install_property (g_param_spec_boolean ("gtk-label-select-on-focus",
Index: gtk/gtkentry.c
===================================================================
--- gtk/gtkentry.c	(revision 20049)
+++ gtk/gtkentry.c	(working copy)
@@ -782,12 +782,12 @@ gtk_entry_class_init (GtkEntryClass *cla
 
   /* Select all
    */
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK,
                                 "move_cursor", 3,
                                 GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS,
                                 G_TYPE_INT, -1,
 				G_TYPE_BOOLEAN, FALSE);
-  gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_a, GTK_ACCEL_CONTROL_MASK,
                                 "move_cursor", 3,
                                 GTK_TYPE_MOVEMENT_STEP, GTK_MOVEMENT_BUFFER_ENDS,
                                 G_TYPE_INT, 1,
@@ -860,11 +860,11 @@ gtk_entry_class_init (GtkEntryClass *cla
 
   /* Cut/copy/paste */
 
-  gtk_binding_entry_add_signal (binding_set, GDK_x, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_x, GTK_ACCEL_CONTROL_MASK,
 				"cut_clipboard", 0);
-  gtk_binding_entry_add_signal (binding_set, GDK_c, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_c, GTK_ACCEL_CONTROL_MASK,
 				"copy_clipboard", 0);
-  gtk_binding_entry_add_signal (binding_set, GDK_v, GDK_CONTROL_MASK,
+  gtk_binding_entry_add_signal (binding_set, GDK_v, GTK_ACCEL_CONTROL_MASK,
 				"paste_clipboard", 0);
 
   gtk_binding_entry_add_signal (binding_set, GDK_Delete, GDK_SHIFT_MASK,
Index: gtk/gtkprivate.h
===================================================================
--- gtk/gtkprivate.h	(revision 20049)
+++ gtk/gtkprivate.h	(working copy)
@@ -104,6 +104,15 @@ gboolean _gtk_fnmatch (const char *patte
 #define GTK_PARAM_WRITABLE G_PARAM_WRITABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
 #define GTK_PARAM_READWRITE G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
 
+/* Many keyboard shortcuts for Mac are the same as for X
+ * except they use Command key instead of Control (e.g. Cut, 
+ * Copy, Paste). This symbol is for those simple cases. */
+#ifndef GDK_WINDOWING_QUARTZ
+#define GTK_ACCEL_CONTROL_MASK GDK_CONTROL_MASK
+#else
+#define GTK_ACCEL_CONTROL_MASK GDK_META_MASK
+#endif
+
 G_END_DECLS
 
 #endif /* __GTK_PRIVATE_H__ */
