diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.h b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h new file mode 100644 index 0000000000000000000000000000000000000000..b8fc4a631db777ea2f9ca9103b4299b805ca9069 --- /dev/null +++ b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h @@ -0,0 +1,47 @@ +// +// NSUserDefaults+XQuartzDefaults.h +// XQuartz +// +// Created by Jeremy Huddleston Sequoia on 2021.02.19. +// Copyright (c) 2021 Apple Inc. All rights reserved. +// + +#import <Foundation/Foundation.h> + +extern NSString * const XQuartzPrefKeyAppsMenu; +extern NSString * const XQuartzPrefKeyFakeButtons; +extern NSString * const XQuartzPrefKeyFakeButton2; +extern NSString * const XQuartzPrefKeyFakeButton3; +extern NSString * const XQuartzPrefKeyKeyEquivs; +extern NSString * const XQuartzPrefKeyFullscreenHotkeys; +extern NSString * const XQuartzPrefKeyFullscreenMenu; +extern NSString * const XQuartzPrefKeySyncKeymap; +extern NSString * const XQuartzPrefKeyDepth; +extern NSString * const XQuartzPrefKeyNoAuth; +extern NSString * const XQuartzPrefKeyNoTCP; +extern NSString * const XQuartzPrefKeyDoneXinitCheck; +extern NSString * const XQuartzPrefKeyNoQuitAlert; +extern NSString * const XQuartzPrefKeyNoRANDRAlert; +extern NSString * const XQuartzPrefKeyOptionSendsAlt; +extern NSString * const XQuartzPrefKeyAppKitModifiers; +extern NSString * const XQuartzPrefKeyWindowItemModifiers; +extern NSString * const XQuartzPrefKeyRootless; +extern NSString * const XQuartzPrefKeyRENDERExtension; +extern NSString * const XQuartzPrefKeyTESTExtension; +extern NSString * const XQuartzPrefKeyLoginShell; +extern NSString * const XQuartzPrefKeyClickThrough; +extern NSString * const XQuartzPrefKeyFocusFollowsMouse; +extern NSString * const XQuartzPrefKeyFocusOnNewWindow; + +extern NSString * const XQuartzPrefKeyScrollInDeviceDirection; +extern NSString * const XQuartzPrefKeySyncPasteboard; +extern NSString * const XQuartzPrefKeySyncPasteboardToClipboard; +extern NSString * const XQuartzPrefKeySyncPasteboardToPrimary; +extern NSString * const XQuartzPrefKeySyncClipboardToPasteBoard; +extern NSString * const XQuartzPrefKeySyncPrimaryOnSelect; + +@interface NSUserDefaults (XQuartzDefaults) + ++ (NSUserDefaults *)xquartzDefaults; + +@end diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.m b/hw/xquartz/NSUserDefaults+XQuartzDefaults.m new file mode 100644 index 0000000000000000000000000000000000000000..b73003baef21cd3087fa126d1b6d7473f71e443c --- /dev/null +++ b/hw/xquartz/NSUserDefaults+XQuartzDefaults.m @@ -0,0 +1,111 @@ +// +// NSUserDefaults+XQuartzDefaults.m +// XQuartz +// +// Created by Jeremy Huddleston Sequoia on 2021.02.19. +// Copyright (c) 2021 Apple Inc. All rights reserved. +// + +#import "NSUserDefaults+XQuartzDefaults.h" +#import <dispatch/dispatch.h> + +NSString * const XQuartzPrefKeyAppsMenu = @"apps_menu"; +NSString * const XQuartzPrefKeyFakeButtons = @"enable_fake_buttons"; +NSString * const XQuartzPrefKeyFakeButton2 = @"fake_button2"; +NSString * const XQuartzPrefKeyFakeButton3 = @"fake_button3"; +NSString * const XQuartzPrefKeyKeyEquivs = @"enable_key_equivalents"; +NSString * const XQuartzPrefKeyFullscreenHotkeys = @"fullscreen_hotkeys"; +NSString * const XQuartzPrefKeyFullscreenMenu = @"fullscreen_menu"; +NSString * const XQuartzPrefKeySyncKeymap = @"sync_keymap"; +NSString * const XQuartzPrefKeyDepth = @"depth"; +NSString * const XQuartzPrefKeyNoAuth = @"no_auth"; +NSString * const XQuartzPrefKeyNoTCP = @"nolisten_tcp"; +NSString * const XQuartzPrefKeyDoneXinitCheck = @"done_xinit_check"; +NSString * const XQuartzPrefKeyNoQuitAlert = @"no_quit_alert"; +NSString * const XQuartzPrefKeyNoRANDRAlert = @"no_randr_alert"; +NSString * const XQuartzPrefKeyOptionSendsAlt = @"option_sends_alt"; +NSString * const XQuartzPrefKeyAppKitModifiers = @"appkit_modifiers"; +NSString * const XQuartzPrefKeyWindowItemModifiers = @"window_item_modifiers"; +NSString * const XQuartzPrefKeyRootless = @"rootless"; +NSString * const XQuartzPrefKeyRENDERExtension = @"enable_render_extension"; +NSString * const XQuartzPrefKeyTESTExtension = @"enable_test_extensions"; +NSString * const XQuartzPrefKeyLoginShell = @"login_shell"; +NSString * const XQuartzPrefKeyUpdateFeed = @"update_feed"; +NSString * const XQuartzPrefKeyClickThrough = @"wm_click_through"; +NSString * const XQuartzPrefKeyFocusFollowsMouse = @"wm_ffm"; +NSString * const XQuartzPrefKeyFocusOnNewWindow = @"wm_focus_on_new_window"; + +NSString * const XQuartzPrefKeyScrollInDeviceDirection = @"scroll_in_device_direction"; +NSString * const XQuartzPrefKeySyncPasteboard = @"sync_pasteboard"; +NSString * const XQuartzPrefKeySyncPasteboardToClipboard = @"sync_pasteboard_to_clipboard"; +NSString * const XQuartzPrefKeySyncPasteboardToPrimary = @"sync_pasteboard_to_primary"; +NSString * const XQuartzPrefKeySyncClipboardToPasteBoard = @"sync_clipboard_to_pasteboard"; +NSString * const XQuartzPrefKeySyncPrimaryOnSelect = @"sync_primary_on_select"; + +@implementation NSUserDefaults (XQuartzDefaults) + ++ (NSUserDefaults *)xquartzDefaults +{ + static dispatch_once_t once; + static NSUserDefaults *defaults; + + dispatch_once(&once, ^{ + NSString * const defaultsDomain = @(BUNDLE_ID_PREFIX ".X11"); + NSString * const defaultDefaultsDomain = NSBundle.mainBundle.bundleIdentifier; + if ([defaultsDomain isEqualToString:defaultDefaultsDomain]) { + defaults = [NSUserDefaults.standardUserDefaults retain]; + } else { + defaults = [[[NSUserDefaults alloc] initWithSuiteName:defaultsDomain] retain]; + } + + NSArray * const defaultAppsMenu = @[ + @[NSLocalizedString(@"Terminal", @"Terminal"), @"xterm", @"n"], + ]; + + NSString *defaultWindowItemModifiers = @"command"; + NSString * const defaultWindowItemModifiersLocalized = NSLocalizedString(@"window item modifiers", @"window item modifiers"); + if (![defaultWindowItemModifiersLocalized isEqualToString:@"window item modifiers"]) { + defaultWindowItemModifiers = defaultWindowItemModifiersLocalized; + } + + NSDictionary<NSString *, id> * const defaultDefaultsDict = @{ + XQuartzPrefKeyAppsMenu : defaultAppsMenu, + XQuartzPrefKeyFakeButtons : @(NO), + // XQuartzPrefKeyFakeButton2 nil default + // XQuartzPrefKeyFakeButton3 nil default + XQuartzPrefKeyKeyEquivs : @(YES), + XQuartzPrefKeyFullscreenHotkeys : @(NO), + XQuartzPrefKeyFullscreenMenu : @(NO), + XQuartzPrefKeySyncKeymap : @(NO), + XQuartzPrefKeyDepth : @(-1), + XQuartzPrefKeyNoAuth : @(NO), + XQuartzPrefKeyNoTCP : @(NO), + XQuartzPrefKeyDoneXinitCheck : @(NO), + XQuartzPrefKeyNoQuitAlert : @(NO), + XQuartzPrefKeyNoRANDRAlert : @(NO), + XQuartzPrefKeyOptionSendsAlt : @(NO), + // XQuartzPrefKeyAppKitModifiers nil default + XQuartzPrefKeyWindowItemModifiers : defaultWindowItemModifiers, + XQuartzPrefKeyRootless : @(YES), + XQuartzPrefKeyRENDERExtension : @(YES), + XQuartzPrefKeyTESTExtension : @(NO), + XQuartzPrefKeyLoginShell : @"/bin/sh", + XQuartzPrefKeyClickThrough : @(NO), + XQuartzPrefKeyFocusFollowsMouse : @(NO), + XQuartzPrefKeyFocusOnNewWindow : @(YES), + + XQuartzPrefKeyScrollInDeviceDirection : @(NO), + XQuartzPrefKeySyncPasteboard : @(YES), + XQuartzPrefKeySyncPasteboardToClipboard : @(YES), + XQuartzPrefKeySyncPasteboardToPrimary : @(YES), + XQuartzPrefKeySyncClipboardToPasteBoard : @(YES), + XQuartzPrefKeySyncPrimaryOnSelect : @(NO), + }; + + [defaults registerDefaults:defaultDefaultsDict]; + }); + + return defaults; +} + +@end diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h index d3ff4ebd0dad31dbcfaf201e499449c596909420..1ef98bee34a7319cb0ecbabc31b393c9a463c4d5 100644 --- a/hw/xquartz/X11Application.h +++ b/hw/xquartz/X11Application.h @@ -42,20 +42,6 @@ @property (nonatomic, readwrite, strong) X11Controller *controller; @property (nonatomic, readonly, assign) OSX_BOOL x_active; -- (CFPropertyListRef)prefs_get_copy:(NSString *)key CF_RETURNS_RETAINED; -- (int)prefs_get_integer:(NSString *)key default:(int)def; -- (const char *)prefs_get_string:(NSString *)key default:(const char *)def; -- (float)prefs_get_float:(NSString *)key default:(float)def; -- (int)prefs_get_boolean:(NSString *)key default:(int)def; -- (NSURL *)prefs_copy_url:(NSString *)key default:(NSURL *)def - NS_RETURNS_RETAINED; -- (NSArray *)prefs_get_array:(NSString *)key; -- (void)prefs_set_integer:(NSString *)key value:(int)value; -- (void)prefs_set_float:(NSString *)key value:(float)value; -- (void)prefs_set_boolean:(NSString *)key value:(int)value; -- (void)prefs_set_array:(NSString *)key value:(NSArray *)value; -- (void)prefs_set_string:(NSString *)key value:(NSString *)value; -- (void)prefs_synchronize; @end extern X11Application * X11App; @@ -84,40 +70,6 @@ X11ApplicationCanEnterRandR(void); void X11ApplicationMain(int argc, char **argv, char **envp); -#define PREFS_APPSMENU "apps_menu" -#define PREFS_FAKEBUTTONS "enable_fake_buttons" -#define PREFS_KEYEQUIVS "enable_key_equivalents" -#define PREFS_FULLSCREEN_HOTKEYS "fullscreen_hotkeys" -#define PREFS_FULLSCREEN_MENU "fullscreen_menu" -#define PREFS_SYNC_KEYMAP "sync_keymap" -#define PREFS_DEPTH "depth" -#define PREFS_NO_AUTH "no_auth" -#define PREFS_NO_TCP "nolisten_tcp" -#define PREFS_DONE_XINIT_CHECK "done_xinit_check" -#define PREFS_NO_QUIT_ALERT "no_quit_alert" -#define PREFS_NO_RANDR_ALERT "no_randr_alert" -#define PREFS_OPTION_SENDS_ALT "option_sends_alt" -#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_RENDER_EXTENSION "enable_render_extension" -#define PREFS_TEST_EXTENSIONS "enable_test_extensions" -#define PREFS_XP_OPTIONS "xp_options" -#define PREFS_LOGIN_SHELL "login_shell" -#define PREFS_UPDATE_FEED "update_feed" -#define PREFS_CLICK_THROUGH "wm_click_through" -#define PREFS_FFM "wm_ffm" -#define PREFS_FOCUS_ON_NEW_WINDOW "wm_focus_on_new_window" - -#define PREFS_SCROLL_IN_DEV_DIRECTION "scroll_in_device_direction" extern Bool XQuartzScrollInDeviceDirection; -#define PREFS_SYNC_PB "sync_pasteboard" -#define PREFS_SYNC_PB_TO_CLIPBOARD "sync_pasteboard_to_clipboard" -#define PREFS_SYNC_PB_TO_PRIMARY "sync_pasteboard_to_primary" -#define PREFS_SYNC_CLIPBOARD_TO_PB "sync_clipboard_to_pasteboard" -#define PREFS_SYNC_PRIMARY_ON_SELECT "sync_primary_on_select" - #endif /* X11APPLICATION_H */ diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index a100f5a6f014862d75144259521bc4e9638546e0..31df8c9d4ec818b97d2a0673b233bcd835bb8093 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -35,6 +35,7 @@ #endif #import "X11Application.h" +#import "NSUserDefaults+XQuartzDefaults.h" #include "darwin.h" #include "quartz.h" @@ -55,8 +56,6 @@ extern int xpbproxy_run(void); -#define DEFAULTS_FILE X11LIBDIR "/X11/xserver/Xquartz.plist" - #ifndef XSERVER_VERSION #define XSERVER_VERSION "?" #endif @@ -101,8 +100,6 @@ static BOOL bgMouseLocationUpdated = FALSE; X11Application *X11App; -CFStringRef app_prefs_domain_cfstr = NULL; - #define ALL_KEY_MASKS (NSShiftKeyMask | NSControlKeyMask | \ NSAlternateKeyMask | NSCommandKeyMask) @@ -524,404 +521,50 @@ QuartzModeBundleInit(void); (void)[self.controller application:self openFile:cmd]; } -/* user preferences */ - -/* Note that these functions only work for arrays whose elements - can be toll-free-bridged between NS and CF worlds. */ - -static const void * -cfretain(CFAllocatorRef a, const void *b) -{ - return CFRetain(b); -} - -static void -cfrelease(CFAllocatorRef a, const void *b) -{ - CFRelease(b); -} - -CF_RETURNS_RETAINED -static CFMutableArrayRef -nsarray_to_cfarray(NSArray *in) -{ - CFMutableArrayRef out; - CFArrayCallBacks cb; - NSObject *ns; - const CFTypeRef *cf; - int i, count; - - memset(&cb, 0, sizeof(cb)); - cb.version = 0; - cb.retain = cfretain; - cb.release = cfrelease; - - count = [in count]; - out = CFArrayCreateMutable(NULL, count, &cb); - - for (i = 0; i < count; i++) { - ns = [in objectAtIndex:i]; - - if ([ns isKindOfClass:[NSArray class]]) - cf = (CFTypeRef)nsarray_to_cfarray((NSArray *)ns); - else - cf = CFRetain((CFTypeRef)ns); - - CFArrayAppendValue(out, cf); - CFRelease(cf); - } - - return out; -} -static NSMutableArray * -cfarray_to_nsarray(CFArrayRef in) +- (void) read_defaults { - NSMutableArray *out; - const CFTypeRef *cf; - NSObject *ns; - int i, count; - - count = CFArrayGetCount(in); - out = [[NSMutableArray alloc] initWithCapacity:count]; - - for (i = 0; i < count; i++) { - cf = CFArrayGetValueAtIndex(in, i); + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; - if (CFGetTypeID(cf) == CFArrayGetTypeID()) - ns = cfarray_to_nsarray((CFArrayRef)cf); - else - ns = [(id) cf retain]; - - [out addObject:ns]; - [ns release]; - } + XQuartzRootlessDefault = [defaults boolForKey:XQuartzPrefKeyRootless]; + XQuartzFullscreenMenu = [defaults boolForKey:XQuartzPrefKeyFullscreenMenu]; + XQuartzFullscreenDisableHotkeys = ![defaults boolForKey:XQuartzPrefKeyFullscreenHotkeys]; - return out; -} + darwinFakeButtons = [defaults boolForKey:XQuartzPrefKeyFakeButtons]; + XQuartzOptionSendsAlt = [defaults boolForKey:XQuartzPrefKeyOptionSendsAlt]; -- (CFPropertyListRef) prefs_get_copy:(NSString *)key -{ - CFPropertyListRef value; - - value = CFPreferencesCopyAppValue((CFStringRef)key, - app_prefs_domain_cfstr); - - if (value == NULL) { - static CFDictionaryRef defaults; - - if (defaults == NULL) { - CFStringRef error = NULL; - CFDataRef data; - CFURLRef url; - SInt32 error_code; - - url = (CFURLCreateFromFileSystemRepresentation - (NULL, (unsigned char *)DEFAULTS_FILE, - strlen(DEFAULTS_FILE), false)); - if (CFURLCreateDataAndPropertiesFromResource(NULL, url, &data, - NULL, NULL, - &error_code)) { - defaults = (CFPropertyListCreateFromXMLData - (NULL, data, - kCFPropertyListMutableContainersAndLeaves, - &error)); - if (error != NULL) CFRelease(error); - CFRelease(data); - } - CFRelease(url); - - if (defaults != NULL) { - NSMutableArray *apps, *elt; - int count, i; - NSString *name, *nname; - - /* Localize the names in the default apps menu. */ - - apps = - [(NSDictionary *) defaults objectForKey:@PREFS_APPSMENU]; - if (apps != nil) { - count = [apps count]; - for (i = 0; i < count; i++) { - elt = [apps objectAtIndex:i]; - if (elt != nil && - [elt isKindOfClass:[NSArray class]]) { - name = [elt objectAtIndex:0]; - if (name != nil) { - nname = NSLocalizedString(name, nil); - if (nname != nil && nname != name) - [elt replaceObjectAtIndex:0 withObject: - nname]; - } - } - } - } - } + if (darwinFakeButtons) { + NSString * const fake2 = [defaults stringForKey:XQuartzPrefKeyFakeButton2]; + if (fake2) { + darwinFakeMouse2Mask = DarwinParseModifierList(fake2.UTF8String, TRUE); } - if (defaults != NULL) value = CFDictionaryGetValue(defaults, key); - if (value != NULL) CFRetain(value); - } - - return value; -} - -- (int) prefs_get_integer:(NSString *)key default:(int)def -{ - CFPropertyListRef value; - int ret; - - value = [self prefs_get_copy:key]; - - if (value != NULL && CFGetTypeID(value) == CFNumberGetTypeID()) - CFNumberGetValue(value, kCFNumberIntType, &ret); - else if (value != NULL && CFGetTypeID(value) == CFStringGetTypeID()) - ret = CFStringGetIntValue(value); - else - ret = def; - - if (value != NULL) CFRelease(value); - - return ret; -} - -- (const char *) prefs_get_string:(NSString *)key default:(const char *)def -{ - CFPropertyListRef value; - const char *ret = NULL; - - value = [self prefs_get_copy:key]; - - if (value != NULL && CFGetTypeID(value) == CFStringGetTypeID()) { - NSString *s = (NSString *)value; - - ret = [s UTF8String]; - } - - if (value != NULL) CFRelease(value); - - return ret != NULL ? ret : def; -} - -- (NSURL *) prefs_copy_url:(NSString *)key default:(NSURL *)def -{ - CFPropertyListRef value; - NSURL *ret = NULL; - - value = [self prefs_get_copy:key]; - - if (value != NULL && CFGetTypeID(value) == CFStringGetTypeID()) { - NSString *s = (NSString *)value; - - ret = [NSURL URLWithString:s]; - [ret retain]; - } - - if (value != NULL) CFRelease(value); - - return ret != NULL ? ret : def; -} - -- (float) prefs_get_float:(NSString *)key default:(float)def -{ - CFPropertyListRef value; - float ret = def; - - value = [self prefs_get_copy:key]; - - if (value != NULL - && CFGetTypeID(value) == CFNumberGetTypeID() - && CFNumberIsFloatType(value)) - CFNumberGetValue(value, kCFNumberFloatType, &ret); - else if (value != NULL && CFGetTypeID(value) == CFStringGetTypeID()) - ret = CFStringGetDoubleValue(value); - - if (value != NULL) CFRelease(value); - - return ret; -} - -- (int) prefs_get_boolean:(NSString *)key default:(int)def -{ - CFPropertyListRef value; - int ret = def; - - value = [self prefs_get_copy:key]; - - if (value != NULL) { - if (CFGetTypeID(value) == CFNumberGetTypeID()) - CFNumberGetValue(value, kCFNumberIntType, &ret); - else if (CFGetTypeID(value) == CFBooleanGetTypeID()) - ret = CFBooleanGetValue(value); - else if (CFGetTypeID(value) == CFStringGetTypeID()) { - const char *tem = [(NSString *) value UTF8String]; - if (strcasecmp(tem, "true") == 0 || strcasecmp(tem, "yes") == 0) - ret = YES; - else - ret = NO; + NSString * const fake3 = [defaults stringForKey:XQuartzPrefKeyFakeButton3]; + if (fake3) { + darwinFakeMouse3Mask = DarwinParseModifierList(fake3.UTF8String, TRUE); } - - CFRelease(value); } - return ret; -} - -- (NSArray *) prefs_get_array:(NSString *)key -{ - NSArray *ret = nil; - CFPropertyListRef value; - - value = [self prefs_get_copy:key]; - if (value != NULL) { - if (CFGetTypeID(value) == CFArrayGetTypeID()) - ret = [cfarray_to_nsarray (value)autorelease]; - - CFRelease(value); + NSString * const appKitModifiers = [defaults stringForKey:XQuartzPrefKeyAppKitModifiers]; + if (appKitModifiers) { + darwinAppKitModMask = DarwinParseModifierList(appKitModifiers.UTF8String, TRUE); } - return ret; -} - -- (void) prefs_set_integer:(NSString *)key value:(int)value -{ - CFNumberRef x; - - x = CFNumberCreate(NULL, kCFNumberIntType, &value); - - CFPreferencesSetValue((CFStringRef)key, (CFTypeRef)x, - app_prefs_domain_cfstr, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - - CFRelease(x); -} - -- (void) prefs_set_float:(NSString *)key value:(float)value -{ - CFNumberRef x; - - x = CFNumberCreate(NULL, kCFNumberFloatType, &value); - - CFPreferencesSetValue((CFStringRef)key, (CFTypeRef)x, - app_prefs_domain_cfstr, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - - CFRelease(x); -} - -- (void) prefs_set_boolean:(NSString *)key value:(int)value -{ - CFPreferencesSetValue( - (CFStringRef)key, - (CFTypeRef)(value ? kCFBooleanTrue - : kCFBooleanFalse), - app_prefs_domain_cfstr, - kCFPreferencesCurrentUser, kCFPreferencesAnyHost); - -} - -- (void) prefs_set_array:(NSString *)key value:(NSArray *)value -{ - CFArrayRef cfarray; - - cfarray = nsarray_to_cfarray(value); - CFPreferencesSetValue((CFStringRef)key, - (CFTypeRef)cfarray, - app_prefs_domain_cfstr, - kCFPreferencesCurrentUser, kCFPreferencesAnyHost); - CFRelease(cfarray); -} - -- (void) prefs_set_string:(NSString *)key value:(NSString *)value -{ - CFPreferencesSetValue((CFStringRef)key, (CFTypeRef)value, - app_prefs_domain_cfstr, kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); -} - -- (void) prefs_synchronize -{ - CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication); -} - -- (void) read_defaults -{ - NSString *nsstr; - const char *tem; - - XQuartzRootlessDefault = [self prefs_get_boolean:@PREFS_ROOTLESS - default :XQuartzRootlessDefault]; - XQuartzFullscreenMenu = [self prefs_get_boolean:@PREFS_FULLSCREEN_MENU - default :XQuartzFullscreenMenu]; - XQuartzFullscreenDisableHotkeys = - ![self prefs_get_boolean:@PREFS_FULLSCREEN_HOTKEYS - default :! - XQuartzFullscreenDisableHotkeys]; - darwinFakeButtons = [self prefs_get_boolean:@PREFS_FAKEBUTTONS - default :darwinFakeButtons]; - XQuartzOptionSendsAlt = [self prefs_get_boolean:@PREFS_OPTION_SENDS_ALT - default :XQuartzOptionSendsAlt]; - - 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, TRUE); - if (fake3 != NULL) darwinFakeMouse3Mask = DarwinParseModifierList( - fake3, TRUE); + NSString * const windowItemModifiers = [defaults stringForKey:XQuartzPrefKeyWindowItemModifiers]; + if (windowItemModifiers) { + windowItemModMask = DarwinParseModifierList(windowItemModifiers.UTF8String, FALSE); } - tem = [self prefs_get_string:@PREFS_APPKIT_MODIFIERS default:NULL]; - if (tem != NULL) darwinAppKitModMask = DarwinParseModifierList(tem, TRUE); + XQuartzEnableKeyEquivalents = [defaults boolForKey:XQuartzPrefKeyKeyEquivs]; - 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); - } - } - } - - XQuartzEnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS - default : - XQuartzEnableKeyEquivalents]; - - darwinSyncKeymap = [self prefs_get_boolean:@PREFS_SYNC_KEYMAP - default :darwinSyncKeymap]; - - darwinDesiredDepth = [self prefs_get_integer:@PREFS_DEPTH - default :darwinDesiredDepth]; + darwinSyncKeymap = [defaults boolForKey:XQuartzPrefKeySyncKeymap]; - noTestExtensions = ![self prefs_get_boolean:@PREFS_TEST_EXTENSIONS - default :FALSE]; + darwinDesiredDepth = [defaults integerForKey:XQuartzPrefKeyDepth]; - noRenderExtension = ![self prefs_get_boolean:@PREFS_RENDER_EXTENSION - default :TRUE]; + noTestExtensions = ![defaults boolForKey:XQuartzPrefKeyTESTExtension]; + noRenderExtension = ![defaults boolForKey:XQuartzPrefKeyRENDERExtension]; - XQuartzScrollInDeviceDirection = - [self prefs_get_boolean:@PREFS_SCROLL_IN_DEV_DIRECTION - default : - XQuartzScrollInDeviceDirection]; - -#if XQUARTZ_SPARKLE - NSURL *url = [self prefs_copy_url:@PREFS_UPDATE_FEED default:nil]; - if (url) { - [[SUUpdater sharedUpdater] setFeedURL:url]; - [url release]; - } -#endif + XQuartzScrollInDeviceDirection = [defaults boolForKey:XQuartzPrefKeyScrollInDeviceDirection]; } /* This will end up at the end of the responder chain. */ @@ -1018,8 +661,9 @@ Bool X11ApplicationCanEnterRandR(void) { NSString *title, *msg; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; - if ([X11App prefs_get_boolean:@PREFS_NO_RANDR_ALERT default:NO] || + if ([defaults boolForKey:XQuartzPrefKeyNoRANDRAlert] || XQuartzShieldingWindowLevel != 0) return TRUE; @@ -1042,8 +686,7 @@ X11ApplicationCanEnterRandR(void) switch (alert_result) { case NSAlertOtherReturn: - [X11App prefs_set_boolean:@PREFS_NO_RANDR_ALERT value:YES]; - [X11App prefs_synchronize]; + [defaults setBool:YES forKey:XQuartzPrefKeyNoRANDRAlert]; case NSAlertDefaultReturn: return YES; @@ -1058,8 +701,9 @@ check_xinitrc(void) { char *tem, buf[1024]; NSString *msg; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; - if ([X11App prefs_get_boolean:@PREFS_DONE_XINIT_CHECK default:NO]) + if ([defaults boolForKey:XQuartzPrefKeyDoneXinitCheck]) return; tem = getenv("HOME"); @@ -1093,8 +737,7 @@ check_xinitrc(void) } done: - [X11App prefs_set_boolean:@PREFS_DONE_XINIT_CHECK value:YES]; - [X11App prefs_synchronize]; + [defaults setBool:YES forKey:XQuartzPrefKeyDoneXinitCheck]; } static inline pthread_t @@ -1130,15 +773,8 @@ X11ApplicationMain(int argc, char **argv, char **envp) @autoreleasepool { X11App = (X11Application *)[X11Application sharedApplication]; + [X11App read_defaults]; - app_prefs_domain_cfstr = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier]; - - if (app_prefs_domain_cfstr == NULL) { - ErrorF("X11ApplicationMain: Unable to determine bundle identifier. Your installation of XQuartz may be broken.\n"); - app_prefs_domain_cfstr = CFSTR(BUNDLE_ID_PREFIX ".X11"); - } - - [NSApp read_defaults]; [NSBundle loadNibNamed:@"main" owner:NSApp]; [NSNotificationCenter.defaultCenter addObserver:NSApp selector:@selector (became_key:) diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m index 3efda5083f9ae790b10222b3d038675b84c43461..3b55bb6a52e464bad4ef58e282a154c51c7b5d2b 100644 --- a/hw/xquartz/X11Controller.m +++ b/hw/xquartz/X11Controller.m @@ -36,6 +36,7 @@ #import "X11Controller.h" #import "X11Application.h" +#import "NSUserDefaults+XQuartzDefaults.h" #include "opaque.h" #include "darwin.h" @@ -74,21 +75,19 @@ extern char *bundle_id_prefix; - (void) awakeFromNib { X11Application *xapp = NSApp; - NSArray *array; /* Point X11Application at ourself. */ xapp.controller = self; - array = [xapp prefs_get_array:@PREFS_APPSMENU]; - if (array != nil) { - int count; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + NSArray *appsMenu = [defaults arrayForKey:XQuartzPrefKeyAppsMenu]; + + if (appsMenu) { + int count = appsMenu.count; /* convert from [TITLE1 COMMAND1 TITLE2 COMMAND2 ...] to [[TITLE1 COMMAND1] [TITLE2 COMMAND2] ...] format. */ - - count = [array count]; - if (count > 0 - && ![[array objectAtIndex:0] isKindOfClass:[NSArray class]]) { + if (count > 0 && ![appsMenu[0] isKindOfClass:NSArray.class]) { int i; NSMutableArray *copy, *sub; @@ -96,24 +95,24 @@ extern char *bundle_id_prefix; for (i = 0; i < count / 2; i++) { sub = [[NSMutableArray alloc] initWithCapacity:3]; - [sub addObject:[array objectAtIndex:i * 2]]; - [sub addObject:[array objectAtIndex:i * 2 + 1]]; + [sub addObject:appsMenu[i * 2]]; + [sub addObject:appsMenu[i * 2 + 1]]; [sub addObject:@""]; [copy addObject:sub]; [sub release]; } - array = copy; + appsMenu = copy; + [defaults setObject:appsMenu forKey:XQuartzPrefKeyAppsMenu]; } - [self set_apps_menu:array]; + [self set_apps_menu:appsMenu]; } - [[NSNotificationCenter defaultCenter] - addObserver: self - selector: @selector(apps_table_done:) - name: NSWindowWillCloseNotification - object: self.apps_table.window]; + [NSNotificationCenter.defaultCenter addObserver:self + selector:@selector(apps_table_done:) + name:NSWindowWillCloseNotification + object:self.apps_table.window]; } - (void) item_selected:sender @@ -349,9 +348,12 @@ extern char *bundle_id_prefix; int stdout_pipe[2]; int stderr_pipe[2]; - newargv[0] = [X11App prefs_get_string:@PREFS_LOGIN_SHELL default:"/bin/sh"]; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + NSString * const shell = [defaults stringForKey:XQuartzPrefKeyLoginShell]; + + newargv[0] = shell.fileSystemRepresentation; newargv[1] = "-c"; - newargv[2] = [filename UTF8String]; + newargv[2] = filename.fileSystemRepresentation; newargv[3] = NULL; s = getenv("DISPLAY"); @@ -494,8 +496,8 @@ extern char *bundle_id_prefix; [self remove_apps_menu]; [self install_apps_menu:table_apps]; - [NSApp prefs_set_array:@PREFS_APPSMENU value:table_apps]; - [NSApp prefs_synchronize]; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + [defaults setObject:table_apps forKey:XQuartzPrefKeyAppsMenu]; [[apps_table window] orderOut:sender]; @@ -672,15 +674,15 @@ extern char *bundle_id_prefix; - (IBAction) enable_fullscreen_changed:sender { - XQuartzRootlessDefault = !self.enable_fullscreen.intValue; + XQuartzRootlessDefault = !self.enable_fullscreen.state; [self.enable_fullscreen_menu setEnabled:!XQuartzRootlessDefault]; [self.enable_fullscreen_menu_text setTextColor:XQuartzRootlessDefault ? NSColor.disabledControlTextColor : NSColor.controlTextColor]; DarwinSendDDXEvent(kXquartzSetRootless, 1, XQuartzRootlessDefault); - [NSApp prefs_set_boolean:@PREFS_ROOTLESS value:XQuartzRootlessDefault]; - [NSApp prefs_synchronize]; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + [defaults setBool:XQuartzRootlessDefault forKey:XQuartzPrefKeyRootless]; } - (IBAction) toggle_fullscreen:sender @@ -693,55 +695,43 @@ extern char *bundle_id_prefix; if (!sender) return; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + if (sender == self.fake_buttons) { - darwinFakeButtons = self.fake_buttons.intValue; - [NSApp prefs_set_boolean:@PREFS_FAKEBUTTONS value:darwinFakeButtons]; - } - else if (sender == self.enable_keyequivs) { - XQuartzEnableKeyEquivalents = self.enable_keyequivs.intValue; - [NSApp prefs_set_boolean:@PREFS_KEYEQUIVS value: - XQuartzEnableKeyEquivalents]; - } - else if (sender == self.sync_keymap) { - darwinSyncKeymap = self.sync_keymap.intValue; - [NSApp prefs_set_boolean:@PREFS_SYNC_KEYMAP value:darwinSyncKeymap]; - } - else if (sender == self.enable_fullscreen_menu) { - XQuartzFullscreenMenu = self.enable_fullscreen_menu.intValue; - [NSApp prefs_set_boolean:@PREFS_FULLSCREEN_MENU value: - XQuartzFullscreenMenu]; - } - else if (sender == self.option_sends_alt) { + darwinFakeButtons = !!self.fake_buttons.state; + [defaults setBool:darwinFakeButtons forKey:XQuartzPrefKeyFakeButtons]; + } else if (sender == self.enable_keyequivs) { + XQuartzEnableKeyEquivalents = !!self.enable_keyequivs.state; + [defaults setBool:XQuartzEnableKeyEquivalents forKey:XQuartzPrefKeyKeyEquivs]; + } else if (sender == self.sync_keymap) { + darwinSyncKeymap = !!self.sync_keymap.state; + [defaults setBool:darwinSyncKeymap forKey:XQuartzPrefKeySyncKeymap]; + } else if (sender == self.enable_fullscreen_menu) { + XQuartzFullscreenMenu = !!self.enable_fullscreen_menu.state; + [defaults setBool:XQuartzFullscreenMenu forKey:XQuartzPrefKeyFullscreenMenu]; + } else if (sender == self.option_sends_alt) { BOOL prev_opt_sends_alt = XQuartzOptionSendsAlt; - XQuartzOptionSendsAlt = self.option_sends_alt.intValue; - [NSApp prefs_set_boolean:@PREFS_OPTION_SENDS_ALT value: - XQuartzOptionSendsAlt]; + XQuartzOptionSendsAlt = !!self.option_sends_alt.state; + [defaults setBool:XQuartzOptionSendsAlt forKey:XQuartzPrefKeyOptionSendsAlt]; if (prev_opt_sends_alt != XQuartzOptionSendsAlt) QuartsResyncKeymap(TRUE); - } - else if (sender == self.click_through) { - [NSApp prefs_set_boolean:@PREFS_CLICK_THROUGH value:self.click_through.intValue]; - } - else if (sender == self.focus_follows_mouse) { - [NSApp prefs_set_boolean:@PREFS_FFM value:self.focus_follows_mouse.intValue]; - } - else if (sender == self.focus_on_new_window) { - [NSApp prefs_set_boolean:@PREFS_FOCUS_ON_NEW_WINDOW value:self.focus_on_new_window.intValue]; - } - else if (sender == self.enable_auth) { - [NSApp prefs_set_boolean:@PREFS_NO_AUTH value:!self.enable_auth.intValue]; - } - else if (sender == self.enable_tcp) { - [NSApp prefs_set_boolean:@PREFS_NO_TCP value:!self.enable_tcp.intValue]; - } - else if (sender == self.depth) { - [NSApp prefs_set_integer:@PREFS_DEPTH value:self.depth.selectedTag]; - } - else if (sender == self.sync_pasteboard) { + } else if (sender == self.click_through) { + [defaults setBool:!!self.click_through.state forKey:XQuartzPrefKeyClickThrough]; + } else if (sender == self.focus_follows_mouse) { + [defaults setBool:!!self.focus_follows_mouse.state forKey:XQuartzPrefKeyFocusFollowsMouse]; + } else if (sender == self.focus_on_new_window) { + [defaults setBool:!!self.focus_on_new_window.state forKey:XQuartzPrefKeyFocusOnNewWindow]; + } else if (sender == self.enable_auth) { + [defaults setBool:!self.enable_auth.state forKey:XQuartzPrefKeyNoAuth]; + } else if (sender == self.enable_tcp) { + [defaults setBool:!self.enable_tcp.state forKey:XQuartzPrefKeyNoTCP]; + } else if (sender == self.depth) { + [defaults setInteger:self.depth.selectedTag forKey:XQuartzPrefKeyDepth]; + } else if (sender == self.sync_pasteboard) { BOOL pbproxy_active = self.sync_pasteboard.intValue; - [NSApp prefs_set_boolean:@PREFS_SYNC_PB value:pbproxy_active]; + [defaults setBool:pbproxy_active forKey:XQuartzPrefKeySyncPasteboard]; [self.sync_pasteboard_to_clipboard setEnabled:pbproxy_active]; [self.sync_pasteboard_to_primary setEnabled:pbproxy_active]; @@ -751,33 +741,27 @@ extern char *bundle_id_prefix; // setEnabled doesn't do this... [self.sync_text1 setTextColor:pbproxy_active ? NSColor.controlTextColor : NSColor.disabledControlTextColor]; [self.sync_text2 setTextColor:pbproxy_active ? NSColor.controlTextColor : NSColor.disabledControlTextColor]; + } else if (sender == self.sync_pasteboard_to_clipboard) { + [defaults setBool:!!self.sync_pasteboard_to_clipboard.state forKey:XQuartzPrefKeySyncPasteboardToClipboard]; + } else if (sender == self.sync_pasteboard_to_primary) { + [defaults setBool:!!self.sync_pasteboard_to_primary.state forKey:XQuartzPrefKeySyncPasteboardToPrimary]; + } else if (sender == self.sync_clipboard_to_pasteboard) { + [defaults setBool:!!self.sync_clipboard_to_pasteboard.state forKey:XQuartzPrefKeySyncClipboardToPasteBoard]; + } else if (sender == self.sync_primary_immediately) { + [defaults setBool:!!self.sync_primary_immediately.state forKey:XQuartzPrefKeySyncPrimaryOnSelect]; + } else if (sender == self.scroll_in_device_direction) { + XQuartzScrollInDeviceDirection = !!self.scroll_in_device_direction.state; + [defaults setBool:XQuartzScrollInDeviceDirection forKey:XQuartzPrefKeyScrollInDeviceDirection]; } - else if (sender == self.sync_pasteboard_to_clipboard) { - [NSApp prefs_set_boolean:@PREFS_SYNC_PB_TO_CLIPBOARD value:self.sync_pasteboard_to_clipboard.intValue]; - } - else if (sender == self.sync_pasteboard_to_primary) { - [NSApp prefs_set_boolean:@PREFS_SYNC_PB_TO_PRIMARY value:self.sync_pasteboard_to_primary.intValue]; - } - else if (sender == self.sync_clipboard_to_pasteboard) { - [NSApp prefs_set_boolean:@PREFS_SYNC_CLIPBOARD_TO_PB value:self.sync_clipboard_to_pasteboard.intValue]; - } - else if (sender == self.sync_primary_immediately) { - [NSApp prefs_set_boolean:@PREFS_SYNC_PRIMARY_ON_SELECT value:self.sync_primary_immediately.intValue]; - } - else if (sender == self.scroll_in_device_direction) { - XQuartzScrollInDeviceDirection = self.scroll_in_device_direction.intValue; - [NSApp prefs_set_boolean:@PREFS_SCROLL_IN_DEV_DIRECTION value:XQuartzScrollInDeviceDirection]; - } - - [NSApp prefs_synchronize]; DarwinSendDDXEvent(kXquartzReloadPreferences, 0); } - (IBAction) prefs_show:sender { - BOOL pbproxy_active = - [NSApp prefs_get_boolean:@PREFS_SYNC_PB default:YES]; + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + + BOOL pbproxy_active = [defaults boolForKey:XQuartzPrefKeySyncPasteboard]; [self.scroll_in_device_direction setIntValue:XQuartzScrollInDeviceDirection]; @@ -785,20 +769,20 @@ extern char *bundle_id_prefix; [self.enable_keyequivs setIntValue:XQuartzEnableKeyEquivalents]; [self.sync_keymap setIntValue:darwinSyncKeymap]; [self.option_sends_alt setIntValue:XQuartzOptionSendsAlt]; - [self.click_through setIntValue:[NSApp prefs_get_boolean:@PREFS_CLICK_THROUGH default:NO]]; - [self.focus_follows_mouse setIntValue:[NSApp prefs_get_boolean:@PREFS_FFM default:NO]]; - [self.focus_on_new_window setIntValue:[NSApp prefs_get_boolean:@PREFS_FOCUS_ON_NEW_WINDOW default:YES]]; + [self.click_through setIntValue:[defaults boolForKey:XQuartzPrefKeyClickThrough]]; + [self.focus_follows_mouse setIntValue:[defaults boolForKey:XQuartzPrefKeyFocusFollowsMouse]]; + [self.focus_on_new_window setIntValue:[defaults boolForKey:XQuartzPrefKeyFocusOnNewWindow]]; - [self.enable_auth setIntValue:![NSApp prefs_get_boolean:@PREFS_NO_AUTH default:NO]]; - [self.enable_tcp setIntValue:![NSApp prefs_get_boolean:@PREFS_NO_TCP default:NO]]; + [self.enable_auth setIntValue:![defaults boolForKey:XQuartzPrefKeyNoAuth]]; + [self.enable_tcp setIntValue:![defaults boolForKey:XQuartzPrefKeyNoTCP]]; - [self.depth selectItemAtIndex:[self.depth indexOfItemWithTag:[NSApp prefs_get_integer:@PREFS_DEPTH default:-1]]]; + [self.depth selectItemAtIndex:[self.depth indexOfItemWithTag:[defaults integerForKey:XQuartzPrefKeyDepth]]]; [self.sync_pasteboard setIntValue:pbproxy_active]; - [self.sync_pasteboard_to_clipboard setIntValue:[NSApp prefs_get_boolean:@PREFS_SYNC_PB_TO_CLIPBOARD default:YES]]; - [self.sync_pasteboard_to_primary setIntValue:[NSApp prefs_get_boolean:@PREFS_SYNC_PB_TO_PRIMARY default:YES]]; - [self.sync_clipboard_to_pasteboard setIntValue:[NSApp prefs_get_boolean:@PREFS_SYNC_CLIPBOARD_TO_PB default:YES]]; - [self.sync_primary_immediately setIntValue:[NSApp prefs_get_boolean:@PREFS_SYNC_PRIMARY_ON_SELECT default:NO]]; + [self.sync_pasteboard_to_clipboard setIntValue:[defaults boolForKey:XQuartzPrefKeySyncPasteboardToClipboard]]; + [self.sync_pasteboard_to_primary setIntValue:[defaults boolForKey:XQuartzPrefKeySyncPasteboardToPrimary]]; + [self.sync_clipboard_to_pasteboard setIntValue:[defaults boolForKey:XQuartzPrefKeySyncClipboardToPasteBoard]]; + [self.sync_primary_immediately setIntValue:[defaults boolForKey:XQuartzPrefKeySyncPrimaryOnSelect]]; [self.sync_pasteboard_to_clipboard setEnabled:pbproxy_active]; [self.sync_pasteboard_to_primary setEnabled:pbproxy_active]; @@ -863,9 +847,11 @@ extern char *bundle_id_prefix; NSString *msg; NSString *title; - if (self.can_quit || - [X11App prefs_get_boolean:@PREFS_NO_QUIT_ALERT default:NO]) + NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults; + + if (self.can_quit || [defaults boolForKey:XQuartzPrefKeyNoQuitAlert]) { return NSTerminateNow; + } /* Make sure we're frontmost. */ [NSApp activateIgnoringOtherApps:YES]; @@ -887,8 +873,6 @@ extern char *bundle_id_prefix; - (void) applicationWillTerminate:(NSNotification *)aNotification _X_NORETURN { - [X11App prefs_synchronize]; - /* shutdown the X server, it will exit () for us. */ DarwinSendDDXEvent(kXquartzQuit, 0); diff --git a/hw/xquartz/bundle/Xquartz.plist b/hw/xquartz/bundle/Xquartz.plist deleted file mode 100644 index e157045169649df5e20e1c0214dce81edadf9b3e..0000000000000000000000000000000000000000 --- a/hw/xquartz/bundle/Xquartz.plist +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> - -<!-- This file contains system-wide defaults for the Apple X11 server --> - -<plist version="1.0"> -<dict> - <key>apps_menu</key> - <array> - <array> - <string>Terminal</string> - <string>xterm</string> - <string>n</string> - </array> - <array> - <string>xman</string> - <string>xman</string> - <string></string> - </array> - <array> - <string>xlogo</string> - <string>xlogo</string> - <string></string> - </array> - </array> -</dict> -</plist> diff --git a/hw/xquartz/meson.build b/hw/xquartz/meson.build index ec143b599e07d9cc34ba72b01d9d5e0fa6cfe0ea..deae2b3c9f6ce36bd1c02877562ab12dc0574945 100644 --- a/hw/xquartz/meson.build +++ b/hw/xquartz/meson.build @@ -20,6 +20,7 @@ endif # libxquartz srcs_libxquartz = [ + 'NSUserDefaults+XQuartzDefaults.m', 'X11Application.m', 'X11Controller.m', 'applewm.c', diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c index 233570a7597d400dde988dd9df040a38d7e1482f..4bbe56b93360bf331b5461c0b0b7542c61bc155e 100644 --- a/hw/xquartz/quartz.c +++ b/hw/xquartz/quartz.c @@ -85,14 +85,16 @@ int aquaMenuBarHeight = 0; QuartzModeProcsPtr quartzProcs = NULL; const char *quartzOpenGLBundle = NULL; -Bool XQuartzFullscreenDisableHotkeys = TRUE; -Bool XQuartzOptionSendsAlt = FALSE; -Bool XQuartzEnableKeyEquivalents = TRUE; +/* These are initialized by X11Application with default values set in NSUserDefaults+XQuartzDefaults */ +Bool XQuartzFullscreenDisableHotkeys; +Bool XQuartzOptionSendsAlt; +Bool XQuartzEnableKeyEquivalents; +Bool XQuartzFullscreenMenu; +Bool XQuartzRootlessDefault; + Bool XQuartzFullscreenVisible = FALSE; -Bool XQuartzRootlessDefault = TRUE; Bool XQuartzIsRootless = TRUE; Bool XQuartzServerVisible = FALSE; -Bool XQuartzFullscreenMenu = FALSE; int32_t XQuartzShieldingWindowLevel = 0;