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