XQuartz: Use new Xplugin API to determine if a keypress event corresponds to an OS-X hotkey that we should dispatch to Appkit.
(cherry picked from commit e7658e745f8a3eaf5cec9f54a8a1b7e5a7708e09)
This commit is contained in:
		
							parent
							
								
									7930ea9116
								
							
						
					
					
						commit
						3350770bd6
					
				| 
						 | 
					@ -47,6 +47,8 @@
 | 
				
			||||||
#include <mach/mach.h>
 | 
					#include <mach/mach.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <Xplugin.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DEFAULTS_FILE "/usr/X11/lib/X11/xserver/Xquartz.plist"
 | 
					#define DEFAULTS_FILE "/usr/X11/lib/X11/xserver/Xquartz.plist"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef XSERVER_VERSION
 | 
					#ifndef XSERVER_VERSION
 | 
				
			||||||
| 
						 | 
					@ -222,34 +224,40 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        case NSKeyDown: case NSKeyUp:
 | 
					        case NSKeyDown: case NSKeyUp:
 | 
				
			||||||
            if(darwinAppKitModMask & [e modifierFlags]) {
 | 
					            
 | 
				
			||||||
                /* Override to force sending to Appkit */
 | 
					            if(_x_active) {
 | 
				
			||||||
                for_x = NO;
 | 
					 | 
				
			||||||
            } else if (_x_active) {
 | 
					 | 
				
			||||||
                static int swallow_up;
 | 
					                static int swallow_up;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                /* No kit window is focused, so send it to X. */
 | 
					                if([e type] == NSKeyDown) {
 | 
				
			||||||
                for_appkit = NO;
 | 
					 | 
				
			||||||
                if ([e type] == NSKeyDown) {
 | 
					 | 
				
			||||||
                    /* Before that though, see if there are any global
 | 
					                    /* Before that though, see if there are any global
 | 
				
			||||||
                     shortcuts bound to it. */
 | 
					                     shortcuts bound to it. */
 | 
				
			||||||
                    
 | 
					
 | 
				
			||||||
                    if (X11EnableKeyEquivalents
 | 
					                    if(darwinAppKitModMask & [e modifierFlags]) {
 | 
				
			||||||
                        && [[self mainMenu] performKeyEquivalent:e]) {
 | 
					                        /* Override to force sending to Appkit */
 | 
				
			||||||
                        swallow_up = [e keyCode];
 | 
					                        swallow_up = [e keyCode];
 | 
				
			||||||
                        for_x = NO;
 | 
					                        for_x = NO;
 | 
				
			||||||
                    } else if (!quartzEnableRootless
 | 
					#if 0
 | 
				
			||||||
                               && ([e modifierFlags] & ALL_KEY_MASKS)
 | 
					                    } else if(!quartzEnableRootless
 | 
				
			||||||
                               == (NSCommandKeyMask | NSAlternateKeyMask)
 | 
					                              && ([e modifierFlags] & ALL_KEY_MASKS) == (NSCommandKeyMask | NSAlternateKeyMask)
 | 
				
			||||||
                               && ([e keyCode] == 0 /*a*/
 | 
					                              && ([e keyCode] == 0 /*a*/ || [e keyCode] == 53 /*Esc*/)) {
 | 
				
			||||||
                                   || [e keyCode] == 53 /*Esc*/)) {
 | 
					                        swallow_up = [e keyCode];
 | 
				
			||||||
                        swallow_up = 0;
 | 
					 | 
				
			||||||
                        for_x = NO;
 | 
					                        for_x = NO;
 | 
				
			||||||
#ifdef DARWIN_DDX_MISSING
 | 
					 | 
				
			||||||
                        DarwinSendDDXEvent(kXquartzToggleFullscreen, 0);
 | 
					                        DarwinSendDDXEvent(kXquartzToggleFullscreen, 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					                    } else if(X11EnableKeyEquivalents &&
 | 
				
			||||||
 | 
					#if XPLUGIN_VERSION >= 4
 | 
				
			||||||
 | 
					                              xp_is_symbolic_hotkey_event([e eventRef])) {
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					                              [[self mainMenu] performKeyEquivalent:e]) {
 | 
				
			||||||
 | 
					                        for_appkit = NO;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					                        swallow_up = [e keyCode];
 | 
				
			||||||
 | 
					                        for_x = NO;
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        /* No kit window is focused, so send it to X. */
 | 
				
			||||||
 | 
					                        for_appkit = NO;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                } else {
 | 
					                } else { /* KeyUp */
 | 
				
			||||||
                    /* If we saw a key equivalent on the down, don't pass
 | 
					                    /* If we saw a key equivalent on the down, don't pass
 | 
				
			||||||
                     the up through to X. */
 | 
					                     the up through to X. */
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
| 
						 | 
					@ -258,7 +266,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
 | 
				
			||||||
                        for_x = NO;
 | 
					                        for_x = NO;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else { /* !_x_active */
 | 
				
			||||||
                for_x = NO;
 | 
					                for_x = NO;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue