|
|
@ -145,11 +145,11 @@ static void configurerequest(XEvent *e);
|
|
|
|
static void destroynotify(XEvent *e);
|
|
|
|
static void destroynotify(XEvent *e);
|
|
|
|
static void detach(Client *c);
|
|
|
|
static void detach(Client *c);
|
|
|
|
static void detachstack(Client *c);
|
|
|
|
static void detachstack(Client *c);
|
|
|
|
|
|
|
|
static void die(const char *errstr, ...);
|
|
|
|
static void drawbar(void);
|
|
|
|
static void drawbar(void);
|
|
|
|
static void drawsquare(Bool filled, Bool empty, Bool invert, ulong col[ColLast]);
|
|
|
|
static void drawsquare(Bool filled, Bool empty, Bool invert, ulong col[ColLast]);
|
|
|
|
static void drawtext(const char *text, ulong col[ColLast], Bool invert);
|
|
|
|
static void drawtext(const char *text, ulong col[ColLast], Bool invert);
|
|
|
|
static void enternotify(XEvent *e);
|
|
|
|
static void enternotify(XEvent *e);
|
|
|
|
static void eprint(const char *errstr, ...);
|
|
|
|
|
|
|
|
static void expose(XEvent *e);
|
|
|
|
static void expose(XEvent *e);
|
|
|
|
static void focus(Client *c);
|
|
|
|
static void focus(Client *c);
|
|
|
|
static void focusin(XEvent *e);
|
|
|
|
static void focusin(XEvent *e);
|
|
|
@ -343,7 +343,7 @@ checkotherwm(void) {
|
|
|
|
XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
|
|
|
|
XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
|
|
|
|
XSync(dpy, False);
|
|
|
|
XSync(dpy, False);
|
|
|
|
if(otherwm)
|
|
|
|
if(otherwm)
|
|
|
|
eprint("dwm: another window manager is already running\n");
|
|
|
|
die("dwm: another window manager is already running\n");
|
|
|
|
XSetErrorHandler(NULL);
|
|
|
|
XSetErrorHandler(NULL);
|
|
|
|
xerrorxlib = XSetErrorHandler(xerror);
|
|
|
|
xerrorxlib = XSetErrorHandler(xerror);
|
|
|
|
XSync(dpy, False);
|
|
|
|
XSync(dpy, False);
|
|
|
@ -473,6 +473,16 @@ detachstack(Client *c) {
|
|
|
|
*tc = c->snext;
|
|
|
|
*tc = c->snext;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
|
|
die(const char *errstr, ...) {
|
|
|
|
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
va_start(ap, errstr);
|
|
|
|
|
|
|
|
vfprintf(stderr, errstr, ap);
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
drawbar(void) {
|
|
|
|
drawbar(void) {
|
|
|
|
int i, x;
|
|
|
|
int i, x;
|
|
|
@ -580,16 +590,6 @@ enternotify(XEvent *e) {
|
|
|
|
focus(NULL);
|
|
|
|
focus(NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
|
|
eprint(const char *errstr, ...) {
|
|
|
|
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
va_start(ap, errstr);
|
|
|
|
|
|
|
|
vfprintf(stderr, errstr, ap);
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
expose(XEvent *e) {
|
|
|
|
expose(XEvent *e) {
|
|
|
|
XExposeEvent *ev = &e->xexpose;
|
|
|
|
XExposeEvent *ev = &e->xexpose;
|
|
|
@ -667,7 +667,7 @@ getcolor(const char *colstr) {
|
|
|
|
XColor color;
|
|
|
|
XColor color;
|
|
|
|
|
|
|
|
|
|
|
|
if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
|
|
|
|
if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
|
|
|
|
eprint("error, cannot allocate color '%s'\n", colstr);
|
|
|
|
die("error, cannot allocate color '%s'\n", colstr);
|
|
|
|
return color.pixel;
|
|
|
|
return color.pixel;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -793,7 +793,7 @@ initfont(const char *fontstr) {
|
|
|
|
dc.font.xfont = NULL;
|
|
|
|
dc.font.xfont = NULL;
|
|
|
|
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
|
|
|
|
if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr))
|
|
|
|
&& !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
|
|
|
|
&& !(dc.font.xfont = XLoadQueryFont(dpy, "fixed")))
|
|
|
|
eprint("error, cannot load font: '%s'\n", fontstr);
|
|
|
|
die("error, cannot load font: '%s'\n", fontstr);
|
|
|
|
dc.font.ascent = dc.font.xfont->ascent;
|
|
|
|
dc.font.ascent = dc.font.xfont->ascent;
|
|
|
|
dc.font.descent = dc.font.xfont->descent;
|
|
|
|
dc.font.descent = dc.font.xfont->descent;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -877,7 +877,7 @@ manage(Window w, XWindowAttributes *wa) {
|
|
|
|
XWindowChanges wc;
|
|
|
|
XWindowChanges wc;
|
|
|
|
|
|
|
|
|
|
|
|
if(!(c = calloc(1, sizeof(Client))))
|
|
|
|
if(!(c = calloc(1, sizeof(Client))))
|
|
|
|
eprint("fatal: could not calloc() %u bytes\n", sizeof(Client));
|
|
|
|
die("fatal: could not calloc() %u bytes\n", sizeof(Client));
|
|
|
|
c->win = w;
|
|
|
|
c->win = w;
|
|
|
|
|
|
|
|
|
|
|
|
/* geometry */
|
|
|
|
/* geometry */
|
|
|
@ -1216,7 +1216,7 @@ run(void) {
|
|
|
|
if(select(xfd + 1, &rd, NULL, NULL, NULL) == -1) {
|
|
|
|
if(select(xfd + 1, &rd, NULL, NULL, NULL) == -1) {
|
|
|
|
if(errno == EINTR)
|
|
|
|
if(errno == EINTR)
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
eprint("select failed\n");
|
|
|
|
die("select failed\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(FD_ISSET(STDIN_FILENO, &rd)) {
|
|
|
|
if(FD_ISSET(STDIN_FILENO, &rd)) {
|
|
|
|
switch((r = read(STDIN_FILENO, sbuf + offset, len - offset))) {
|
|
|
|
switch((r = read(STDIN_FILENO, sbuf + offset, len - offset))) {
|
|
|
@ -1695,15 +1695,15 @@ zoom(const Arg *arg) {
|
|
|
|
int
|
|
|
|
int
|
|
|
|
main(int argc, char *argv[]) {
|
|
|
|
main(int argc, char *argv[]) {
|
|
|
|
if(argc == 2 && !strcmp("-v", argv[1]))
|
|
|
|
if(argc == 2 && !strcmp("-v", argv[1]))
|
|
|
|
eprint("dwm-"VERSION", © 2006-2008 dwm engineers, see LICENSE for details\n");
|
|
|
|
die("dwm-"VERSION", © 2006-2008 dwm engineers, see LICENSE for details\n");
|
|
|
|
else if(argc != 1)
|
|
|
|
else if(argc != 1)
|
|
|
|
eprint("usage: dwm [-v]\n");
|
|
|
|
die("usage: dwm [-v]\n");
|
|
|
|
|
|
|
|
|
|
|
|
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
|
|
|
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
|
|
|
|
fprintf(stderr, "warning: no locale support\n");
|
|
|
|
fprintf(stderr, "warning: no locale support\n");
|
|
|
|
|
|
|
|
|
|
|
|
if(!(dpy = XOpenDisplay(0)))
|
|
|
|
if(!(dpy = XOpenDisplay(0)))
|
|
|
|
eprint("dwm: cannot open display\n");
|
|
|
|
die("dwm: cannot open display\n");
|
|
|
|
|
|
|
|
|
|
|
|
checkotherwm();
|
|
|
|
checkotherwm();
|
|
|
|
setup();
|
|
|
|
setup();
|
|
|
|