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,