summaryrefslogtreecommitdiff
path: root/dwm.c
diff options
context:
space:
mode:
authorivan-boikov <ik.boikov.public@protonmail.com>2024-09-01 14:20:59 +0200
committerivan-boikov <ik.boikov.public@protonmail.com>2024-09-01 14:20:59 +0200
commitf8f947a87920cb87e40f3904a457c27cd581eb57 (patch)
treecfdb83e428484d4c8f5a3274705f5a2437a21046 /dwm.c
parent311cce62833fe1407796543554ac56067c780736 (diff)
Applied dwm-restartsig-20180523-6.2.diffdwm-restartsig-20180523-6.2.diff
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 67c6b2b..7affc55 100644
--- a/dwm.c
+++ b/dwm.c
@@ -205,6 +205,8 @@ static void setmfact(const Arg *arg);
static void setup(void);
static void seturgent(Client *c, int urg);
static void showhide(Client *c);
+static void sighup(int unused);
+static void sigterm(int unused);
static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
@@ -260,6 +262,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
[UnmapNotify] = unmapnotify
};
static Atom wmatom[WMLast], netatom[NetLast];
+static int restart = 0;
static int running = 1;
static Cur *cursor[CurLast];
static Clr **scheme;
@@ -1258,6 +1261,7 @@ propertynotify(XEvent *e)
void
quit(const Arg *arg)
{
+ if(arg->i) restart = 1;
running = 0;
}
@@ -1553,6 +1557,9 @@ setup(void)
/* clean up any zombies (inherited from .xinitrc etc) immediately */
while (waitpid(-1, NULL, WNOHANG) > 0);
+ signal(SIGHUP, sighup);
+ signal(SIGTERM, sigterm);
+
/* init screen */
screen = DefaultScreen(dpy);
sw = DisplayWidth(dpy, screen);
@@ -1645,6 +1652,20 @@ showhide(Client *c)
}
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)
{
struct sigaction sa;
@@ -2159,6 +2180,7 @@ main(int argc, char *argv[])
#endif /* __OpenBSD__ */
scan();
run();
+ if(restart) execvp(argv[0], argv);
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;