xserver: Branch 'xorg-server-1.5-apple' - 8 commits
Jeremy Huddleston
jeremyhu at kemper.freedesktop.org
Wed Aug 20 09:59:30 PDT 2008
exa/exa.c | 2
hw/xquartz/X11Application.h | 2
hw/xquartz/X11Application.m | 319 +++++-----
hw/xquartz/X11Controller.m | 13
hw/xquartz/bundle/Info.plist | 6
hw/xquartz/bundle/Resources/English.lproj/Localizable.strings |binary
hw/xquartz/darwin.c | 28
hw/xquartz/darwin.h | 4
hw/xquartz/darwinEvents.c | 134 +---
hw/xquartz/quartzKeyboard.c | 110 +--
hw/xquartz/quartzKeyboard.h | 2
11 files changed, 330 insertions(+), 290 deletions(-)
New commits:
commit f2ec79e4a159dec6481691e4dd615db01770dd7a
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Wed Aug 20 09:50:54 2008 -0700
XQuartz: Support windowItemModMask=0 or -1 to disable window shortcuts.
(cherry picked from commit 81187364e512606a6aebb95ab2967d9d420f57f2)
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 682a692..19a4d2b 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -139,7 +139,10 @@
name = [[list objectAtIndex:i] objectAtIndex:0];
shortcut = [[list objectAtIndex:i] objectAtIndex:1];
-
+
+ if(windowItemModMask == 0 || windowItemModMask == -1)
+ shortcut = @"";
+
item = (NSMenuItem *) [menu addItemWithTitle:name action:@selector
(item_selected:) keyEquivalent:shortcut];
commit fcfc05482a88696cb713c7a2ddfcf935ae8378a6
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.
(cherry picked from commit e4110861d307a55d9032cb83cf024ec1f294e8d7)
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 a5d4122..eeffd8c 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 9eb0f4e..86f273c 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
@@ -736,7 +738,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;
@@ -749,7 +751,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 c570dad..fd1c6d5 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 a7f9248..629d15d 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);
commit a28a2be52478a1557a363140f7bd70ececf144dc
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Wed Aug 20 09:58:48 2008 -0700
XQuartz: Just cleaned up formatting of event processing code... no "meat" changed...
(cherry picked from commit 745bc8ab387d6794f47d8b9dca33b4c81f6dd39c)
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 0d0fae4..a5d4122 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -77,7 +77,7 @@ struct message_struct {
static mach_port_t _port;
-static void send_nsevent (NSEventType type, NSEvent *e);
+static void send_nsevent(NSEvent *e);
/* Quartz mode initialization routine. This is often dynamically loaded
but is statically linked into this X server. */
@@ -192,113 +192,117 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
}
- (void) sendEvent:(NSEvent *)e {
- NSEventType type;
- OSX_BOOL for_appkit, for_x;
-
- type = [e type];
-
- /* By default pass down the responder chain and to X. */
- for_appkit = YES;
- for_x = YES;
+ NSEventType type;
+ OSX_BOOL for_appkit, for_x;
+
+ type = [e type];
+
+ /* By default pass down the responder chain and to X. */
+ for_appkit = YES;
+ for_x = YES;
- if(darwinAppKitModMask & [e modifierFlags]) {
- [super sendEvent:e];
- return;
+ switch ([e type]) {
+ case NSLeftMouseDown: case NSRightMouseDown: case NSOtherMouseDown:
+ case NSLeftMouseUp: case NSRightMouseUp: case NSOtherMouseUp:
+ if ([e window] != nil) {
+ /* Pointer event has an (AppKit) window. Probably something for the kit. */
+ for_x = NO;
+ if (_x_active) [self activateX:NO];
+ } else if ([self modalWindow] == nil) {
+ /* Must be an X window. Tell appkit it doesn't have focus. */
+ for_appkit = NO;
+
+ if ([self isActive]) {
+ [self deactivate];
+ if (!_x_active && quartzProcs->IsX11Window([e window],
+ [e windowNumber]))
+ [self activateX:YES];
+ }
+ }
+ break;
+
+ case NSKeyDown: case NSKeyUp:
+ if(darwinAppKitModMask & [e modifierFlags]) {
+ /* Override to force sending to Appkit */
+ for_x = NO;
+ } else if (_x_active) {
+ static int swallow_up;
+
+ /* No kit window is focused, so send it to X. */
+ for_appkit = NO;
+ if ([e type] == NSKeyDown) {
+ /* Before that though, see if there are any global
+ shortcuts bound to it. */
+
+ if (X11EnableKeyEquivalents
+ && [[self mainMenu] performKeyEquivalent:e]) {
+ swallow_up = [e keyCode];
+ for_x = NO;
+ } else if (!quartzEnableRootless
+ && ([e modifierFlags] & ALL_KEY_MASKS)
+ == (NSCommandKeyMask | NSAlternateKeyMask)
+ && ([e keyCode] == 0 /*a*/
+ || [e keyCode] == 53 /*Esc*/)) {
+ swallow_up = 0;
+ for_x = NO;
+#ifdef DARWIN_DDX_MISSING
+ DarwinSendDDXEvent(kXquartzToggleFullscreen, 0);
+#endif
+ }
+ } else {
+ /* If we saw a key equivalent on the down, don't pass
+ the up through to X. */
+
+ if (swallow_up != 0 && [e keyCode] == swallow_up) {
+ swallow_up = 0;
+ for_x = NO;
+ }
+ }
+ } else {
+ for_x = NO;
+ }
+ break;
+
+ case NSFlagsChanged:
+ /* Don't tell X11 about modifiers changing while it's not active */
+ if (!_x_active)
+ for_x = NO;
+ break;
+
+ case NSAppKitDefined:
+ switch ([e subtype]) {
+ case NSApplicationActivatedEventType:
+ for_x = NO;
+ if ([self modalWindow] == nil) {
+ for_appkit = NO;
+
+ /* FIXME: hack to avoid having to pass the event to appkit,
+ which would cause it to raise one of its windows. */
+ _appFlags._active = YES;
+
+ [self activateX:YES];
+ if ([e data2] & 0x10)
+ DarwinSendDDXEvent(kXquartzBringAllToFront, 0);
+ }
+ break;
+
+ case 18: /* ApplicationDidReactivate */
+ if (quartzHasRoot) for_appkit = NO;
+ break;
+
+ case NSApplicationDeactivatedEventType:
+ for_x = NO;
+ [self activateX:NO];
+ break;
+ }
+ break;
+
+ default: break; /* for gcc */
}
-
- switch (type) {
- case NSLeftMouseDown: case NSRightMouseDown: case NSOtherMouseDown:
- case NSLeftMouseUp: case NSRightMouseUp: case NSOtherMouseUp:
- if ([e window] != nil) {
- /* Pointer event has an (AppKit) window. Probably something for the kit. */
- for_x = NO;
- if (_x_active) [self activateX:NO];
- } else if ([self modalWindow] == nil) {
- /* Must be an X window. Tell appkit it doesn't have focus. */
- for_appkit = NO;
-
- if ([self isActive]) {
- [self deactivate];
- if (!_x_active && quartzProcs->IsX11Window([e window],
- [e windowNumber]))
- [self activateX:YES];
- }
- }
- break;
-
- case NSKeyDown: case NSKeyUp:
- if (_x_active) {
- static int swallow_up;
-
- /* No kit window is focused, so send it to X. */
- for_appkit = NO;
- if (type == NSKeyDown) {
- /* Before that though, see if there are any global
- shortcuts bound to it. */
-
- if (X11EnableKeyEquivalents
- && [[self mainMenu] performKeyEquivalent:e]) {
- swallow_up = [e keyCode];
- for_x = NO;
- } else if (!quartzEnableRootless
- && ([e modifierFlags] & ALL_KEY_MASKS)
- == (NSCommandKeyMask | NSAlternateKeyMask)
- && ([e keyCode] == 0 /*a*/
- || [e keyCode] == 53 /*Esc*/)) {
- swallow_up = 0;
- for_x = NO;
- }
- } else {
- /* If we saw a key equivalent on the down, don't pass
- the up through to X. */
-
- if (swallow_up != 0 && [e keyCode] == swallow_up) {
- swallow_up = 0;
- for_x = NO;
- }
- }
- } else for_x = NO;
- break;
-
- case NSFlagsChanged:
- /* For the l33t X users who remap modifier keys to normal keysyms. */
- if (!_x_active) for_x = NO;
- break;
-
- case NSAppKitDefined:
- switch ([e subtype]) {
- case NSApplicationActivatedEventType:
- for_x = NO;
- if ([self modalWindow] == nil) {
- for_appkit = NO;
-
- /* FIXME: hack to avoid having to pass the event to appkit,
- which would cause it to raise one of its windows. */
- _appFlags._active = YES;
-
- [self activateX:YES];
- if ([e data2] & 0x10)
- DarwinSendDDXEvent(kXquartzBringAllToFront, 0);
- }
- break;
-
- case 18: /* ApplicationDidReactivate */
- if (quartzHasRoot) for_appkit = NO;
- break;
-
- case NSApplicationDeactivatedEventType:
- for_x = NO;
- [self activateX:NO];
- break;
- }
- break;
-
- default: break; /* for gcc */
- }
-
- if (for_appkit) [super sendEvent:e];
-
- if (for_x) send_nsevent (type, e);
+
+ if (for_appkit) [super sendEvent:e];
+
+ if (for_x) send_nsevent(e);
}
- (void) set_window_menu:(NSArray *)list {
@@ -843,7 +847,7 @@ convert_flags (unsigned int nsflags) {
extern int darwin_modifier_flags; // darwinEvents.c
-static void send_nsevent (NSEventType type, NSEvent *e) {
+static void send_nsevent(NSEvent *e) {
NSRect screen;
NSPoint location;
NSWindow *window;
@@ -859,7 +863,7 @@ static void send_nsevent (NSEventType type, NSEvent *e) {
NSRect frame = [window frame];
pointer_x = location.x + frame.origin.x;
pointer_y = (((screen.origin.y + screen.size.height)
- - location.y) - frame.origin.y);
+ - location.y) - frame.origin.y);
} else {
pointer_x = location.x;
pointer_y = (screen.origin.y + screen.size.height) - location.y;
@@ -875,8 +879,8 @@ static void send_nsevent (NSEventType type, NSEvent *e) {
*/
if(darwin_modifier_flags != [e modifierFlags])
DarwinUpdateModKeys([e modifierFlags]);
-
- switch (type) {
+
+ switch ([e 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;
@@ -887,8 +891,8 @@ static void send_nsevent (NSEventType type, NSEvent *e) {
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:
+
+ check_subtype:
if ([e subtype] != NSTabletPointEventSubtype)
goto handle_mouse;
// fall through to get tablet data
@@ -897,27 +901,25 @@ check_subtype:
pressure = [e pressure];
tilt_x = [e tilt].x;
tilt_y = [e tilt].y;
- goto handle_mouse;
// fall through to normal mouse handling
-
-handle_mouse:
- DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y,
- pressure, tilt_x, tilt_y);
- break;
+ handle_mouse:
+ DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y,
+ pressure, tilt_x, tilt_y);
+ break;
case NSTabletProximity:
DarwinSendProximityEvents([e isEnteringProximity]?ProximityIn:ProximityOut,
- pointer_x, pointer_y);
- break;
+ pointer_x, pointer_y);
+ break;
case NSScrollWheel:
DarwinSendScrollEvents([e deltaX], [e deltaY], pointer_x, pointer_y,
- pressure, tilt_x, tilt_y);
- break;
+ pressure, tilt_x, tilt_y);
+ break;
case NSKeyDown: case NSKeyUp:
- DarwinSendKeyboardEvents((type == NSKeyDown)?KeyPress:KeyRelease, [e keyCode]);
- break;
+ DarwinSendKeyboardEvents(([e type] == NSKeyDown) ? KeyPress : KeyRelease, [e keyCode]);
+ break;
default: break; /* for gcc */
}
commit 2da32894dff8340f6ca7c980277fca7ec835a193
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Tue Aug 19 02:02:11 2008 -0700
XQuartz: Added appkit_modifiers defaults option which users can set to 'rcommand' to get access to the input menu with right command
(cherry picked from commit 02af74d7a5a7225f408915254c40856159dc7f19)
diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index 8e7fed2..22a8728 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -91,6 +91,7 @@ extern int quartzHasRoot, quartzEnableRootless;
#define PREFS_NO_QUIT_ALERT "no_quit_alert"
#define PREFS_FAKE_BUTTON2 "fake_button2"
#define PREFS_FAKE_BUTTON3 "fake_button3"
+#define PREFS_APPKIT_MODIFIERS "appkit_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 5ba22db..0d0fae4 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -200,6 +200,11 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
/* By default pass down the responder chain and to X. */
for_appkit = YES;
for_x = YES;
+
+ if(darwinAppKitModMask & [e modifierFlags]) {
+ [super sendEvent:e];
+ return;
+ }
switch (type) {
case NSLeftMouseDown: case NSRightMouseDown: case NSOtherMouseDown:
@@ -617,14 +622,17 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
darwinFakeButtons = [self prefs_get_boolean:@PREFS_FAKEBUTTONS
default:darwinFakeButtons];
if (darwinFakeButtons) {
- const char *fake2, *fake3;
-
- 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);
+ const char *fake2, *fake3;
+
+ 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);
}
+
+ tem = [self prefs_get_string:@PREFS_APPKIT_MODIFIERS default:NULL];
+ if (tem != NULL) darwinAppKitModMask = DarwinParseModifierList(tem);
X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
default:X11EnableKeyEquivalents];
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 41afd91..9eb0f4e 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -114,6 +114,9 @@ int darwinFakeMouse2Mask = NX_ALTERNATEMASK;
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;
+
// devices
DeviceIntPtr darwinPointer = NULL;
DeviceIntPtr darwinTablet = NULL;
diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h
index bdf0046..c570dad 100644
--- a/hw/xquartz/darwin.h
+++ b/hw/xquartz/darwin.h
@@ -79,6 +79,7 @@ extern int darwinMouseAccelChange;
extern int darwinFakeButtons;
extern int darwinFakeMouse2Mask;
extern int darwinFakeMouse3Mask;
+extern int darwinAppKitModMask;
extern char *darwinKeymapFile;
extern int darwinSyncKeymap;
extern unsigned int darwinDesiredWidth, darwinDesiredHeight;
commit ae9c1b3cfb3874b4d1251681c24bda91c398bcab
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Wed Aug 20 09:56:06 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})
(cherry picked from commit 8fb6a1cf44c35a20dfb0c05c9824f94898f88da7)
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 5a1f0e8..5ba22db 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -833,6 +833,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;
@@ -859,26 +861,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
@@ -901,9 +911,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 4f35533..41afd91 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 XORG_RELEASE "?"
#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 0bfb50b..a7f9248 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;
@@ -1178,10 +1179,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: currentKeyLayoutRef=%p, chr_data=%p\n", currentKeyLayoutRef, chr_data);
+ ErrorF("X11.app: Debug Info: keyboard_type=%u, currentKeyLayoutRef=%p, currentKeyLayoutDataRef=%p, chr_data=%p\n",
+ (unsigned)keyboard_type, currentKeyLayoutRef, currentKeyLayoutDataRef, chr_data);
KLGetCurrentKeyboardLayout (&key_layout);
KLGetKeyboardLayoutProperty (key_layout, kKLuchrData, &chr_data);
@@ -1192,7 +1194,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 7d9d864461858b25c5eb5858fdf4b53771795f11
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Thu Aug 14 09:34:12 2008 -0700
XQuartz: Updated bundle version to 2.3.1
(cherry picked from commit eedecba0b882bb07931e8d9168589f5be7a08a69)
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>
commit 14646ad8cd1dc35559122944f448f8269a4245d4
Merge: 79e3947... c662381...
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Wed Aug 20 09:54:08 2008 -0700
Merge branch 'server-1.5-branch' into xorg-server-1.5-apple
commit c662381a14d2c69cc8b4aa1c66763cbaf6addc5d
Author: Maarten Maathuis <madman2003 at gmail.com>
Date: Sun Aug 17 19:57:02 2008 +0200
exa: fix assert logic thinko from 361a9eb953aaa38f8ebc057185de29e50f9eef26
- I guess failing PrepareAccess is rare, since this a 3 year old bug.
diff --git a/exa/exa.c b/exa/exa.c
index 4bd3d81..100a1ec 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -499,7 +499,7 @@ ExaDoPrepareAccess(DrawablePtr pDrawable, int index)
if (!(*pExaScr->info->PrepareAccess) (pPixmap, index)) {
ExaPixmapPriv (pPixmap);
- if (pExaPixmap->score != EXA_PIXMAP_SCORE_PINNED)
+ if (pExaPixmap->score == EXA_PIXMAP_SCORE_PINNED)
FatalError("Driver failed PrepareAccess on a pinned pixmap\n");
exaMoveOutPixmap (pPixmap);
}
More information about the xorg-commit
mailing list