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

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Wed Aug 20 09:36:40 PDT 2008


 hw/xquartz/X11Application.h                                   |    1 
 hw/xquartz/X11Application.m                                   |   20 ++
 hw/xquartz/X11Controller.m                                    |    8 -
 hw/xquartz/bundle/Resources/English.lproj/Localizable.strings |binary
 hw/xquartz/darwin.c                                           |   16 +-
 hw/xquartz/darwin.h                                           |    3 
 hw/xquartz/quartzKeyboard.c                                   |   72 +++++-----
 hw/xquartz/quartzKeyboard.h                                   |    2 
 8 files changed, 77 insertions(+), 45 deletions(-)

New commits:
commit e4110861d307a55d9032cb83cf024ec1f294e8d7
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Aug 20 09:21:44 2008 -0700

    XQuartz: Added window_item_modifiers defaults item (and option to localization) to change the modifier keys used for the windows menu.

diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index 22a8728..5d040de 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -92,6 +92,7 @@ extern int quartzHasRoot, quartzEnableRootless;
 #define PREFS_FAKE_BUTTON2          "fake_button2"
 #define PREFS_FAKE_BUTTON3          "fake_button3"
 #define PREFS_APPKIT_MODIFIERS      "appkit_modifiers"
+#define PREFS_WINDOW_ITEM_MODIFIERS "window_item_modifiers"
 #define PREFS_ROOTLESS              "rootless"
 #define PREFS_FULLSCREEN_HOTKEYS    "fullscreen_hotkeys"
 #define PREFS_SWAP_ALT_META         "swap_alt_meta"
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index c4209fa..b9f4122 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -608,6 +608,7 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
 
 - (void) read_defaults
 {
+    NSString *nsstr;
     const char *tem;
 	
     quartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP
@@ -631,13 +632,26 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
         fake2 = [self prefs_get_string:@PREFS_FAKE_BUTTON2 default:NULL];
         fake3 = [self prefs_get_string:@PREFS_FAKE_BUTTON3 default:NULL];
 
-        if (fake2 != NULL) darwinFakeMouse2Mask = DarwinParseModifierList(fake2);
-        if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList(fake3);
+        if (fake2 != NULL) darwinFakeMouse2Mask = DarwinParseModifierList(fake2, TRUE);
+        if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList(fake3, TRUE);
     }
 
     tem = [self prefs_get_string:@PREFS_APPKIT_MODIFIERS default:NULL];
-    if (tem != NULL) darwinAppKitModMask = DarwinParseModifierList(tem);
+    if (tem != NULL) darwinAppKitModMask = DarwinParseModifierList(tem, TRUE);
 	
+    tem = [self prefs_get_string:@PREFS_WINDOW_ITEM_MODIFIERS default:NULL];
+    if (tem != NULL) {
+        windowItemModMask = DarwinParseModifierList(tem, FALSE);
+    } else {
+        nsstr = NSLocalizedString (@"window item modifiers", @"window item modifiers");
+        if(nsstr != NULL) {
+            tem = [nsstr UTF8String];
+            if((tem != NULL) && strcmp(tem, "window item modifiers")) {
+                windowItemModMask = DarwinParseModifierList(tem, FALSE);
+            }
+        }
+    }
+
     X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
                                default:X11EnableKeyEquivalents];
 	
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 107d8ee..682a692 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -129,7 +129,7 @@
   NSMenu *menu;
   NSMenuItem *item;
   int first, count, i;
-	
+
   menu = [window_separator menu];
   first = [menu indexOfItem:window_separator] + 1;
   count = [list count];
@@ -142,14 +142,18 @@
 		
       item = (NSMenuItem *) [menu addItemWithTitle:name action:@selector
 				  (item_selected:) keyEquivalent:shortcut];
+
+      [item setKeyEquivalentModifierMask:(NSUInteger) windowItemModMask];
       [item setTarget:self];
       [item setTag:i];
       [item setEnabled:YES];
-		
+
       item = (NSMenuItem *) [dock_menu insertItemWithTitle:name
 				       action:@selector
 				       (item_selected:) keyEquivalent:shortcut
 				       atIndex:i];
+
+      [item setKeyEquivalentModifierMask:(NSUInteger) windowItemModMask];
       [item setTarget:self];
       [item setTag:i];
       [item setEnabled:YES];
diff --git a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings
index 63a1352..439bb6b 100644
Binary files a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings and b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings differ
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 722276f..2260a5f 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -105,7 +105,7 @@ int                     darwinDesiredRefresh = -1;
 char                    *darwinKeymapFile = "USA.keymapping";
 int                     darwinSyncKeymap = FALSE;
 
-// modifier masks for faking mouse buttons
+// modifier masks for faking mouse buttons - ANY of these bits trigger it  (not all)
 #ifdef NX_DEVICELCMDKEYMASK
 int                     darwinFakeMouse2Mask = NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
 int                     darwinFakeMouse3Mask = NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
@@ -115,7 +115,10 @@ int                     darwinFakeMouse3Mask = NX_COMMANDMASK;
 #endif
 
 // Modifier mask for overriding event delivery to appkit (might be useful to set this to rcommand for input menu
-int                     darwinAppKitModMask = 0;
+int                     darwinAppKitModMask = 0; // Any of these bits
+
+// Modifier mask for items in the Window menu (0 and -1 cause shortcuts to be disabled)
+int                     windowItemModMask = NX_COMMANDMASK;
 
 // devices
 DeviceIntPtr            darwinPointer = NULL;
@@ -493,8 +496,7 @@ static char * DarwinFindLibraryFile(
  * DarwinParseModifierList
  *  Parse a list of modifier names and return a corresponding modifier mask
  */
-int DarwinParseModifierList(
-    const char *constmodifiers) // string containing list of modifier names
+int DarwinParseModifierList(const char *constmodifiers, int separatelr)
 {
     int result = 0;
 
@@ -506,7 +508,7 @@ int DarwinParseModifierList(
 
         while (p) {
             modifier = strsep(&p, " ,+&|/"); // allow lots of separators
-            nxkey = DarwinModifierStringToNXMask(modifier);
+            nxkey = DarwinModifierStringToNXMask(modifier, separatelr);
             if(nxkey)
                 result |= nxkey;
             else
@@ -743,7 +745,7 @@ int ddxProcessArgument( int argc, char *argv[], int i )
         if (!strcasecmp(argv[i+1], "none") || !strcmp(argv[i+1], ""))
             darwinFakeMouse2Mask = 0;
         else
-            darwinFakeMouse2Mask = DarwinParseModifierList(argv[i+1]);
+            darwinFakeMouse2Mask = DarwinParseModifierList(argv[i+1], 1);
         ErrorF("Modifier mask to fake mouse button 2 = 0x%x\n",
                darwinFakeMouse2Mask);
         return 2;
@@ -756,7 +758,7 @@ int ddxProcessArgument( int argc, char *argv[], int i )
         if (!strcasecmp(argv[i+1], "none") || !strcmp(argv[i+1], ""))
             darwinFakeMouse3Mask = 0;
         else
-            darwinFakeMouse3Mask = DarwinParseModifierList(argv[i+1]);
+            darwinFakeMouse3Mask = DarwinParseModifierList(argv[i+1], 1);
         ErrorF("Modifier mask to fake mouse button 3 = 0x%x\n",
                darwinFakeMouse3Mask);
         return 2;
diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h
index cbd6d67..873b541 100644
--- a/hw/xquartz/darwin.h
+++ b/hw/xquartz/darwin.h
@@ -55,7 +55,7 @@ typedef struct {
 
 // From darwin.c
 void DarwinPrintBanner(void);
-int DarwinParseModifierList(const char *constmodifiers);
+int DarwinParseModifierList(const char *constmodifiers, int separatelr);
 void DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo);
 void xf86SetRootClip (ScreenPtr pScreen, int enable);
 
@@ -80,6 +80,7 @@ extern int              darwinFakeButtons;
 extern int              darwinFakeMouse2Mask;
 extern int              darwinFakeMouse3Mask;
 extern int              darwinAppKitModMask;
+extern int              windowItemModMask;
 extern char            *darwinKeymapFile;
 extern int              darwinSyncKeymap;
 extern unsigned int     darwinDesiredWidth, darwinDesiredHeight;
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 85d15b1..ba1ca5a 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -1045,39 +1045,49 @@ int DarwinModifierNXKeyToNXMask(int key) {
  * DarwinModifierStringToNXMask
  *      Returns 0 if string is not a known modifier.
  */
-int DarwinModifierStringToNXMask(const char *str) {
+int DarwinModifierStringToNXMask(const char *str, int separatelr) {
 #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;
+    if(separatelr) {
+        if (!strcasecmp(str, "shift"))    return NX_DEVICELSHIFTKEYMASK | NX_DEVICERSHIFTKEYMASK;
+        if (!strcasecmp(str, "control"))  return NX_DEVICELCTLKEYMASK | NX_DEVICERCTLKEYMASK;
+        if (!strcasecmp(str, "option"))   return NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
+        if (!strcasecmp(str, "alt"))   return NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
+        if (!strcasecmp(str, "command"))  return NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
+        if (!strcasecmp(str, "lshift"))   return NX_DEVICELSHIFTKEYMASK;
+        if (!strcasecmp(str, "rshift"))   return NX_DEVICERSHIFTKEYMASK;
+        if (!strcasecmp(str, "lcontrol")) return NX_DEVICELCTLKEYMASK;
+        if (!strcasecmp(str, "rcontrol")) return NX_DEVICERCTLKEYMASK;
+        if (!strcasecmp(str, "loption"))  return NX_DEVICELALTKEYMASK;
+        if (!strcasecmp(str, "roption"))  return NX_DEVICERALTKEYMASK;
+        if (!strcasecmp(str, "lalt"))  return NX_DEVICELALTKEYMASK;
+        if (!strcasecmp(str, "ralt"))  return NX_DEVICERALTKEYMASK;
+        if (!strcasecmp(str, "lcommand")) return NX_DEVICELCMDKEYMASK;
+        if (!strcasecmp(str, "rcommand")) return NX_DEVICERCMDKEYMASK;
+    } else {
+#endif
+        if (!strcasecmp(str, "shift"))    return NX_SHIFTMASK;
+        if (!strcasecmp(str, "control"))  return NX_CONTROLMASK;
+        if (!strcasecmp(str, "option"))   return NX_ALTERNATEMASK;
+        if (!strcasecmp(str, "alt"))   return NX_ALTERNATEMASK;
+        if (!strcasecmp(str, "command"))  return NX_COMMANDMASK;
+        if (!strcasecmp(str, "lshift"))   return NX_SHIFTMASK;
+        if (!strcasecmp(str, "rshift"))   return NX_SHIFTMASK;
+        if (!strcasecmp(str, "lcontrol")) return NX_CONTROLMASK;
+        if (!strcasecmp(str, "rcontrol")) return NX_CONTROLMASK;
+        if (!strcasecmp(str, "loption"))  return NX_ALTERNATEMASK;
+        if (!strcasecmp(str, "roption"))  return NX_ALTERNATEMASK;
+        if (!strcasecmp(str, "lalt"))  return NX_ALTERNATEMASK;
+        if (!strcasecmp(str, "ralt"))  return NX_ALTERNATEMASK;
+        if (!strcasecmp(str, "lcommand")) return NX_COMMANDMASK;
+        if (!strcasecmp(str, "rcommand")) return NX_COMMANDMASK;
+#ifdef NX_DEVICELSHIFTKEYMASK
+    }
 #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;
+    if (!strcasecmp(str, "lock"))     return NX_ALPHASHIFTMASK;
+    if (!strcasecmp(str, "fn"))       return NX_SECONDARYFNMASK;
+    if (!strcasecmp(str, "help"))     return NX_HELPMASK;
+    if (!strcasecmp(str, "numlock"))  return NX_NUMERICPADMASK;
+    return 0;
 }
 
 /*
diff --git a/hw/xquartz/quartzKeyboard.h b/hw/xquartz/quartzKeyboard.h
index 3a892ba..d62a79d 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 DarwinModifierStringToNXMask(const char *string);
+int DarwinModifierStringToNXMask(const char *string, int separatelr);
 
 /* Provided for darwin.c */
 void DarwinKeyboardInit(DeviceIntPtr pDev);


More information about the xorg-commit mailing list