diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-10-21 11:19:06 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-10-23 14:16:57 -0700 |
commit | 2d764e21f278ea26bae135db6dae07b94651951c (patch) | |
tree | 95dae3593c472980240a34d11d4d7e442e145b76 /hw | |
parent | 0b695262176e96f508921905ee7f9cc086c7daf0 (diff) |
XQuartz: pbproxy: SIGHUP reloads preferences.
(cherry picked from commit cbc0935ef74ebd76ed3db16d6ab86043eeed42a3)
Diffstat (limited to 'hw')
-rw-r--r-- | hw/xquartz/pbproxy/app-main.m | 17 | ||||
-rw-r--r-- | hw/xquartz/pbproxy/main.m | 13 | ||||
-rw-r--r-- | hw/xquartz/pbproxy/pbproxy.h | 8 | ||||
-rw-r--r-- | hw/xquartz/pbproxy/x-input.m | 20 | ||||
-rw-r--r-- | hw/xquartz/pbproxy/x-selection.m | 3 |
5 files changed, 41 insertions, 20 deletions
diff --git a/hw/xquartz/pbproxy/app-main.m b/hw/xquartz/pbproxy/app-main.m index 3dfdcb41a..4fb5ea0b6 100644 --- a/hw/xquartz/pbproxy/app-main.m +++ b/hw/xquartz/pbproxy/app-main.m @@ -10,8 +10,16 @@ #include <unistd.h> /*for getpid*/ #include <Cocoa/Cocoa.h> +BOOL prefs_reload = NO; + static void signal_handler (int sig) { - _exit(0); + switch(sig) { + case SIGHUP: + prefs_reload = YES; + break; + default: + _exit(EXIT_SUCCESS); + } } int main (int argc, const char *argv[]) { @@ -19,15 +27,16 @@ int main (int argc, const char *argv[]) { printf("pid: %u\n", getpid()); #endif - if(x_init () !=0) - return 1; + if(!x_init()) + return EXIT_FAILURE; signal (SIGINT, signal_handler); signal (SIGTERM, signal_handler); + signal (SIGHUP, signal_handler); signal (SIGPIPE, SIG_IGN); [NSApplication sharedApplication]; [NSApp run]; - return 0; + return EXIT_SUCCESS; } diff --git a/hw/xquartz/pbproxy/main.m b/hw/xquartz/pbproxy/main.m index ded18e1f7..231b2120d 100644 --- a/hw/xquartz/pbproxy/main.m +++ b/hw/xquartz/pbproxy/main.m @@ -34,13 +34,13 @@ static int x_error_handler (Display *dpy, XErrorEvent *errevent) { return 0; } -int x_init (void) { +BOOL x_init (void) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; x_dpy = XOpenDisplay (NULL); if (x_dpy == NULL) { fprintf (stderr, "can't open default display\n"); - return 1; + return FALSE; } XSetIOErrorHandler (x_io_error_handler); @@ -49,7 +49,7 @@ int x_init (void) { if (!XAppleWMQueryExtension (x_dpy, &x_apple_wm_event_base, &x_apple_wm_error_base)) { fprintf (stderr, "can't open AppleWM server extension\n"); - return 1; + return FALSE; } have_xfixes = XFixesQueryExtension(x_dpy, &x_xfixes_event_base, &x_xfixes_error_base); @@ -59,12 +59,13 @@ int x_init (void) { _selection_object = [[x_selection alloc] init]; - x_input_register (); - x_input_run (); + if(!x_input_register()) + return FALSE; + x_input_run(); [pool release]; - return 0; + return TRUE; } id x_selection_object (void) { diff --git a/hw/xquartz/pbproxy/pbproxy.h b/hw/xquartz/pbproxy/pbproxy.h index 5d4652bf1..1b0ed2bd6 100644 --- a/hw/xquartz/pbproxy/pbproxy.h +++ b/hw/xquartz/pbproxy/pbproxy.h @@ -16,12 +16,16 @@ #define DEBUG 0 #endif +#ifndef INTEGRATED_XPBPROXY +extern BOOL prefs_reload; +#endif + /* from main.m */ extern void x_set_is_active (BOOL state); extern BOOL x_get_is_active (void); extern id x_selection_object (void); extern Time x_current_timestamp (void); -extern int x_init (void); +extern BOOL x_init (void); extern Display *x_dpy; extern int x_apple_wm_event_base, x_apple_wm_error_base; @@ -29,7 +33,7 @@ extern int x_xfixes_event_base, x_xfixes_error_base; extern BOOL have_xfixes; /* from x-input.m */ -extern void x_input_register (void); +extern BOOL x_input_register (void); extern void x_input_run (void); #if DEBUG == 0 diff --git a/hw/xquartz/pbproxy/x-input.m b/hw/xquartz/pbproxy/x-input.m index b34c39aca..e091ef15b 100644 --- a/hw/xquartz/pbproxy/x-input.m +++ b/hw/xquartz/pbproxy/x-input.m @@ -102,7 +102,7 @@ void x_input_run (void) { [pool release]; } -static int add_input_socket (int sock, CFOptionFlags callback_types, +static BOOL add_input_socket (int sock, CFOptionFlags callback_types, CFSocketCallBack callback, const CFSocketContext *ctx, CFRunLoopSourceRef *cf_source) { CFSocketRef cf_sock; @@ -128,12 +128,18 @@ static int add_input_socket (int sock, CFOptionFlags callback_types, static void x_input_callback (CFSocketRef sock, CFSocketCallBackType type, CFDataRef address, const void *data, void *info) { - x_input_run (); -} -void x_input_register(void) { - if (!add_input_socket (ConnectionNumber (x_dpy), kCFSocketReadCallBack, - x_input_callback, NULL, &x_dpy_source)) { - exit (1); +#ifndef INTEGRATED_XPBPROXY + if(prefs_reload) { + [x_selection_object() reload_preferences]; + prefs_reload = NO; } +#endif + + x_input_run(); +} + +BOOL x_input_register(void) { + return add_input_socket(ConnectionNumber(x_dpy), kCFSocketReadCallBack, + x_input_callback, NULL, &x_dpy_source); } diff --git a/hw/xquartz/pbproxy/x-selection.m b/hw/xquartz/pbproxy/x-selection.m index 16c4d5270..304bee710 100644 --- a/hw/xquartz/pbproxy/x-selection.m +++ b/hw/xquartz/pbproxy/x-selection.m @@ -78,6 +78,7 @@ static struct { static struct propdata null_propdata = {NULL, 0}; +#ifdef DEBUG static void dump_prefs (FILE *fp) { fprintf(fp, @@ -93,7 +94,7 @@ dump_prefs (FILE *fp) { pbproxy_prefs.pasteboard_to_primary, pbproxy_prefs.pasteboard_to_clipboard); } - +#endif #define APP_PREFS "org.x.X11" static BOOL |