diff --git a/config.anselm.h b/config.anselm.h --- a/config.anselm.h +++ b/config.anselm.h @@ -37,40 +37,34 @@ setanselmgeoms(void) { setanselmgeoms(void) { /* screen dimensions */ - sx = 0; - sy = 0; - sw = DisplayWidth(dpy, screen); - sh = DisplayHeight(dpy, screen); + scr.x = 0; + scr.y = 0; + scr.w = DisplayWidth(dpy, screen); + scr.h = DisplayHeight(dpy, screen); /* bar position */ - bx = sx; - by = sy; - bw = 1280; - bh = dc.font.height + 2; + bar = scr; + bar.w = 1280; + bar.h = dc.font.height + 2; /* window area */ - wx = sx; - wy = sy + bh; - ww = sw; - wh = sh - bh; + win = scr; + win.y += bar.h; + win.h -= bar.h; /* master area */ - mx = wx; - my = wy; - mw = 1280; - mh = 800 - bh; + mas = win; + mas.w = 1280; + mas.h = 800 - bar.h; /* tile area */ - tx = 1280; - ty = 0; - tw = sw - 1280; - th = sh; + til.x = 1280; + til.y = 0; + til.w = scr.w - 1280; + til.h = scr.h; /* monocle area */ - mox = mx; - moy = my; - mow = mw; - moh = mh; + mon = mas; } void diff --git a/dwm.c b/dwm.c --- a/dwm.c +++ b/dwm.c @@ -69,6 +69,10 @@ struct Client { Client *snext; Window win; }; + +typedef struct { + int x, y, w, h; +} Rectangle; typedef struct { int x, y, w, h; @@ -193,9 +197,10 @@ void zoom(const char *arg); /* variables */ char stext[256], buf[256]; -int screen, sx, sy, sw, sh; +int screen; int (*xerrorxlib)(Display *, XErrorEvent *); -int bx, by, bw, bh, blw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh; +int blw; +Rectangle scr, bar, win, mas, til, mon; unsigned int numlockmask = 0; void (*handler[LASTEvent]) (XEvent *) = { [ButtonPress] = buttonpress, @@ -296,7 +301,7 @@ ban(Client *c) { ban(Client *c) { if(c->isbanned) return; - XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); + XMoveWindow(dpy, c->win, c->x + 2 * scr.w, c->y); c->isbanned = True; } @@ -408,7 +413,7 @@ configurenotify(XEvent *e) { configurenotify(XEvent *e) { XConfigureEvent *ev = &e->xconfigure; - if(ev->window == root && (ev->width != sw || ev->height != sh)) { + if(ev->window == root && (ev->width != scr.w || ev->height != scr.h)) { setgeoms(); updatebarpos(); arrange(); @@ -426,17 +431,17 @@ configurerequest(XEvent *e) { c->border = ev->border_width; if(c->isfixed || c->isfloating || lt->isfloating) { if(ev->value_mask & CWX) - c->x = sx + ev->x; + c->x = scr.x + ev->x; if(ev->value_mask & CWY) - c->y = sy + ev->y; + c->y = scr.y + ev->y; if(ev->value_mask & CWWidth) c->w = ev->width; if(ev->value_mask & CWHeight) c->h = ev->height; - if((c->x - sx + c->w) > sw && c->isfloating) - c->x = sx + (sw / 2 - c->w / 2); /* center in x direction */ - if((c->y - sy + c->h) > sh && c->isfloating) - c->y = sy + (sh / 2 - c->h / 2); /* center in y direction */ + if((c->x - scr.x + c->w) > scr.w && c->isfloating) + c->x = scr.x + (scr.w / 2 - c->w / 2); /* center in x direction */ + if((c->y - scr.y + c->h) > scr.h && c->isfloating) + c->y = scr.y + (scr.h / 2 - c->h / 2); /* center in y direction */ if((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))) configure(c); @@ -519,13 +524,13 @@ drawbar(void) { drawtext(lt->symbol, dc.norm, False); x = dc.x + dc.w; dc.w = textw(stext); - dc.x = bw - dc.w; + dc.x = bar.w - dc.w; if(dc.x < x) { dc.x = x; - dc.w = bw - x; + dc.w = bar.w - x; } drawtext(stext, dc.norm, False); - if((dc.w = dc.x - x) > bh) { + if((dc.w = dc.x - x) > bar.h) { dc.x = x; if(c) { drawtext(c->name, dc.sel, False); @@ -534,7 +539,7 @@ drawbar(void) { else drawtext(NULL, dc.norm, False); } - XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); + XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bar.w, bar.h, 0, 0); XSync(dpy, False); } @@ -986,20 +991,20 @@ manage(Window w, XWindowAttributes *wa) c->w = wa->width; c->h = wa->height; c->oldborder = wa->border_width; - if(c->w == sw && c->h == sh) { - c->x = sx; - c->y = sy; + if(c->w == scr.w && c->h == scr.h) { + c->x = scr.x; + c->y = scr.y; c->border = wa->border_width; } else { - if(c->x + c->w + 2 * c->border > wx + ww) - c->x = wx + ww - c->w - 2 * c->border; - if(c->y + c->h + 2 * c->border > wy + wh) - c->y = wy + wh - c->h - 2 * c->border; - if(c->x < wx) - c->x = wx; - if(c->y < wy) - c->y = wy; + if(c->x + c->w + 2 * c->border > win.x + win.w) + c->x = win.x + win.w - c->w - 2 * c->border; + if(c->y + c->h + 2 * c->border > win.y + win.h) + c->y = win.y + win.h - c->h - 2 * c->border; + if(c->x < win.x) + c->x = win.x; + if(c->y < win.y) + c->y = win.y; c->border = BORDERPX; } @@ -1056,7 +1061,7 @@ monocle(void) { for(c = clients; c; c = c->next) if(isvisible(c)) - resize(c, mox, moy, mow, moh, RESIZEHINTS); + resize(c, mon.x, mon.y, mon.w, mon.h, RESIZEHINTS); } void @@ -1087,14 +1092,14 @@ movemouse(Client *c) { XSync(dpy, False); nx = ocx + (ev.xmotion.x - x1); ny = ocy + (ev.xmotion.y - y1); - if(abs(wx - nx) < SNAP) - nx = wx; - else if(abs((wx + ww) - (nx + c->w + 2 * c->border)) < SNAP) - nx = wx + ww - c->w - 2 * c->border; - if(abs(wy - ny) < SNAP) - ny = wy; - else if(abs((wy + wh) - (ny + c->h + 2 * c->border)) < SNAP) - ny = wy + wh - c->h - 2 * c->border; + if(abs(win.x - nx) < SNAP) + nx = win.x; + else if(abs((win.x + win.w) - (nx + c->w + 2 * c->border)) < SNAP) + nx = win.x + win.w - c->w - 2 * c->border; + if(abs(win.y - ny) < SNAP) + ny = win.y; + else if(abs((win.y + win.h) - (ny + c->h + 2 * c->border)) < SNAP) + ny = win.y + win.h - c->h - 2 * c->border; if(!c->isfloating && !lt->isfloating && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP)) togglefloating(NULL); if((lt->isfloating) || c->isfloating) @@ -1203,14 +1208,14 @@ resize(Client *c, int x, int y, int w, i } if(w <= 0 || h <= 0) return; - if(x > sx + sw) - x = sw - w - 2 * c->border; - if(y > sy + sh) - y = sh - h - 2 * c->border; - if(x + w + 2 * c->border < sx) - x = sx; - if(y + h + 2 * c->border < sy) - y = sy; + if(x > scr.x + scr.w) + x = scr.w - w - 2 * c->border; + if(y > scr.y + scr.h) + y = scr.h - h - 2 * c->border; + if(x + w + 2 * c->border < scr.x) + x = scr.x; + if(y + h + 2 * c->border < scr.y) + y = scr.y; if(c->x != x || c->y != y || c->w != w || c->h != h) { c->x = wc.x = x; c->y = wc.y = y; @@ -1393,40 +1398,31 @@ setdefaultgeoms(void) { setdefaultgeoms(void) { /* screen dimensions */ - sx = 0; - sy = 0; - sw = DisplayWidth(dpy, screen); - sh = DisplayHeight(dpy, screen); + scr.x = 0; + scr.y = 0; + scr.w = DisplayWidth(dpy, screen); + scr.h = DisplayHeight(dpy, screen); /* bar position */ - bx = sx; - by = sy; - bw = sw; - bh = dc.font.height + 2; + bar = scr; + bar.h = dc.font.height + 2; /* window area */ - wx = sx; - wy = sy + bh; - ww = sw; - wh = sh - bh; + win = scr; + win.y += bar.h; + win.h -= bar.h; /* master area */ - mx = wx; - my = wy; - mw = ((float)sw) * 0.55; - mh = wh; + mas = win; + mas.w = ((float)scr.w) * 0.55; /* tile area */ - tx = mx + mw; - ty = wy; - tw = ww - mw; - th = wh; + til = win; + til.x = mas.x + mas.w; + til.w -= mas.w; /* monocle area */ - mox = wx; - moy = wy; - mow = ww; - moh = wh; + mon = win; } void @@ -1487,8 +1483,8 @@ setup(void) { dc.sel[ColBG] = getcolor(SELBGCOLOR); dc.sel[ColFG] = getcolor(SELFGCOLOR); initfont(FONT); - dc.h = bh; - dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen)); + dc.h = bar.h; + dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bar.h, DefaultDepth(dpy, screen)); dc.gc = XCreateGC(dpy, root, 0, 0); XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); if(!dc.font.set) @@ -1513,7 +1509,7 @@ setup(void) { wa.background_pixmap = ParentRelative; wa.event_mask = ButtonPressMask|ExposureMask; - barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen), + barwin = XCreateWindow(dpy, root, bar.x, bar.y, bar.w, bar.h, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); XDefineCursor(dpy, barwin, cursor[CurNormal]); @@ -1600,17 +1596,17 @@ tileh(void) { if(--n == 0) return; - x = tx; - w = tw / n; - if(w < bh) - w = tw; + x = til.x; + w = til.w / n; + if(w < bar.h) + w = til.w; for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) { if(i + 1 == n) /* remainder */ - tileresize(c, x, ty, (tx + tw) - x - 2 * c->border, th - 2 * c->border); + tileresize(c, x, til.y, (til.x + til.w) - x - 2 * c->border, til.h - 2 * c->border); else - tileresize(c, x, ty, w - 2 * c->border, th - 2 * c->border); - if(w != tw) + tileresize(c, x, til.y, w - 2 * c->border, til.h - 2 * c->border); + if(w != til.w) x = c->x + c->w + 2 * c->border; } } @@ -1620,16 +1616,16 @@ tilemaster(unsigned int n) { Client *c = nexttiled(clients); if(n == 1) - tileresize(c, mox, moy, mow - 2 * c->border, moh - 2 * c->border); + tileresize(c, mon.x, mon.y, mon.w - 2 * c->border, mon.h - 2 * c->border); else - tileresize(c, mx, my, mw - 2 * c->border, mh - 2 * c->border); + tileresize(c, mas.x, mas.y, mas.w - 2 * c->border, mas.h - 2 * c->border); return c; } void tileresize(Client *c, int x, int y, int w, int h) { resize(c, x, y, w, h, RESIZEHINTS); - if((RESIZEHINTS) && ((c->h < bh) || (c->h > h) || (c->w < bh) || (c->w > w))) + if((RESIZEHINTS) && ((c->h < bar.h) || (c->h > h) || (c->w < bar.h) || (c->w > w))) /* client doesn't accept size constraints */ resize(c, x, y, w, h, False); } @@ -1646,17 +1642,17 @@ tilev(void) { if(--n == 0) return; - y = ty; - h = th / n; - if(h < bh) - h = th; + y = til.y; + h = til.h / n; + if(h < bar.h) + h = til.h; for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) { if(i + 1 == n) /* remainder */ - tileresize(c, tx, y, tw - 2 * c->border, (ty + th) - y - 2 * c->border); + tileresize(c, til.x, y, til.w - 2 * c->border, (til.y + til.h) - y - 2 * c->border); else - tileresize(c, tx, y, tw - 2 * c->border, h - 2 * c->border); - if(h != th) + tileresize(c, til.x, y, til.w - 2 * c->border, h - 2 * c->border); + if(h != til.h) y = c->y + c->h + 2 * c->border; } } @@ -1742,8 +1738,8 @@ updatebarpos(void) { if(dc.drawable != 0) XFreePixmap(dpy, dc.drawable); - dc.drawable = XCreatePixmap(dpy, root, bw, bh, DefaultDepth(dpy, screen)); - XMoveResizeWindow(dpy, barwin, bx, by, bw, bh); + dc.drawable = XCreatePixmap(dpy, root, bar.w, bar.h, DefaultDepth(dpy, screen)); + XMoveResizeWindow(dpy, barwin, bar.x, bar.y, bar.w, bar.h); } void