|
|
|
@ -206,6 +206,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 void tag(const Arg *arg);
|
|
|
|
|
static void tagmon(const Arg *arg);
|
|
|
|
@ -261,6 +263,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;
|
|
|
|
@ -1249,6 +1252,7 @@ propertynotify(XEvent *e)
|
|
|
|
|
void
|
|
|
|
|
quit(const Arg *arg)
|
|
|
|
|
{
|
|
|
|
|
if(arg->i) restart = 1;
|
|
|
|
|
running = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1537,6 +1541,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);
|
|
|
|
@ -1637,6 +1644,20 @@ sigchld(int unused)
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
@ -2146,6 +2167,7 @@ main(int argc, char *argv[])
|
|
|
|
|
#endif /* __OpenBSD__ */
|
|
|
|
|
scan();
|
|
|
|
|
run();
|
|
|
|
|
if(restart) execvp(argv[0], argv);
|
|
|
|
|
cleanup();
|
|
|
|
|
XCloseDisplay(dpy);
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|