window: add display_exit()
authorPekka Paalanen <ppaalanen@gmail.com>
Thu, 15 Dec 2011 08:14:07 +0000 (10:14 +0200)
committerPekka Paalanen <ppaalanen@gmail.com>
Thu, 22 Dec 2011 09:27:50 +0000 (11:27 +0200)
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 <ppaalanen@gmail.com>
clients/window.c
clients/window.h

index 09e9b70..0e95f8e 100644 (file)
@@ -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;
+}
index 59397f0..20bf4e2 100644 (file)
@@ -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,