149 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| //
 | |
| //  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 *)globalDefaults
 | |
| {
 | |
|     static dispatch_once_t once;
 | |
|     static NSUserDefaults *defaults;
 | |
| 
 | |
|     dispatch_once(&once, ^{
 | |
|         NSString * const defaultsDomain = @".GlobalPreferences";
 | |
|         defaults = [[[NSUserDefaults alloc] initWithSuiteName:defaultsDomain] retain];
 | |
| 
 | |
|         NSDictionary<NSString *, id> * const defaultDefaultsDict = @{
 | |
|             @"AppleSpacesSwitchOnActivate" : @(YES),
 | |
|         };
 | |
| 
 | |
|         [defaults registerDefaults:defaultDefaultsDict];
 | |
|     });
 | |
| 
 | |
|     return defaults;
 | |
| }
 | |
| 
 | |
| + (NSUserDefaults *)dockDefaults
 | |
| {
 | |
|     static dispatch_once_t once;
 | |
|     static NSUserDefaults *defaults;
 | |
| 
 | |
|     dispatch_once(&once, ^{
 | |
|         NSString * const defaultsDomain = @"com.apple.dock";
 | |
|         defaults = [[[NSUserDefaults alloc] initWithSuiteName:defaultsDomain] retain];
 | |
| 
 | |
|         NSDictionary<NSString *, id> * const defaultDefaultsDict = @{
 | |
|             @"workspaces" : @(NO),
 | |
|         };
 | |
| 
 | |
|         [defaults registerDefaults:defaultDefaultsDict];
 | |
|     });
 | |
| 
 | |
|     return defaults;
 | |
| }
 | |
| 
 | |
| + (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];
 | |
|         }
 | |
| 
 | |
|         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 = @{
 | |
|             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];
 | |
| 
 | |
|         NSString * const systemDefaultsPlistPath = [@(XQUARTZ_DATA_DIR) stringByAppendingPathComponent:@"defaults.plist"];
 | |
|         NSDictionary <NSString *, id> * const systemDefaultsDict = [NSDictionary dictionaryWithContentsOfFile:systemDefaultsPlistPath];
 | |
|         [defaults registerDefaults:systemDefaultsDict];
 | |
|     });
 | |
| 
 | |
|     return defaults;
 | |
| }
 | |
| 
 | |
| @end
 |