XQuartz: Added window_item_modifiers defaults item (and option to localization) to change the modifier keys used for the windows menu.
(cherry picked from commite4110861d3
) (cherry picked from commitfcfc05482a
)
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_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"
|
||||
|
|
|
@ -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];
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
Binary file not shown.
|
@ -103,7 +103,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;
|
||||
|
@ -113,7 +113,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;
|
||||
|
@ -491,8 +494,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;
|
||||
|
||||
|
@ -504,7 +506,7 @@ int DarwinParseModifierList(
|
|||
|
||||
while (p) {
|
||||
modifier = strsep(&p, " ,+&|/"); // allow lots of separators
|
||||
nxkey = DarwinModifierStringToNXMask(modifier);
|
||||
nxkey = DarwinModifierStringToNXMask(modifier, separatelr);
|
||||
if(nxkey)
|
||||
result |= nxkey;
|
||||
else
|
||||
|
@ -725,7 +727,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;
|
||||
|
@ -738,7 +740,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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
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, "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
|
||||
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 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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user