XQuartz: Added window_item_modifiers defaults item (and option to localization) to change the modifier keys used for the windows menu.
(cherry picked from commit e4110861d307a55d9032cb83cf024ec1f294e8d7) (cherry picked from commit fcfc05482a88696cb713c7a2ddfcf935ae8378a6)
This commit is contained in:
parent
bdc277c9b3
commit
6c5612c2e1
|
@ -92,6 +92,7 @@ extern int quartzHasRoot, quartzEnableRootless;
|
||||||
#define PREFS_FAKE_BUTTON2 "fake_button2"
|
#define PREFS_FAKE_BUTTON2 "fake_button2"
|
||||||
#define PREFS_FAKE_BUTTON3 "fake_button3"
|
#define PREFS_FAKE_BUTTON3 "fake_button3"
|
||||||
#define PREFS_APPKIT_MODIFIERS "appkit_modifiers"
|
#define PREFS_APPKIT_MODIFIERS "appkit_modifiers"
|
||||||
|
#define PREFS_WINDOW_ITEM_MODIFIERS "window_item_modifiers"
|
||||||
#define PREFS_ROOTLESS "rootless"
|
#define PREFS_ROOTLESS "rootless"
|
||||||
#define PREFS_FULLSCREEN_HOTKEYS "fullscreen_hotkeys"
|
#define PREFS_FULLSCREEN_HOTKEYS "fullscreen_hotkeys"
|
||||||
#define PREFS_SWAP_ALT_META "swap_alt_meta"
|
#define PREFS_SWAP_ALT_META "swap_alt_meta"
|
||||||
|
|
|
@ -608,6 +608,7 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
|
||||||
|
|
||||||
- (void) read_defaults
|
- (void) read_defaults
|
||||||
{
|
{
|
||||||
|
NSString *nsstr;
|
||||||
const char *tem;
|
const char *tem;
|
||||||
|
|
||||||
quartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP
|
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];
|
fake2 = [self prefs_get_string:@PREFS_FAKE_BUTTON2 default:NULL];
|
||||||
fake3 = [self prefs_get_string:@PREFS_FAKE_BUTTON3 default:NULL];
|
fake3 = [self prefs_get_string:@PREFS_FAKE_BUTTON3 default:NULL];
|
||||||
|
|
||||||
if (fake2 != NULL) darwinFakeMouse2Mask = DarwinParseModifierList(fake2);
|
if (fake2 != NULL) darwinFakeMouse2Mask = DarwinParseModifierList(fake2, TRUE);
|
||||||
if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList(fake3);
|
if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList(fake3, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
tem = [self prefs_get_string:@PREFS_APPKIT_MODIFIERS default:NULL];
|
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
|
X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
|
||||||
default:X11EnableKeyEquivalents];
|
default:X11EnableKeyEquivalents];
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
NSMenu *menu;
|
NSMenu *menu;
|
||||||
NSMenuItem *item;
|
NSMenuItem *item;
|
||||||
int first, count, i;
|
int first, count, i;
|
||||||
|
|
||||||
menu = [window_separator menu];
|
menu = [window_separator menu];
|
||||||
first = [menu indexOfItem:window_separator] + 1;
|
first = [menu indexOfItem:window_separator] + 1;
|
||||||
count = [list count];
|
count = [list count];
|
||||||
|
@ -142,14 +142,18 @@
|
||||||
|
|
||||||
item = (NSMenuItem *) [menu addItemWithTitle:name action:@selector
|
item = (NSMenuItem *) [menu addItemWithTitle:name action:@selector
|
||||||
(item_selected:) keyEquivalent:shortcut];
|
(item_selected:) keyEquivalent:shortcut];
|
||||||
|
|
||||||
|
[item setKeyEquivalentModifierMask:(NSUInteger) windowItemModMask];
|
||||||
[item setTarget:self];
|
[item setTarget:self];
|
||||||
[item setTag:i];
|
[item setTag:i];
|
||||||
[item setEnabled:YES];
|
[item setEnabled:YES];
|
||||||
|
|
||||||
item = (NSMenuItem *) [dock_menu insertItemWithTitle:name
|
item = (NSMenuItem *) [dock_menu insertItemWithTitle:name
|
||||||
action:@selector
|
action:@selector
|
||||||
(item_selected:) keyEquivalent:shortcut
|
(item_selected:) keyEquivalent:shortcut
|
||||||
atIndex:i];
|
atIndex:i];
|
||||||
|
|
||||||
|
[item setKeyEquivalentModifierMask:(NSUInteger) windowItemModMask];
|
||||||
[item setTarget:self];
|
[item setTarget:self];
|
||||||
[item setTag:i];
|
[item setTag:i];
|
||||||
[item setEnabled:YES];
|
[item setEnabled:YES];
|
||||||
|
|
Binary file not shown.
|
@ -103,7 +103,7 @@ int darwinDesiredRefresh = -1;
|
||||||
char *darwinKeymapFile = "USA.keymapping";
|
char *darwinKeymapFile = "USA.keymapping";
|
||||||
int darwinSyncKeymap = FALSE;
|
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
|
#ifdef NX_DEVICELCMDKEYMASK
|
||||||
int darwinFakeMouse2Mask = NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
|
int darwinFakeMouse2Mask = NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
|
||||||
int darwinFakeMouse3Mask = NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
|
int darwinFakeMouse3Mask = NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
|
||||||
|
@ -113,7 +113,10 @@ int darwinFakeMouse3Mask = NX_COMMANDMASK;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Modifier mask for overriding event delivery to appkit (might be useful to set this to rcommand for input menu
|
// 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
|
// devices
|
||||||
DeviceIntPtr darwinPointer = NULL;
|
DeviceIntPtr darwinPointer = NULL;
|
||||||
|
@ -491,8 +494,7 @@ static char * DarwinFindLibraryFile(
|
||||||
* DarwinParseModifierList
|
* DarwinParseModifierList
|
||||||
* Parse a list of modifier names and return a corresponding modifier mask
|
* Parse a list of modifier names and return a corresponding modifier mask
|
||||||
*/
|
*/
|
||||||
int DarwinParseModifierList(
|
int DarwinParseModifierList(const char *constmodifiers, int separatelr)
|
||||||
const char *constmodifiers) // string containing list of modifier names
|
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
@ -504,7 +506,7 @@ int DarwinParseModifierList(
|
||||||
|
|
||||||
while (p) {
|
while (p) {
|
||||||
modifier = strsep(&p, " ,+&|/"); // allow lots of separators
|
modifier = strsep(&p, " ,+&|/"); // allow lots of separators
|
||||||
nxkey = DarwinModifierStringToNXMask(modifier);
|
nxkey = DarwinModifierStringToNXMask(modifier, separatelr);
|
||||||
if(nxkey)
|
if(nxkey)
|
||||||
result |= nxkey;
|
result |= nxkey;
|
||||||
else
|
else
|
||||||
|
@ -725,7 +727,7 @@ int ddxProcessArgument( int argc, char *argv[], int i )
|
||||||
if (!strcasecmp(argv[i+1], "none") || !strcmp(argv[i+1], ""))
|
if (!strcasecmp(argv[i+1], "none") || !strcmp(argv[i+1], ""))
|
||||||
darwinFakeMouse2Mask = 0;
|
darwinFakeMouse2Mask = 0;
|
||||||
else
|
else
|
||||||
darwinFakeMouse2Mask = DarwinParseModifierList(argv[i+1]);
|
darwinFakeMouse2Mask = DarwinParseModifierList(argv[i+1], 1);
|
||||||
ErrorF("Modifier mask to fake mouse button 2 = 0x%x\n",
|
ErrorF("Modifier mask to fake mouse button 2 = 0x%x\n",
|
||||||
darwinFakeMouse2Mask);
|
darwinFakeMouse2Mask);
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -738,7 +740,7 @@ int ddxProcessArgument( int argc, char *argv[], int i )
|
||||||
if (!strcasecmp(argv[i+1], "none") || !strcmp(argv[i+1], ""))
|
if (!strcasecmp(argv[i+1], "none") || !strcmp(argv[i+1], ""))
|
||||||
darwinFakeMouse3Mask = 0;
|
darwinFakeMouse3Mask = 0;
|
||||||
else
|
else
|
||||||
darwinFakeMouse3Mask = DarwinParseModifierList(argv[i+1]);
|
darwinFakeMouse3Mask = DarwinParseModifierList(argv[i+1], 1);
|
||||||
ErrorF("Modifier mask to fake mouse button 3 = 0x%x\n",
|
ErrorF("Modifier mask to fake mouse button 3 = 0x%x\n",
|
||||||
darwinFakeMouse3Mask);
|
darwinFakeMouse3Mask);
|
||||||
return 2;
|
return 2;
|
||||||
|
|
|
@ -55,7 +55,7 @@ typedef struct {
|
||||||
|
|
||||||
// From darwin.c
|
// From darwin.c
|
||||||
void DarwinPrintBanner(void);
|
void DarwinPrintBanner(void);
|
||||||
int DarwinParseModifierList(const char *constmodifiers);
|
int DarwinParseModifierList(const char *constmodifiers, int separatelr);
|
||||||
void DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo);
|
void DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo);
|
||||||
void xf86SetRootClip (ScreenPtr pScreen, int enable);
|
void xf86SetRootClip (ScreenPtr pScreen, int enable);
|
||||||
|
|
||||||
|
@ -80,6 +80,7 @@ extern int darwinFakeButtons;
|
||||||
extern int darwinFakeMouse2Mask;
|
extern int darwinFakeMouse2Mask;
|
||||||
extern int darwinFakeMouse3Mask;
|
extern int darwinFakeMouse3Mask;
|
||||||
extern int darwinAppKitModMask;
|
extern int darwinAppKitModMask;
|
||||||
|
extern int windowItemModMask;
|
||||||
extern char *darwinKeymapFile;
|
extern char *darwinKeymapFile;
|
||||||
extern int darwinSyncKeymap;
|
extern int darwinSyncKeymap;
|
||||||
extern unsigned int darwinDesiredWidth, darwinDesiredHeight;
|
extern unsigned int darwinDesiredWidth, darwinDesiredHeight;
|
||||||
|
|
|
@ -1045,39 +1045,49 @@ int DarwinModifierNXKeyToNXMask(int key) {
|
||||||
* DarwinModifierStringToNXMask
|
* DarwinModifierStringToNXMask
|
||||||
* Returns 0 if string is not a known modifier.
|
* Returns 0 if string is not a known modifier.
|
||||||
*/
|
*/
|
||||||
int DarwinModifierStringToNXMask(const char *str) {
|
int DarwinModifierStringToNXMask(const char *str, int separatelr) {
|
||||||
#ifdef NX_DEVICELSHIFTKEYMASK
|
#ifdef NX_DEVICELSHIFTKEYMASK
|
||||||
if (!strcasecmp(str, "shift")) return NX_DEVICELSHIFTKEYMASK | NX_DEVICERSHIFTKEYMASK;
|
if(separatelr) {
|
||||||
else if (!strcasecmp(str, "control")) return NX_DEVICELCTLKEYMASK | NX_DEVICERCTLKEYMASK;
|
if (!strcasecmp(str, "shift")) return NX_DEVICELSHIFTKEYMASK | NX_DEVICERSHIFTKEYMASK;
|
||||||
else if (!strcasecmp(str, "option")) return NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
|
if (!strcasecmp(str, "control")) return NX_DEVICELCTLKEYMASK | NX_DEVICERCTLKEYMASK;
|
||||||
else if (!strcasecmp(str, "command")) return NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
|
if (!strcasecmp(str, "option")) return NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
|
||||||
else if (!strcasecmp(str, "lshift")) return NX_DEVICELSHIFTKEYMASK;
|
if (!strcasecmp(str, "alt")) return NX_DEVICELALTKEYMASK | NX_DEVICERALTKEYMASK;
|
||||||
else if (!strcasecmp(str, "rshift")) return NX_DEVICERSHIFTKEYMASK;
|
if (!strcasecmp(str, "command")) return NX_DEVICELCMDKEYMASK | NX_DEVICERCMDKEYMASK;
|
||||||
else if (!strcasecmp(str, "lcontrol")) return NX_DEVICELCTLKEYMASK;
|
if (!strcasecmp(str, "lshift")) return NX_DEVICELSHIFTKEYMASK;
|
||||||
else if (!strcasecmp(str, "rcontrol")) return NX_DEVICERCTLKEYMASK;
|
if (!strcasecmp(str, "rshift")) return NX_DEVICERSHIFTKEYMASK;
|
||||||
else if (!strcasecmp(str, "loption")) return NX_DEVICELALTKEYMASK;
|
if (!strcasecmp(str, "lcontrol")) return NX_DEVICELCTLKEYMASK;
|
||||||
else if (!strcasecmp(str, "roption")) return NX_DEVICERALTKEYMASK;
|
if (!strcasecmp(str, "rcontrol")) return NX_DEVICERCTLKEYMASK;
|
||||||
else if (!strcasecmp(str, "lcommand")) return NX_DEVICELCMDKEYMASK;
|
if (!strcasecmp(str, "loption")) return NX_DEVICELALTKEYMASK;
|
||||||
else if (!strcasecmp(str, "rcommand")) return NX_DEVICERCMDKEYMASK;
|
if (!strcasecmp(str, "roption")) return NX_DEVICERALTKEYMASK;
|
||||||
#else
|
if (!strcasecmp(str, "lalt")) return NX_DEVICELALTKEYMASK;
|
||||||
if (!strcasecmp(str, "shift")) return NX_SHIFTMASK;
|
if (!strcasecmp(str, "ralt")) return NX_DEVICERALTKEYMASK;
|
||||||
else if (!strcasecmp(str, "control")) return NX_CONTROLMASK;
|
if (!strcasecmp(str, "lcommand")) return NX_DEVICELCMDKEYMASK;
|
||||||
else if (!strcasecmp(str, "option")) return NX_ALTERNATEMASK;
|
if (!strcasecmp(str, "rcommand")) return NX_DEVICERCMDKEYMASK;
|
||||||
else if (!strcasecmp(str, "command")) return NX_COMMANDMASK;
|
} else {
|
||||||
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
|
#endif
|
||||||
else if (!strcasecmp(str, "lock")) return NX_ALPHASHIFTMASK;
|
if (!strcasecmp(str, "shift")) return NX_SHIFTMASK;
|
||||||
else if (!strcasecmp(str, "fn")) return NX_SECONDARYFNMASK;
|
if (!strcasecmp(str, "control")) return NX_CONTROLMASK;
|
||||||
else if (!strcasecmp(str, "help")) return NX_HELPMASK;
|
if (!strcasecmp(str, "option")) return NX_ALTERNATEMASK;
|
||||||
else if (!strcasecmp(str, "numlock")) return NX_NUMERICPADMASK;
|
if (!strcasecmp(str, "alt")) return NX_ALTERNATEMASK;
|
||||||
else return 0;
|
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
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -57,7 +57,7 @@ int DarwinModifierNXKeycodeToNXKey(unsigned char keycode, int *outSide);
|
||||||
int DarwinModifierNXKeyToNXKeycode(int key, int side);
|
int DarwinModifierNXKeyToNXKeycode(int key, int side);
|
||||||
int DarwinModifierNXKeyToNXMask(int key);
|
int DarwinModifierNXKeyToNXMask(int key);
|
||||||
int DarwinModifierNXMaskToNXKey(int mask);
|
int DarwinModifierNXMaskToNXKey(int mask);
|
||||||
int DarwinModifierStringToNXMask(const char *string);
|
int DarwinModifierStringToNXMask(const char *string, int separatelr);
|
||||||
|
|
||||||
/* Provided for darwin.c */
|
/* Provided for darwin.c */
|
||||||
void DarwinKeyboardInit(DeviceIntPtr pDev);
|
void DarwinKeyboardInit(DeviceIntPtr pDev);
|
||||||
|
|
Loading…
Reference in New Issue