xserver: Branch 'master' - 3 commits
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 15 06:35:34 UTC 2022
hw/xquartz/NSUserDefaults+XQuartzDefaults.h | 49 ++
hw/xquartz/NSUserDefaults+XQuartzDefaults.m | 149 +++++++++
hw/xquartz/X11Application.h | 48 --
hw/xquartz/X11Application.m | 458 ++--------------------------
hw/xquartz/X11Controller.m | 184 +++++------
hw/xquartz/bundle/Xquartz.plist | 27 -
hw/xquartz/meson.build | 1
hw/xquartz/pbproxy/app-main.m | 40 --
hw/xquartz/pbproxy/meson.build | 4
hw/xquartz/pbproxy/x-selection.m | 45 --
hw/xquartz/quartz.c | 12
11 files changed, 340 insertions(+), 677 deletions(-)
New commits:
commit f40610e0b4f2b4ae54ef6bbff756cb4a60e17e3b
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date: Sat Feb 20 14:21:01 2021 -0800
xquartz: Fold spaces related preferences into NSUserDefaults+XQuartzDefaults
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.h b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h
index b8fc4a631..2f180b241 100644
--- a/hw/xquartz/NSUserDefaults+XQuartzDefaults.h
+++ b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h
@@ -42,6 +42,8 @@ extern NSString * const XQuartzPrefKeySyncPrimaryOnSelect;
@interface NSUserDefaults (XQuartzDefaults)
++ (NSUserDefaults *)globalDefaults;
++ (NSUserDefaults *)dockDefaults;
+ (NSUserDefaults *)xquartzDefaults;
@end
diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.m b/hw/xquartz/NSUserDefaults+XQuartzDefaults.m
index b73003bae..bd5dd2305 100644
--- a/hw/xquartz/NSUserDefaults+XQuartzDefaults.m
+++ b/hw/xquartz/NSUserDefaults+XQuartzDefaults.m
@@ -44,6 +44,44 @@ 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;
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 31df8c9d4..b0550b69a 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -417,7 +417,7 @@ QuartzModeBundleInit(void);
case NSApplicationActivatedEventType:
for_x = NO;
if ([e window] == nil && x_was_active) {
- BOOL order_all_windows = YES, workspaces, ok;
+ BOOL order_all_windows = YES;
for_appkit = NO;
#if APPKIT_APPFLAGS_HACK
@@ -430,26 +430,9 @@ QuartzModeBundleInit(void);
[self set_front_process:nil];
/* Get the Spaces preference for SwitchOnActivate */
- (void)CFPreferencesAppSynchronize(CFSTR("com.apple.dock"));
- workspaces =
- CFPreferencesGetAppBooleanValue(CFSTR("workspaces"),
- CFSTR(
- "com.apple.dock"),
- &ok);
- if (!ok)
- workspaces = NO;
-
+ BOOL const workspaces = [NSUserDefaults.dockDefaults boolForKey:@"workspaces"];
if (workspaces) {
- (void)CFPreferencesAppSynchronize(CFSTR(
- ".GlobalPreferences"));
- order_all_windows =
- CFPreferencesGetAppBooleanValue(CFSTR(
- "AppleSpacesSwitchOnActivate"),
- CFSTR(
- ".GlobalPreferences"),
- &ok);
- if (!ok)
- order_all_windows = YES;
+ order_all_windows = [NSUserDefaults.globalDefaults boolForKey:@"AppleSpacesSwitchOnActivate"];
}
/* TODO: In the workspaces && !AppleSpacesSwitchOnActivate case, the windows are ordered
@@ -460,8 +443,7 @@ QuartzModeBundleInit(void);
* be restoring one of them.
*/
if ([e data2] & 0x10) { // 0x10 (bfCPSOrderAllWindowsForward) is set when we use cmd-tab or the dock icon
- DarwinSendDDXEvent(kXquartzBringAllToFront, 1,
- order_all_windows);
+ DarwinSendDDXEvent(kXquartzBringAllToFront, 1, order_all_windows);
}
}
break;
commit 6134c73aebc3f928639e8f802be49ec8ecc17e66
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date: Sat Feb 20 14:00:14 2021 -0800
xquartz pbproxy: Adopt NSUserDefaults+XQuartzDefaults for preferences
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
diff --git a/hw/xquartz/pbproxy/app-main.m b/hw/xquartz/pbproxy/app-main.m
index eda9a9e67..825980caf 100644
--- a/hw/xquartz/pbproxy/app-main.m
+++ b/hw/xquartz/pbproxy/app-main.m
@@ -31,13 +31,6 @@
#include "pbproxy.h"
#import "x-selection.h"
-#include <pthread.h>
-#include <unistd.h> /*for getpid*/
-#include <Cocoa/Cocoa.h>
-
-static const char *app_prefs_domain = BUNDLE_ID_PREFIX ".xpbproxy";
-CFStringRef app_prefs_domain_cfstr;
-
/* Stubs */
char *display = NULL;
@@ -82,41 +75,8 @@ xq_asl_log(int level, const char *subsystem, const char *file,
int
main(int argc, const char *argv[])
{
- const char *s;
- int i;
-
-#ifdef DEBUG
- ErrorF("pid: %u\n", getpid());
-#endif
-
xpbproxy_is_standalone = YES;
- if ((s = getenv("X11_PREFS_DOMAIN")))
- app_prefs_domain = s;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "--prefs-domain") == 0 && i + 1 < argc) {
- app_prefs_domain = argv[++i];
- }
- else if (strcmp(argv[i], "--help") == 0) {
- ErrorF(
- "usage: xpbproxy OPTIONS\n"
- "Pasteboard proxying for X11.\n\n"
- "--prefs-domain <domain> Change the domain used for reading preferences\n"
- " (default: %s)\n",
- app_prefs_domain);
- return 0;
- }
- else {
- ErrorF("usage: xpbproxy OPTIONS...\n"
- "Try 'xpbproxy --help' for more information.\n");
- return 1;
- }
- }
-
- app_prefs_domain_cfstr = CFStringCreateWithCString(NULL, app_prefs_domain,
- kCFStringEncodingUTF8);
-
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
signal(SIGHUP, signal_handler);
diff --git a/hw/xquartz/pbproxy/meson.build b/hw/xquartz/pbproxy/meson.build
index bf0f06f75..eebb9fd70 100644
--- a/hw/xquartz/pbproxy/meson.build
+++ b/hw/xquartz/pbproxy/meson.build
@@ -8,9 +8,11 @@ endif
libapplewm_dep = dependency('applewm', version: '>=1.4')
libxpbproxy = static_library('xpbproxy',
- ['main.m',
+ ['../NSUserDefaults+XQuartzDefaults.m',
+ 'main.m',
'x-input.m',
'x-selection.m'],
+ include_directories: ['..'],
dependencies: [applewmproto_dep, libapplewm_dep, dependency('xfixes'), dependency('x11')],
objc_args: pbproxy_defs,
)
diff --git a/hw/xquartz/pbproxy/x-selection.m b/hw/xquartz/pbproxy/x-selection.m
index 21b5b3172..f4f2b9a6b 100644
--- a/hw/xquartz/pbproxy/x-selection.m
+++ b/hw/xquartz/pbproxy/x-selection.m
@@ -38,6 +38,8 @@
#import <AppKit/NSImage.h>
#import <AppKit/NSBitmapImageRep.h>
+#import "NSUserDefaults+XQuartzDefaults.h"
+
/*
* The basic design of the pbproxy code is as follows.
*
@@ -99,18 +101,6 @@ dump_prefs()
}
#endif
-extern CFStringRef app_prefs_domain_cfstr;
-
-static BOOL
-prefs_get_bool(CFStringRef key, BOOL defaultValue)
-{
- Boolean value, ok;
-
- value = CFPreferencesGetAppBooleanValue(key, app_prefs_domain_cfstr, &ok);
-
- return ok ? (BOOL)value : defaultValue;
-}
-
static void
init_propdata(struct propdata *pdata)
{
@@ -1394,35 +1384,18 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete,
- (void) reload_preferences
{
- /*
- * It's uncertain how we could handle the synchronization failing, so cast to void.
- * The prefs_get_bool should fall back to defaults if the org.x.X11 plist doesn't exist or is invalid.
- */
- (void)CFPreferencesAppSynchronize(app_prefs_domain_cfstr);
+ NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults;
+
#ifdef STANDALONE_XPBPROXY
if (xpbproxy_is_standalone)
pbproxy_prefs.active = YES;
else
#endif
- pbproxy_prefs.active = prefs_get_bool(CFSTR(
- "sync_pasteboard"),
- pbproxy_prefs.active);
- pbproxy_prefs.primary_on_grab =
- prefs_get_bool(CFSTR(
- "sync_primary_on_select"),
- pbproxy_prefs.primary_on_grab);
- pbproxy_prefs.clipboard_to_pasteboard =
- prefs_get_bool(CFSTR(
- "sync_clipboard_to_pasteboard"),
- pbproxy_prefs.clipboard_to_pasteboard);
- pbproxy_prefs.pasteboard_to_primary =
- prefs_get_bool(CFSTR(
- "sync_pasteboard_to_primary"),
- pbproxy_prefs.pasteboard_to_primary);
- pbproxy_prefs.pasteboard_to_clipboard =
- prefs_get_bool(CFSTR(
- "sync_pasteboard_to_clipboard"),
- pbproxy_prefs.pasteboard_to_clipboard);
+ pbproxy_prefs.active = [defaults boolForKey:XQuartzPrefKeySyncPasteboard];
+ pbproxy_prefs.primary_on_grab = [defaults boolForKey:XQuartzPrefKeySyncPrimaryOnSelect];
+ pbproxy_prefs.clipboard_to_pasteboard = [defaults boolForKey:XQuartzPrefKeySyncClipboardToPasteBoard];
+ pbproxy_prefs.pasteboard_to_primary = [defaults boolForKey:XQuartzPrefKeySyncPasteboardToPrimary];
+ pbproxy_prefs.pasteboard_to_clipboard = [defaults boolForKey:XQuartzPrefKeySyncPasteboardToClipboard];
/* This is used for debugging. */
//dump_prefs();
commit 963ba6d9adf578ec8d7ed12ae22dece76b895172
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date: Fri Feb 19 22:49:11 2021 -0800
xquartz: Create a separate category for organizing user preferences
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.h b/hw/xquartz/NSUserDefaults+XQuartzDefaults.h
new file mode 100644
index 000000000..b8fc4a631
--- /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;
+
+ at interface NSUserDefaults (XQuartzDefaults)
+
++ (NSUserDefaults *)xquartzDefaults;
+
+ at end
diff --git a/hw/xquartz/NSUserDefaults+XQuartzDefaults.m b/hw/xquartz/NSUserDefaults+XQuartzDefaults.m
new file mode 100644
index 000000000..b73003bae
--- /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";
+
+ at 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;
+}
+
+ at end
diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index d3ff4ebd0..1ef98bee3 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 a100f5a6f..31df8c9d4 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 3efda5083..3b55bb6a5 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 e15704516..000000000
--- 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 ec143b599..deae2b3c9 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 233570a75..4bbe56b93 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;
More information about the xorg-commit
mailing list