diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2010-12-01 16:43:56 -0500 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2010-12-01 16:53:15 -0500 |
commit | 50dc6989b84ee8b4c2337a11b3d295208723251a (patch) | |
tree | 4bb3591aabe688435d114ffd2b36bd06ad8bebb4 | |
parent | 2bb3ebe1e437acf836449f0a63f3264ad29566f2 (diff) | |
download | weston-50dc6989b84ee8b4c2337a11b3d295208723251a.tar.gz |
compositor: Shut down properly so we remove the socket
-rw-r--r-- | compositor/compositor-x11.c | 2 | ||||
-rw-r--r-- | compositor/compositor.c | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/compositor/compositor-x11.c b/compositor/compositor-x11.c index 3f6d8428..4cf9bf88 100644 --- a/compositor/compositor-x11.c +++ b/compositor/compositor-x11.c @@ -581,7 +581,7 @@ x11_compositor_handle_event(int fd, uint32_t mask, void *data) client_message = (xcb_client_message_event_t *) event; atom = client_message->data.data32[0]; if (atom == c->atom.wm_delete_window) - exit(1); + wl_display_terminate(c->base.wl_display); break; default: diff --git a/compositor/compositor.c b/compositor/compositor.c index bca2095a..28f16dd9 100644 --- a/compositor/compositor.c +++ b/compositor/compositor.c @@ -1395,10 +1395,18 @@ wlsc_compositor_init(struct wlsc_compositor *ec, struct wl_display *display) return 0; } +static void on_term_signal(int signal_number, void *data) +{ + struct wlsc_compositor *ec = data; + + wl_display_terminate(ec->wl_display); +} + int main(int argc, char *argv[]) { struct wl_display *display; struct wlsc_compositor *ec; + struct wl_event_loop *loop; GError *error = NULL; GOptionContext *context; int width, height; @@ -1436,6 +1444,10 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } + loop = wl_display_get_event_loop(ec->wl_display); + wl_event_loop_add_signal(loop, SIGTERM, on_term_signal, ec); + wl_event_loop_add_signal(loop, SIGINT, on_term_signal, ec); + wl_display_run(display); wl_display_destroy(display); |