xquartz pbproxy: Adopt NSUserDefaults+XQuartzDefaults for preferences

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
This commit is contained in:
Jeremy Huddleston Sequoia 2021-02-20 14:00:14 -08:00
parent 963ba6d9ad
commit 6134c73aeb
3 changed files with 12 additions and 77 deletions

View File

@ -31,13 +31,6 @@
#include "pbproxy.h" #include "pbproxy.h"
#import "x-selection.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 */ /* Stubs */
char *display = NULL; char *display = NULL;
@ -82,41 +75,8 @@ xq_asl_log(int level, const char *subsystem, const char *file,
int int
main(int argc, const char *argv[]) main(int argc, const char *argv[])
{ {
const char *s;
int i;
#ifdef DEBUG
ErrorF("pid: %u\n", getpid());
#endif
xpbproxy_is_standalone = YES; 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(SIGINT, signal_handler);
signal(SIGTERM, signal_handler); signal(SIGTERM, signal_handler);
signal(SIGHUP, signal_handler); signal(SIGHUP, signal_handler);

View File

@ -8,9 +8,11 @@ endif
libapplewm_dep = dependency('applewm', version: '>=1.4') libapplewm_dep = dependency('applewm', version: '>=1.4')
libxpbproxy = static_library('xpbproxy', libxpbproxy = static_library('xpbproxy',
['main.m', ['../NSUserDefaults+XQuartzDefaults.m',
'main.m',
'x-input.m', 'x-input.m',
'x-selection.m'], 'x-selection.m'],
include_directories: ['..'],
dependencies: [applewmproto_dep, libapplewm_dep, dependency('xfixes'), dependency('x11')], dependencies: [applewmproto_dep, libapplewm_dep, dependency('xfixes'), dependency('x11')],
objc_args: pbproxy_defs, objc_args: pbproxy_defs,
) )

View File

@ -38,6 +38,8 @@
#import <AppKit/NSImage.h> #import <AppKit/NSImage.h>
#import <AppKit/NSBitmapImageRep.h> #import <AppKit/NSBitmapImageRep.h>
#import "NSUserDefaults+XQuartzDefaults.h"
/* /*
* The basic design of the pbproxy code is as follows. * The basic design of the pbproxy code is as follows.
* *
@ -99,18 +101,6 @@ dump_prefs()
} }
#endif #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 static void
init_propdata(struct propdata *pdata) init_propdata(struct propdata *pdata)
{ {
@ -1394,35 +1384,18 @@ get_property(Window win, Atom property, struct propdata *pdata, Bool delete,
- (void) reload_preferences - (void) reload_preferences
{ {
/* NSUserDefaults * const defaults = NSUserDefaults.xquartzDefaults;
* 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);
#ifdef STANDALONE_XPBPROXY #ifdef STANDALONE_XPBPROXY
if (xpbproxy_is_standalone) if (xpbproxy_is_standalone)
pbproxy_prefs.active = YES; pbproxy_prefs.active = YES;
else else
#endif #endif
pbproxy_prefs.active = prefs_get_bool(CFSTR( pbproxy_prefs.active = [defaults boolForKey:XQuartzPrefKeySyncPasteboard];
"sync_pasteboard"), pbproxy_prefs.primary_on_grab = [defaults boolForKey:XQuartzPrefKeySyncPrimaryOnSelect];
pbproxy_prefs.active); pbproxy_prefs.clipboard_to_pasteboard = [defaults boolForKey:XQuartzPrefKeySyncClipboardToPasteBoard];
pbproxy_prefs.primary_on_grab = pbproxy_prefs.pasteboard_to_primary = [defaults boolForKey:XQuartzPrefKeySyncPasteboardToPrimary];
prefs_get_bool(CFSTR( pbproxy_prefs.pasteboard_to_clipboard = [defaults boolForKey:XQuartzPrefKeySyncPasteboardToClipboard];
"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);
/* This is used for debugging. */ /* This is used for debugging. */
//dump_prefs(); //dump_prefs();