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 <ppaalanen@gmail.com>
diff --git a/clients/window.c b/clients/window.c
index 09e9b70..0e95f8e 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -79,6 +79,8 @@
 	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 @@
 	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 @@
 		}
 	}
 }
+
+void
+display_exit(struct display *display)
+{
+	display->running = 0;
+}