-/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com>
- * See LICENSE file for license details.
- */
-
+/* See LICENSE file for copyright and license details. */
#include "dwm.h"
#include <errno.h>
#include <locale.h>
char stext[256];
int screen, sx, sy, sw, sh, wax, way, waw, wah;
-unsigned int bh, ntags, numlockmask;
+unsigned int bh, ntags;
+unsigned int bpos = BARPOS;
+unsigned int numlockmask = 0;
Atom wmatom[WMLast], netatom[NetLast];
Bool *seltag;
Bool selscreen = True;
cleanup(void) {
close(STDIN_FILENO);
while(stack) {
- if(stack->isbanned)
- XMoveWindow(dpy, stack->win, stack->x, stack->y);
+ unban(stack);
unmanage(stack);
}
if(dc.font.set)
dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
if(missing) {
while(n--)
- fprintf(stderr, "missing fontset: %s\n", missing[n]);
+ fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]);
XFreeStringList(missing);
}
if(dc.font.set) {
cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
/* init modifier map */
- numlockmask = 0;
modmap = XGetModifierMapping(dpy);
for (i = 0; i < 8; i++)
for (j = 0; j < modmap->max_keypermod; j++) {
XFreeModifiermap(modmap);
/* select for events */
wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
- | EnterWindowMask | LeaveWindowMask;
+ | EnterWindowMask | LeaveWindowMask | StructureNotifyMask;
wa.cursor = cursor[CurNormal];
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
+ XSelectInput(dpy, root, wa.event_mask);
grabkeys();
compileregs();
for(ntags = 0; tags[ntags]; ntags++);
wa.override_redirect = 1;
wa.background_pixmap = ParentRelative;
wa.event_mask = ButtonPressMask | ExposureMask;
- barwin = XCreateWindow(dpy, root, sx, sy + (TOPBAR ? 0 : sh - bh), sw, bh, 0,
+ barwin = XCreateWindow(dpy, root, sx, sy, sw, bh, 0,
DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
XDefineCursor(dpy, barwin, cursor[CurNormal]);
+ updatebarpos();
XMapRaised(dpy, barwin);
strcpy(stext, "dwm-"VERSION);
- /* windowarea */
- wax = sx;
- way = sy + (TOPBAR ? bh : 0);
- wah = sh - bh;
- waw = sw;
/* pixmap for everything */
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
dc.gc = XCreateGC(dpy, root, 0, 0);
XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
+ if(!dc.font.set)
+ XSetFont(dpy, dc.gc, dc.font.xfont->fid);
/* multihead support */
selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
}
readin = running = False;
}
+void
+updatebarpos(void) {
+ XEvent ev;
+
+ wax = sx;
+ way = sy;
+ wah = sh;
+ waw = sw;
+ switch(bpos) {
+ default:
+ wah -= bh;
+ way += bh;
+ XMoveWindow(dpy, barwin, sx, sy);
+ break;
+ case BarBot:
+ wah -= bh;
+ XMoveWindow(dpy, barwin, sx, sy + wah);
+ break;
+ case BarOff:
+ XMoveWindow(dpy, barwin, sx, sy - bh);
+ break;
+ }
+ XSync(dpy, False);
+ while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+}
+
/* There's no way to check accesses to destroyed windows, thus those cases are
* ignored (especially on UnmapNotify's). Other types of errors call Xlibs
* default error handler, which may call exit.
fd_set rd;
XEvent ev;
- if(argc == 2 && !strncmp("-v", argv[1], 3))
- eprint("dwm-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n");
+ if(argc == 2 && !strcmp("-v", argv[1]))
+ eprint("dwm-"VERSION", © 2006-2007 A. R. Garbe, S. van Dijk, J. Salmi, P. Hruby, S. Nagy\n");
else if(argc != 1)
eprint("usage: dwm [-v]\n");
setlocale(LC_CTYPE, "");