From 826d7954481c4bbee38ed0f70171e621827e2f78 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Thu, 15 Dec 2011 10:14:07 +0200 Subject: [PATCH] window: add display_exit() Add a function, that schedules the display_run() event loop to break out. When display_exit() is called, processing continues as usual, until currently waiting events and deferred tasks have been processed, and sent requests are flushed. Then, display_run() will return. This enables toytoolkit apps to handle their exit instead of just being killed or call exit(). Signed-off-by: Pekka Paalanen --- clients/window.c | 12 ++++++++++++ clients/window.h | 3 +++ 2 files changed, 15 insertions(+) diff --git a/clients/window.c b/clients/window.c index 09e9b70f..0e95f8e9 100644 --- a/clients/window.c +++ b/clients/window.c @@ -79,6 +79,8 @@ struct display { int epoll_fd; struct wl_list deferred_list; + int running; + struct wl_list window_list; struct wl_list input_list; struct wl_list output_list; @@ -2695,11 +2697,15 @@ display_run(struct display *display) struct epoll_event ep[16]; int i, count; + display->running = 1; while (1) { while (display->mask & WL_DISPLAY_WRITABLE) wl_display_iterate(display->display, WL_DISPLAY_WRITABLE); + if (!display->running) + break; + count = epoll_wait(display->epoll_fd, ep, ARRAY_LENGTH(ep), -1); for (i = 0; i < count; i++) { @@ -2715,3 +2721,9 @@ display_run(struct display *display) } } } + +void +display_exit(struct display *display) +{ + display->running = 0; +} diff --git a/clients/window.h b/clients/window.h index 59397f0f..20bf4e2b 100644 --- a/clients/window.h +++ b/clients/window.h @@ -135,6 +135,9 @@ display_watch_fd(struct display *display, void display_run(struct display *d); +void +display_exit(struct display *d); + enum pointer_type { POINTER_BOTTOM_LEFT, POINTER_BOTTOM_RIGHT,