xserver: Branch 'xorg-server-1.4-apple' - 3 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Fri Aug 15 14:47:29 PDT 2008


 configure.ac                 |    2 
 hw/xquartz/X11Application.m  |   41 +++++++------
 hw/xquartz/bundle/Info.plist |    6 -
 hw/xquartz/darwin.c          |   13 ++--
 hw/xquartz/darwinEvents.c    |  134 +++++++++++++++++--------------------------
 hw/xquartz/quartzKeyboard.c  |   99 ++++++++++++++++---------------
 hw/xquartz/quartzKeyboard.h  |    2 
 7 files changed, 143 insertions(+), 154 deletions(-)

New commits:
commit 5fcfeee41bff87fa949b28bd8ee36cf2e7c4808e
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Aug 15 13:29:35 2008 -0700

    1.4.2-apple9

diff --git a/configure.ac b/configure.ac
index bcc39f6..1c13cac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.4.2-apple8, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.4.2-apple9, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
commit 8fb6a1cf44c35a20dfb0c05c9824f94898f88da7
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Aug 15 13:28:58 2008 -0700

    XQuartz: More input fixes
    stuck-modifier fixes (capslock)
    3button-emulation now doesn't send the modifier key with the click
    Added other options to fake_button2 and fake_button3 defaults options:
    	({l,r}{control,alt,command,shift})

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 0783ef2..9096f3d 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -836,6 +836,8 @@ convert_flags (unsigned int nsflags) {
     return xflags;
 }
 
+extern int darwin_modifier_flags; // darwinEvents.c
+
 static void send_nsevent (NSEventType type, NSEvent *e) {
 	NSRect screen;
 	NSPoint location;
@@ -862,26 +864,34 @@ static void send_nsevent (NSEventType type, NSEvent *e) {
 	tilt_x = 0;
 	tilt_y = 0;
 
+    /* We don't receive modifier key events while out of focus, and 3button
+     * emulation mucks this up, so we need to check our modifier flag state
+     * on every event... ugg
+     */
+    if(darwin_modifier_flags != [e modifierFlags])
+        DarwinUpdateModKeys([e modifierFlags]);
+    
 	switch (type) {
-		case NSMouseMoved: ev_button=0; ev_type=MotionNotify; goto check_subtype;
-		case NSLeftMouseDown:    ev_button=1; ev_type=ButtonPress; goto check_subtype;
-		case NSOtherMouseDown:   ev_button=2; ev_type=ButtonPress; goto check_subtype;
-		case NSRightMouseDown:   ev_button=3; ev_type=ButtonPress; goto check_subtype;
-		case NSLeftMouseUp:      ev_button=1; ev_type=ButtonRelease; goto check_subtype;
-		case NSOtherMouseUp:     ev_button=2; ev_type=ButtonRelease; goto check_subtype;
-		case NSRightMouseUp:     ev_button=3; ev_type=ButtonRelease; goto check_subtype;
-		case NSLeftMouseDragged:  ev_button=1; ev_type=MotionNotify; goto check_subtype;
-		case NSOtherMouseDragged: ev_button=2; ev_type=MotionNotify; goto check_subtype;
-		case NSRightMouseDragged: ev_button=3; ev_type=MotionNotify; goto check_subtype;
+		case NSMouseMoved:        ev_button=0; ev_type=MotionNotify;  goto check_subtype;
+		case NSLeftMouseDown:     ev_button=1; ev_type=ButtonPress;   goto check_subtype;
+		case NSOtherMouseDown:    ev_button=2; ev_type=ButtonPress;   goto check_subtype;
+		case NSRightMouseDown:    ev_button=3; ev_type=ButtonPress;   goto check_subtype;
+		case NSLeftMouseUp:       ev_button=1; ev_type=ButtonRelease; goto check_subtype;
+		case NSOtherMouseUp:      ev_button=2; ev_type=ButtonRelease; goto check_subtype;
+		case NSRightMouseUp:      ev_button=3; ev_type=ButtonRelease; goto check_subtype;
+		case NSLeftMouseDragged:  ev_button=1; ev_type=MotionNotify;  goto check_subtype;
+		case NSOtherMouseDragged: ev_button=2; ev_type=MotionNotify;  goto check_subtype;
+		case NSRightMouseDragged: ev_button=3; ev_type=MotionNotify;  goto check_subtype;
 		
 check_subtype:
 			if ([e subtype] != NSTabletPointEventSubtype) 
                 goto handle_mouse;
 			// fall through to get tablet data
+
 		case NSTabletPoint:
-			pressure = [e pressure];
-			tilt_x = [e tilt].x;
-			tilt_y = [e tilt].y; 
+            pressure = [e pressure];
+			tilt_x   = [e tilt].x;
+			tilt_y   = [e tilt].y; 
             goto handle_mouse;
 			// fall through to normal mouse handling
 
@@ -904,9 +914,6 @@ handle_mouse:
             DarwinSendKeyboardEvents((type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
 		break;
 
-		case NSFlagsChanged:
-			DarwinUpdateModKeys([e modifierFlags]);
-		break;
-		default: break; /* for gcc */
+        default: break; /* for gcc */
 	}	
 }
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index d1e3b6f..a1f3df2 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -106,8 +106,13 @@ char                    *darwinKeymapFile = "USA.keymapping";
 int                     darwinSyncKeymap = FALSE;
 
 // modifier masks for faking mouse buttons
+#ifdef NX_DEVICELCMDKEYMASK
+int                     darwinFakeMouse2Mask = NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
+int                     darwinFakeMouse3Mask = NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
+#else
 int                     darwinFakeMouse2Mask = NX_ALTERNATEMASK;
 int                     darwinFakeMouse3Mask = NX_COMMANDMASK;
+#endif
 
 // devices
 DeviceIntPtr            darwinPointer = NULL;
@@ -142,7 +147,7 @@ const int NUMFORMATS = sizeof(formats)/sizeof(formats[0]);
 #define XSERVER_VERSION "?"
 #endif
 
-const char *__crashreporter_info__ = "X.Org X Server " XSERVER_VERSION "Build Date: " BUILD_DATE;
+const char *__crashreporter_info__ = "X.Org X Server " XSERVER_VERSION " Build Date: " BUILD_DATE;
 
 void DDXRingBell(int volume, int pitch, int duration) {
   // FIXME -- make some noise, yo
@@ -498,9 +503,9 @@ int DarwinParseModifierList(
 
         while (p) {
             modifier = strsep(&p, " ,+&|/"); // allow lots of separators
-            nxkey = DarwinModifierStringToNXKey(modifier);
-            if (nxkey != -1)
-                result |= DarwinModifierNXKeyToNXMask(nxkey);
+            nxkey = DarwinModifierStringToNXMask(modifier);
+            if(nxkey)
+                result |= nxkey;
             else
                 ErrorF("fakebuttons: Unknown modifier \"%s\"\n", modifier);
         }
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 2b8e8de..cb4a214 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -30,6 +30,8 @@ used in advertising or otherwise to promote the sale, use or other dealings
 in this Software without prior written authorization from The Open Group.
  */
 
+#include "sanitizedCarbon.h"
+
 #ifdef HAVE_DIX_CONFIG_H
 #include <dix-config.h>
 #endif
@@ -77,7 +79,7 @@ in this Software without prior written authorization from The Open Group.
 /* FIXME: Abstract this better */
 void QuartzModeEQInit(void);
 
-static int modifier_flags = 0;  // last known modifier state
+int darwin_modifier_flags = 0;  // last known modifier state
 
 #define FD_ADD_MAX 128
 static int fd_add[FD_ADD_MAX];
@@ -139,89 +141,55 @@ static inline void darwinEvents_unlock(void) {
 }
 
 /*
- * DarwinPressModifierMask
- * Press or release the given modifier key, specified by its mask (one of NX_*MASK constants)
+ * DarwinPressModifierKey
+ * Press or release the given modifier key (one of NX_MODIFIERKEY_* constants)
  */
-static void DarwinPressModifierMask(int pressed, int mask) {
-    int keycode;
-    int key = DarwinModifierNXMaskToNXKey(mask);
-
-    if (key != -1) {
-        keycode = DarwinModifierNXKeyToNXKeycode(key, 0);
-        if (keycode != 0)
-            DarwinSendKeyboardEvents(pressed, keycode);
-    }
-}
-
-#ifdef NX_DEVICELCTLKEYMASK
-#define CONTROL_MASK(flags) (flags & (NX_DEVICELCTLKEYMASK|NX_DEVICERCTLKEYMASK))
-#define NX_CONTROLMASK_FULL (NX_CONTROLMASK | NX_DEVICELCTLKEYMASK | NX_DEVICERCTLKEYMASK)
-#else
-#define CONTROL_MASK(flags) (NX_CONTROLMASK)
-#define NX_CONTROLMASK_FULL NX_CONTROLMASK
-#endif /* NX_DEVICELCTLKEYMASK */
+static void DarwinPressModifierKey(int pressed, int key) {
+    int keycode = DarwinModifierNXKeyToNXKeycode(key, 0);
 
-#ifdef NX_DEVICELSHIFTKEYMASK
-#define SHIFT_MASK(flags) (flags & (NX_DEVICELSHIFTKEYMASK|NX_DEVICERSHIFTKEYMASK))
-#define NX_SHIFTMASK_FULL (NX_SHIFTMASK | NX_DEVICELSHIFTKEYMASK | NX_DEVICERSHIFTKEYMASK)
-#else
-#define SHIFT_MASK(flags) (NX_SHIFTMASK)
-#define NX_SHIFTMASK_FULL NX_SHIFTMASK
-#endif /* NX_DEVICELSHIFTKEYMASK */
-
-#ifdef NX_DEVICELCMDKEYMASK
-#define COMMAND_MASK(flags) (flags & (NX_DEVICELCMDKEYMASK|NX_DEVICERCMDKEYMASK))
-#define NX_COMMANDMASK_FULL (NX_COMMANDMASK | NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK)
-#else
-#define COMMAND_MASK(flags) (NX_COMMANDMASK)
-#define NX_COMMANDMASK_FULL NX_COMMANDMASK
-#endif /* NX_DEVICELCMDKEYMASK */
+    if (keycode == 0) {
+        ErrorF("DarwinPressModifierKey bad keycode: key=%d\n", pressed == KeyPress ? "press" : "release", key, keycode);
+        return;
+    }
 
-#ifdef NX_DEVICELALTKEYMASK
-#define ALTERNATE_MASK(flags) (flags & (NX_DEVICELALTKEYMASK|NX_DEVICERALTKEYMASK))
-#define NX_ALTERNATEMASK_FULL (NX_ALTERNATEMASK | NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK)
-#else
-#define ALTERNATE_MASK(flags) (NX_ALTERNATEMASK)
-#define NX_ALTERNATEMASK_FULL NX_ALTERNATEMASK
-#endif /* NX_DEVICELALTKEYMASK */
+    DarwinSendKeyboardEvents(pressed, keycode);
+}
 
 /*
  * DarwinUpdateModifiers
  *  Send events to update the modifier state.
  */
+
+static int modifier_mask_list[] = {
+    NX_SECONDARYFNMASK, NX_NUMERICPADMASK, NX_HELPMASK,
+#ifdef NX_DEVICELCMDKEYMASK
+    NX_DEVICELCTLKEYMASK, NX_DEVICERCTLKEYMASK,
+    NX_DEVICELSHIFTKEYMASK, NX_DEVICERSHIFTKEYMASK,
+    NX_DEVICELCMDKEYMASK, NX_DEVICERCMDKEYMASK,
+    NX_DEVICELALTKEYMASK, NX_DEVICERALTKEYMASK,
+#else
+    NX_CONTROLMASK, NX_SHIFTMASK, NX_COMMANDMASK, NX_ALTERNATEMASK,
+#endif
+    0
+};
+
 static void DarwinUpdateModifiers(
     int pressed,        // KeyPress or KeyRelease
     int flags )         // modifier flags that have changed
 {
-    if (flags & NX_ALPHASHIFTMASK) {
-        DarwinPressModifierMask(pressed, NX_ALPHASHIFTMASK);
-    }
-    if (flags & NX_COMMANDMASK_FULL) {
-        DarwinPressModifierMask(pressed, COMMAND_MASK(flags));
-    }
-    if (flags & NX_CONTROLMASK_FULL) {
-        DarwinPressModifierMask(pressed, CONTROL_MASK(flags));
-    }
-    if (flags & NX_ALTERNATEMASK_FULL) {
-        DarwinPressModifierMask(pressed, ALTERNATE_MASK(flags));
-    }
-    if (flags & NX_SHIFTMASK_FULL) {
-        DarwinPressModifierMask(pressed, SHIFT_MASK(flags));
-    }
-    if (flags & NX_SECONDARYFNMASK) {
-        DarwinPressModifierMask(pressed, NX_SECONDARYFNMASK);
-    }
-}
+    int *f;
 
-/*
- * DarwinReleaseModifiers
- * This hacky function releases all modifier keys.  It should be called when X11.app
- * is deactivated (kXquartzDeactivate) to prevent modifiers from getting stuck if they
- * are held down during a "context" switch -- otherwise, we would miss the KeyUp.
- */
-static void DarwinReleaseModifiers(void) {
-    ErrorF("DarwinReleaseModifiers\n");
-	DarwinUpdateModifiers(KeyRelease, COMMAND_MASK(-1) | CONTROL_MASK(-1) | ALTERNATE_MASK(-1) | SHIFT_MASK(-1));
+    /* Capslock is special.  This mask is the state of capslock (on/off),
+     * not the state of the button.  Hopefully we can find a better solution.
+     */
+    if(NX_ALPHASHIFTMASK & flags) {
+        DarwinPressModifierKey(KeyPress, NX_MODIFIERKEY_ALPHALOCK);
+        DarwinPressModifierKey(KeyRelease, NX_MODIFIERKEY_ALPHALOCK);
+    }
+    
+    for(f=modifier_mask_list; *f; f++)
+        if(*f & flags)
+            DarwinPressModifierKey(pressed, DarwinModifierNXMaskToNXKey(*f));
 }
 
 /* Generic handler for Xquartz-specifc events.  When possible, these should
@@ -263,7 +231,6 @@ static void DarwinEventHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, in
                 
             case kXquartzDeactivate:
                 DEBUG_LOG("kXquartzDeactivate\n");
-                DarwinReleaseModifiers();
                 AppleWMSendEvent(AppleWMActivationNotify,
                                  AppleWMActivationNotifyMask,
                                  AppleWMIsInactive, 0);
@@ -476,20 +443,29 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin
             DarwinSendPointerEvents(ButtonRelease, darwinFakeMouseButtonDown, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
             darwinFakeMouseButtonDown=0;
         }
-		if ((modifier_flags & darwinFakeMouse2Mask) == darwinFakeMouse2Mask) {
+		if (darwin_modifier_flags & darwinFakeMouse2Mask) {
             ev_button = 2;
 			darwinFakeMouseButtonDown = 2;
-		} else if ((modifier_flags & darwinFakeMouse3Mask) == darwinFakeMouse3Mask) {
+            DarwinUpdateModKeys(darwin_modifier_flags & ~darwinFakeMouse2Mask);
+		} else if (darwin_modifier_flags & darwinFakeMouse3Mask) {
             ev_button = 3;
 			darwinFakeMouseButtonDown = 3;
+            DarwinUpdateModKeys(darwin_modifier_flags & ~darwinFakeMouse3Mask);
 		}
 	}
 
 	if (ev_type == ButtonRelease && ev_button == 1) {
         if(darwinFakeMouseButtonDown) {
             ev_button = darwinFakeMouseButtonDown;
-            darwinFakeMouseButtonDown = 0;
         }
+
+        if(darwinFakeMouseButtonDown == 2) {
+            DarwinUpdateModKeys(darwin_modifier_flags & ~darwinFakeMouse2Mask);
+        } else if(darwinFakeMouseButtonDown == 3) {
+            DarwinUpdateModKeys(darwin_modifier_flags & ~darwinFakeMouse3Mask);
+        }
+
+        darwinFakeMouseButtonDown = 0;
 	}
 
     DarwinPrepareValuators(valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
@@ -509,7 +485,7 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
 		return;
 	}
 
-	if (modifier_flags == 0 && darwinSyncKeymap && darwinKeymapFile == NULL) {
+	if (darwinSyncKeymap && darwinKeymapFile == NULL) {
 		/* See if keymap has changed. */
 
 		static unsigned int last_seed;
@@ -589,9 +565,9 @@ void DarwinSendScrollEvents(float count_x, float count_y,
 /* Send the appropriate KeyPress/KeyRelease events to GetKeyboardEvents to
    reflect changing modifier flags (alt, control, meta, etc) */
 void DarwinUpdateModKeys(int flags) {
-	DarwinUpdateModifiers(KeyRelease, modifier_flags & ~flags);
-	DarwinUpdateModifiers(KeyPress, ~modifier_flags & flags);
-	modifier_flags = flags;
+	DarwinUpdateModifiers(KeyRelease, darwin_modifier_flags & ~flags);
+	DarwinUpdateModifiers(KeyPress, ~darwin_modifier_flags & flags);
+	darwin_modifier_flags = flags;
 }
 
 /*
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index b721085..85d15b1 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -71,8 +71,6 @@
 #include "X11/keysym.h"
 #include "keysym2ucs.h"
 
-#include <Availability.h>
-
 void QuartzXkbUpdate(DeviceIntPtr pDev);
 
 enum {
@@ -1014,28 +1012,6 @@ int DarwinModifierNXMaskToNXKey(int mask) {
     return -1;
 }
 
-static const char *DarwinModifierNXMaskTostring(int mask) {
-    switch (mask) {
-        case NX_ALPHASHIFTMASK:      return "NX_ALPHASHIFTMASK";
-        case NX_SHIFTMASK:           return "NX_SHIFTMASK";
-        case NX_DEVICELSHIFTKEYMASK: return "NX_DEVICELSHIFTKEYMASK";
-        case NX_DEVICERSHIFTKEYMASK: return "NX_DEVICERSHIFTKEYMASK";
-        case NX_CONTROLMASK:         return "NX_CONTROLMASK";
-        case NX_DEVICELCTLKEYMASK:   return "NX_DEVICELCTLKEYMASK";
-        case NX_DEVICERCTLKEYMASK:   return "NX_DEVICERCTLKEYMASK";
-        case NX_ALTERNATEMASK:       return "NX_ALTERNATEMASK";
-        case NX_DEVICELALTKEYMASK:   return "NX_DEVICELALTKEYMASK";
-        case NX_DEVICERALTKEYMASK:   return "NX_DEVICERALTKEYMASK";
-        case NX_COMMANDMASK:         return "NX_COMMANDMASK";
-        case NX_DEVICELCMDKEYMASK:   return "NX_DEVICELCMDKEYMASK";
-        case NX_DEVICERCMDKEYMASK:   return "NX_DEVICERCMDKEYMASK";
-        case NX_NUMERICPADMASK:      return "NX_NUMERICPADMASK";
-        case NX_HELPMASK:            return "NX_HELPMASK";
-        case NX_SECONDARYFNMASK:     return "NX_SECONDARYFNMASK";
-    }
-    return "unknown mask";
-}
-
 /*
  * DarwinModifierNXKeyToNXMask
  *      Returns 0 if key is not a known modifier key.
@@ -1043,21 +1019,20 @@ static const char *DarwinModifierNXMaskTostring(int mask) {
 int DarwinModifierNXKeyToNXMask(int key) {
     switch (key) {
         case NX_MODIFIERKEY_ALPHALOCK:   return NX_ALPHASHIFTMASK;
+#ifdef NX_DEVICELSHIFTKEYMASK
+        case NX_MODIFIERKEY_SHIFT:       return NX_DEVICELSHIFTKEYMASK;
+        case NX_MODIFIERKEY_RSHIFT:      return NX_DEVICERSHIFTKEYMASK;
+        case NX_MODIFIERKEY_CONTROL:     return NX_DEVICELCTLKEYMASK;
+        case NX_MODIFIERKEY_RCONTROL:    return NX_DEVICERCTLKEYMASK;
+        case NX_MODIFIERKEY_ALTERNATE:   return NX_DEVICELALTKEYMASK;
+        case NX_MODIFIERKEY_RALTERNATE:  return NX_DEVICERALTKEYMASK;
+        case NX_MODIFIERKEY_COMMAND:     return NX_DEVICELCMDKEYMASK;
+        case NX_MODIFIERKEY_RCOMMAND:    return NX_DEVICERCMDKEYMASK;
+#else
         case NX_MODIFIERKEY_SHIFT:       return NX_SHIFTMASK;
-#ifdef NX_MODIFIERKEY_RSHIFT
-        case NX_MODIFIERKEY_RSHIFT:      return NX_SHIFTMASK;
-#endif
         case NX_MODIFIERKEY_CONTROL:     return NX_CONTROLMASK;
-#ifdef NX_MODIFIERKEY_RCONTROL
-        case NX_MODIFIERKEY_RCONTROL:    return NX_CONTROLMASK;
-#endif
         case NX_MODIFIERKEY_ALTERNATE:   return NX_ALTERNATEMASK;
-#ifdef NX_MODIFIERKEY_RALTERNATE
-        case NX_MODIFIERKEY_RALTERNATE:  return NX_ALTERNATEMASK;
-#endif
         case NX_MODIFIERKEY_COMMAND:     return NX_COMMANDMASK;
-#ifdef NX_MODIFIERKEY_RCOMMAND
-        case NX_MODIFIERKEY_RCOMMAND:    return NX_COMMANDMASK;
 #endif
         case NX_MODIFIERKEY_NUMERICPAD:  return NX_NUMERICPADMASK;
         case NX_MODIFIERKEY_HELP:        return NX_HELPMASK;
@@ -1067,16 +1042,42 @@ int DarwinModifierNXKeyToNXMask(int key) {
 }
 
 /*
- * DarwinModifierStringToNXKey
- *      Returns -1 if string is not a known modifier.
+ * DarwinModifierStringToNXMask
+ *      Returns 0 if string is not a known modifier.
  */
-int DarwinModifierStringToNXKey(const char *str) {
-    if      (!strcasecmp(str, "shift"))   return NX_MODIFIERKEY_SHIFT;
-    else if (!strcasecmp(str, "control")) return NX_MODIFIERKEY_CONTROL;
-    else if (!strcasecmp(str, "option"))  return NX_MODIFIERKEY_ALTERNATE;
-    else if (!strcasecmp(str, "command")) return NX_MODIFIERKEY_COMMAND;
-    else if (!strcasecmp(str, "fn"))      return NX_MODIFIERKEY_SECONDARYFN;
-    else return -1;
+int DarwinModifierStringToNXMask(const char *str) {
+#ifdef NX_DEVICELSHIFTKEYMASK
+    if      (!strcasecmp(str, "shift"))    return NX_DEVICELSHIFTKEYMASK | NX_DEVICERSHIFTKEYMASK;
+    else if (!strcasecmp(str, "control"))  return NX_DEVICELCTLKEYMASK | NX_DEVICERCTLKEYMASK;
+    else if (!strcasecmp(str, "option"))   return NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
+    else if (!strcasecmp(str, "command"))  return NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
+    else if (!strcasecmp(str, "lshift"))   return NX_DEVICELSHIFTKEYMASK;
+    else if (!strcasecmp(str, "rshift"))   return NX_DEVICERSHIFTKEYMASK;
+    else if (!strcasecmp(str, "lcontrol")) return NX_DEVICELCTLKEYMASK;
+    else if (!strcasecmp(str, "rcontrol")) return NX_DEVICERCTLKEYMASK;
+    else if (!strcasecmp(str, "loption"))  return NX_DEVICELALTKEYMASK;
+    else if (!strcasecmp(str, "roption"))  return NX_DEVICERALTKEYMASK;
+    else if (!strcasecmp(str, "lcommand")) return NX_DEVICELCMDKEYMASK;
+    else if (!strcasecmp(str, "rcommand")) return NX_DEVICERCMDKEYMASK;
+#else
+    if      (!strcasecmp(str, "shift"))    return NX_SHIFTMASK;
+    else if (!strcasecmp(str, "control"))  return NX_CONTROLMASK;
+    else if (!strcasecmp(str, "option"))   return NX_ALTERNATEMASK;
+    else if (!strcasecmp(str, "command"))  return NX_COMMANDMASK;
+    else if (!strcasecmp(str, "lshift"))   return NX_SHIFTMASK;
+    else if (!strcasecmp(str, "rshift"))   return NX_SHIFTMASK;
+    else if (!strcasecmp(str, "lcontrol")) return NX_CONTROLMASK;
+    else if (!strcasecmp(str, "rcontrol")) return NX_CONTROLMASK;
+    else if (!strcasecmp(str, "loption"))  return NX_ALTERNATEMASK;
+    else if (!strcasecmp(str, "roption"))  return NX_ALTERNATEMASK;
+    else if (!strcasecmp(str, "lcommand")) return NX_COMMANDMASK;
+    else if (!strcasecmp(str, "rcommand")) return NX_COMMANDMASK;
+#endif
+    else if (!strcasecmp(str, "lock"))     return NX_ALPHASHIFTMASK;
+    else if (!strcasecmp(str, "fn"))       return NX_SECONDARYFNMASK;
+    else if (!strcasecmp(str, "help"))     return NX_HELPMASK;
+    else if (!strcasecmp(str, "numlock"))  return NX_NUMERICPADMASK;
+    else return 0;
 }
 
 /*
@@ -1092,7 +1093,7 @@ Bool LegalModifier(unsigned int key, DeviceIntPtr pDev)
 /* TODO: Not thread safe */
 unsigned int QuartzSystemKeymapSeed(void) {
     static unsigned int seed = 0;
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+#if defined(__x86_64__) || defined(__ppc64__)
     static TISInputSourceRef last_key_layout = NULL;
     TISInputSourceRef key_layout;
 
@@ -1159,7 +1160,7 @@ static KeySym make_dead_key(KeySym in) {
 }
 
 Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
-#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+#if !defined(__x86_64__) && !defined(__ppc64__)
     KeyboardLayoutRef key_layout;
 #endif
     const void *chr_data = NULL;
@@ -1179,11 +1180,11 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
           chr_data = CFDataGetBytePtr(currentKeyLayoutDataRef);
     }
 
-#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+#if !defined(__x86_64__) && !defined(__ppc64__)
     if (chr_data == NULL) {
         ErrorF("X11.app: Error detected in determining keyboard layout.  Please report this error at http://xquartz.macosforge.org\n");
         ErrorF("X11.app: Debug Info: keyboard_type=%u, currentKeyLayoutRef=%p, currentKeyLayoutDataRef=%p, chr_data=%p\n",
-               keyboard_type, currentKeyLayoutRef, currentKeyLayoutDataRef, chr_data);
+               (unsigned)keyboard_type, currentKeyLayoutRef, currentKeyLayoutDataRef, chr_data);
 
         KLGetCurrentKeyboardLayout (&key_layout);
         KLGetKeyboardLayoutProperty (key_layout, kKLuchrData, &chr_data);
@@ -1194,7 +1195,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
     }
 
     if (chr_data == NULL) {
-        ErrorF("X11.app: Debug Info: kKLuchrData fallback failed, trying kKLKCHRData.\n", currentKeyLayoutRef, chr_data);
+        ErrorF("X11.app: Debug Info: kKLuchrData fallback failed, trying kKLKCHRData.\n");
         KLGetKeyboardLayoutProperty (key_layout, kKLKCHRData, &chr_data);
         is_uchr = 0;
         num_keycodes = 128;
diff --git a/hw/xquartz/quartzKeyboard.h b/hw/xquartz/quartzKeyboard.h
index 964ea01..3a892ba 100644
--- a/hw/xquartz/quartzKeyboard.h
+++ b/hw/xquartz/quartzKeyboard.h
@@ -57,7 +57,7 @@ int DarwinModifierNXKeycodeToNXKey(unsigned char keycode, int *outSide);
 int DarwinModifierNXKeyToNXKeycode(int key, int side);
 int DarwinModifierNXKeyToNXMask(int key);
 int DarwinModifierNXMaskToNXKey(int mask);
-int DarwinModifierStringToNXKey(const char *string);
+int DarwinModifierStringToNXMask(const char *string);
 
 /* Provided for darwin.c */
 void DarwinKeyboardInit(DeviceIntPtr pDev);
commit eedecba0b882bb07931e8d9168589f5be7a08a69
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu Aug 14 09:34:12 2008 -0700

    XQuartz: Updated bundle version to 2.3.1

diff --git a/hw/xquartz/bundle/Info.plist b/hw/xquartz/bundle/Info.plist
index f06a30d..2582b92 100644
--- a/hw/xquartz/bundle/Info.plist
+++ b/hw/xquartz/bundle/Info.plist
@@ -19,11 +19,11 @@
 	<key>CFBundlePackageType</key>
 		<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-		<string>2.3.0</string>
+		<string>2.3.1</string>
 	<key>CFBundleVersion</key>
-		<string>2.3.0</string>
+		<string>2.3.1</string>
 	<key>CFBundleVersionString</key>
-		<string>2.3.0</string>
+		<string>2.3.1</string>
 	<key>CFBundleSignature</key>
 		<string>x11a</string>
 	<key>CSResourcesFileMapped</key>


More information about the xorg-commit mailing list