From bd2f7fbb4082d947ec2738cd31d403e9f0c10f50 Mon Sep 17 00:00:00 2001
From: "Devin J. Pohly" <djpohly@gmail.com>
Date: Wed, 26 May 2021 23:30:49 -0500
Subject: exit cleanly on INT/TERM

---
 dwl.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/dwl.c b/dwl.c
index a38f452..a8e1dcd 100644
--- a/dwl.c
+++ b/dwl.c
@@ -259,6 +259,7 @@ static void pointerfocus(Client *c, struct wlr_surface *surface,
 		double sx, double sy, uint32_t time);
 static void printstatus(void);
 static void quit(const Arg *arg);
+static void quitsignal(int signo);
 static void render(struct wlr_surface *surface, int sx, int sy, void *data);
 static void renderclients(Monitor *m, struct timespec *now);
 static void renderlayer(struct wl_list *layer_surfaces, struct timespec *now);
@@ -1578,6 +1579,12 @@ quit(const Arg *arg)
 	wl_display_terminate(dpy);
 }
 
+void
+quitsignal(int signo)
+{
+	quit(NULL);
+}
+
 void
 render(struct wlr_surface *surface, int sx, int sy, void *data)
 {
@@ -1965,8 +1972,10 @@ setup(void)
 	 * clients from the Unix socket, manging Wayland globals, and so on. */
 	dpy = wl_display_create();
 
-	/* clean up child processes immediately */
+	/* Set up signal handlers */
 	sigchld(0);
+	signal(SIGINT, quitsignal);
+	signal(SIGTERM, quitsignal);
 
 	/* The backend is a wlroots feature which abstracts the underlying input and
 	 * output hardware. The autocreate option will choose the most suitable
-- 
cgit v1.2.3