Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
patch: restartsig
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
fb1c33f
..
7665557
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-219,6
+219,8
@@
static void setup(void);
static void seturgent(Client *c, int urg);
static void showhide(Client *c);
static void sigchld(int unused);
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 void tag(const Arg *arg);
static void tagmon(const Arg *arg);
static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
@@
-281,6
+283,7
@@
static void (*handler[LASTEvent]) (XEvent *) = {
[UnmapNotify] = unmapnotify
};
static Atom wmatom[WMLast], netatom[NetLast];
[UnmapNotify] = unmapnotify
};
static Atom wmatom[WMLast], netatom[NetLast];
+static int restart = 0;
static int running = 1;
static Cur *cursor[CurLast];
static Clr **scheme;
static int running = 1;
static Cur *cursor[CurLast];
static Clr **scheme;
@@
-1336,6
+1339,7
@@
propertynotify(XEvent *e)
void
quit(const Arg *arg)
{
void
quit(const Arg *arg)
{
+ if(arg->i) restart = 1;
running = 0;
}
running = 0;
}
@@
-1637,6
+1641,9
@@
setup(void)
/* clean up any zombies immediately */
sigchld(0);
/* clean up any zombies immediately */
sigchld(0);
+ signal(SIGHUP, sighup);
+ signal(SIGTERM, sigterm);
+
/* init screen */
screen = DefaultScreen(dpy);
sw = DisplayWidth(dpy, screen);
/* init screen */
screen = DefaultScreen(dpy);
sw = DisplayWidth(dpy, screen);
@@
-1738,6
+1745,20
@@
sigchld(int unused)
while (0 < waitpid(-1, NULL, WNOHANG));
}
while (0 < waitpid(-1, NULL, WNOHANG));
}
+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)
{
void
spawn(const Arg *arg)
{
@@
-2435,6
+2456,7
@@
main(int argc, char *argv[])
#endif /* __OpenBSD__ */
scan();
run();
#endif /* __OpenBSD__ */
scan();
run();
+ if(restart) execvp(argv[0], argv);
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;