summaryrefslogtreecommitdiff
path: root/hw/xquartz/pbproxy
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2008-10-21 11:19:06 -0700
committerJeremy Huddleston <jeremyhu@freedesktop.org>2008-10-23 14:16:57 -0700
commit2d764e21f278ea26bae135db6dae07b94651951c (patch)
tree95dae3593c472980240a34d11d4d7e442e145b76 /hw/xquartz/pbproxy
parent0b695262176e96f508921905ee7f9cc086c7daf0 (diff)
XQuartz: pbproxy: SIGHUP reloads preferences.
(cherry picked from commit cbc0935ef74ebd76ed3db16d6ab86043eeed42a3)
Diffstat (limited to 'hw/xquartz/pbproxy')
-rw-r--r--hw/xquartz/pbproxy/app-main.m17
-rw-r--r--hw/xquartz/pbproxy/main.m13
-rw-r--r--hw/xquartz/pbproxy/pbproxy.h8
-rw-r--r--hw/xquartz/pbproxy/x-input.m20
-rw-r--r--hw/xquartz/pbproxy/x-selection.m3
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