Index: gdk/quartz/gdkevents-quartz.c
===================================================================
--- gdk/quartz/gdkevents-quartz.c	(revision 20047)
+++ gdk/quartz/gdkevents-quartz.c	(working copy)
@@ -33,6 +33,12 @@
 #include "gdkkeysyms.h"
 #include "gdkprivate-quartz.h"
 
+/* If true, control-left-click is interpreted as a right mouse button click, and
+ * command-left-click as a control-left-click. This follows the behavior
+ * expected by most Mac users.
+ */
+#define EMULATE_RIGHT_CLICK 1
+
 /* This is the window the mouse is currently over */
 static GdkWindow   *current_mouse_window;
 
@@ -441,7 +447,10 @@ get_mouse_button_from_ns_event (NSEvent 
   switch (button)
     {
     case 0:
-      return 1;
+      if (EMULATE_RIGHT_CLICK && ([event modifierFlags] & NSControlKeyMask))
+        return 3;
+      else
+        return 1;
     case 1:
       return 3;
     case 2:
@@ -470,18 +479,30 @@ get_keyboard_modifiers_from_ns_event (NS
 {
   GdkModifierType modifiers = 0;
   int nsflags;
+  gboolean swap_ctrl_cmd = FALSE;
 
   nsflags = [nsevent modifierFlags];
-  
+
+  if (EMULATE_RIGHT_CLICK)
+    switch ([nsevent type])
+      {
+        case NSLeftMouseDown:
+        case NSLeftMouseUp:
+        case NSLeftMouseDragged:
+          swap_ctrl_cmd = TRUE;
+          break;
+        default:
+          break;
+      }
+
   if (nsflags & NSAlphaShiftKeyMask)
     modifiers |= GDK_LOCK_MASK;
   if (nsflags & NSShiftKeyMask)
     modifiers |= GDK_SHIFT_MASK;
   if (nsflags & NSControlKeyMask)
-    modifiers |= GDK_CONTROL_MASK;
+    modifiers |= swap_ctrl_cmd ? GDK_MOD1_MASK : GDK_CONTROL_MASK;
   if (nsflags & NSCommandKeyMask)
-    modifiers |= GDK_MOD1_MASK;
-
+    modifiers |= swap_ctrl_cmd ? GDK_CONTROL_MASK : GDK_MOD1_MASK;
   return modifiers;
 }
 
