From 152405b8f91df9efacca8395e6a630de995e78e7 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Thu, 14 Oct 2021 11:43:46 +0200
Subject: [PATCH] simple-touch: Exit on xdg_toplevel::close

This makes it possible to close this client without using a terminal,
especially useful on a phone.

Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
---
 clients/simple-touch.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/clients/simple-touch.c b/clients/simple-touch.c
index 15f5c9125a..7c9ada6468 100644
--- a/clients/simple-touch.c
+++ b/clients/simple-touch.c
@@ -63,9 +63,10 @@ struct touch {
 	struct xdg_surface *xdg_surface;
 	struct xdg_toplevel *xdg_toplevel;
 	struct buffer *buffer;
-	bool has_argb;
 	int width, height;
+	bool running;
 	bool wait_for_configure;
+	bool has_argb;
 };
 
 static struct buffer *
@@ -349,6 +350,8 @@ handle_toplevel_configure(void *data, struct xdg_toplevel *xdg_toplevel,
 static void
 handle_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel)
 {
+	struct touch *touch = data;
+	touch->running = false;
 }
 
 static const struct xdg_toplevel_listener xdg_toplevel_listener = {
@@ -404,6 +407,8 @@ touch_create(int width, int height)
 	touch->wait_for_configure = true;
 	wl_surface_commit(touch->surface);
 
+	touch->running = true;
+
 	return touch;
 }
 
@@ -438,7 +443,7 @@ main(int argc, char **argv)
 
 	touch = touch_create(600, 500);
 
-	while (ret != -1)
+	while (ret != -1 && touch->running)
 		ret = wl_display_dispatch(touch->display);
 
 	destroy_touch(touch);
-- 
GitLab