-static void
-initbar(void) {
- XSetWindowAttributes wa;
-
- wa.override_redirect = 1;
- wa.background_pixmap = ParentRelative;
- wa.event_mask = ButtonPressMask | ExposureMask;
- 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);
- 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);
-}
-
-static unsigned int
-textw(const char *text) {
- return textnw(text, strlen(text)) + dc.font.height;
-}
-
-static void
-togglebar(const char *arg) {
- if(bpos == BarOff)
- bpos = (BARPOS == BarOff) ? BarTop : BARPOS;
- else
- bpos = BarOff;
- updatebarpos();
- arrange();
-}
-
-static 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));
-}
-
-static void
-attachstack(Client *c) {
- c->snext = stack;
- stack = c;
-}
-
-static void
-detachstack(Client *c) {
- Client **tc;
-
- for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext);
- *tc = c->snext;
-}
-
-static void
-grabbuttons(Client *c, Bool focused) {
- XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
-
- if(focused) {
- XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
-
- XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
-
- XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);