about summary refs log tree commit diff stats
path: root/dwm.c
diff options
context:
space:
mode:
authorAcid Bong <acid-bong@cock.lt>2022-10-21 23:13:22 +0300
committerAcid Bong <acid-bong@cock.lt>2022-10-21 23:13:22 +0300
commite299bf86bbb1b1f9ee636bdb7e05c7cef40ae517 (patch)
tree5945764cf6e6c494d8e270e2cac7a654a6f13454 /dwm.c
parentc54752d0d8b64f16fd3a1f78009296eec2b47223 (diff)
downloaddwm-e299bf86bbb1b1f9ee636bdb7e05c7cef40ae517.tar.gz
patch: restartsig
Diffstat (limited to 'dwm.c')
-rw-r--r--dwm.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/dwm.c b/dwm.c
index 0fae8e5..97c440a 100644
--- a/dwm.c
+++ b/dwm.c
@@ -232,6 +232,8 @@ static void setup(void);
 static void seturgent(Client *c, int urg);
 static void showhide(Client *c);
 static void sigchld(int unused);
+static void sighup(int unused);
+static void sigterm(int unused);
 static void spawn(const Arg *arg);
 static Monitor *systraytomon(Monitor *m);
 static void tag(const Arg *arg);
@@ -292,6 +294,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
 	[UnmapNotify] = unmapnotify
 };
 static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
+static int restart = 0;
 static int running = 1;
 static Cur *cursor[CurLast];
 static Clr **scheme;
@@ -1357,6 +1360,7 @@ propertynotify(XEvent *e)
 void
 quit(const Arg *arg)
 {
+	if(arg->i) restart = 1;
 	running = 0;
 }
 
@@ -1709,6 +1713,9 @@ setup(void)
 	/* clean up any zombies immediately */
 	sigchld(0);
 
+	signal(SIGHUP, sighup);
+	signal(SIGTERM, sigterm);
+
 	/* init screen */
 	screen = DefaultScreen(dpy);
 	sw = DisplayWidth(dpy, screen);
@@ -1818,6 +1825,20 @@ sigchld(int unused)
 }
 
 void
+sighup(int unused)
+{
+	Arg a = {.i = 1};
+	quit(&a);
+}
+
+void
+sigterm(int unused)
+{
+	Arg a = {.i = 0};
+	quit(&a);
+}
+
+void
 spawn(const Arg *arg)
 {
 	if (fork() == 0) {
@@ -2507,6 +2528,7 @@ main(int argc, char *argv[])
 #endif /* __OpenBSD__ */
 	scan();
 	run();
+	if(restart) execvp(argv[0], argv);
 	cleanup();
 	XCloseDisplay(dpy);
 	return EXIT_SUCCESS;