#define MAXTAGLEN 16
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
#define TAGMASK ((int)((1LL << LENGTH(tags)) - 1))
+#define TEXTW(x) (textnw(x, strlen(x)) + dc.font.height)
#define VISIBLE(x) ((x)->tags & tagset[seltags])
/* enums */
typedef struct {
const char *symbol;
void (*arrange)(void);
- void (*updategeom)(void);
} Layout;
typedef struct {
void spawn(const void *arg);
void tag(const void *arg);
uint textnw(const char *text, uint len);
-uint textw(const char *text);
void tile(void);
void tileresize(Client *c, int x, int y, int w, int h);
void togglebar(const void *arg);
void updatebar(void);
void updategeom(void);
void updatesizehints(Client *c);
-void updatetilegeom(void);
void updatetitle(Client *c);
void updatewmhints(Client *c);
void view(const void *arg);
char stext[256];
int screen, sx, sy, sw, sh;
int bx, by, bw, bh, blw, wx, wy, ww, wh;
-int mx, my, mw, mh, tx, ty, tw, th;
uint seltags = 0;
int (*xerrorxlib)(Display *, XErrorEvent *);
uint numlockmask = 0;
if(ev->window == barwin) {
x = 0;
for(i = 0; i < LENGTH(tags); i++) {
- x += textw(tags[i]);
+ x += TEXTW(tags[i]);
if(ev->x < x) {
mask = 1 << i;
if(ev->button == Button1) {
dc.x = 0;
for(c = stack; c && !VISIBLE(c); c = c->snext);
for(i = 0; i < LENGTH(tags); i++) {
- dc.w = textw(tags[i]);
+ dc.w = TEXTW(tags[i]);
if(tagset[seltags] & 1 << i) {
drawtext(tags[i], dc.sel, isurgent(i));
drawsquare(c && c->tags & 1 << i, isoccupied(i), isurgent(i), dc.sel);
}
else
x = dc.x;
- dc.w = textw(stext);
+ dc.w = TEXTW(stext);
dc.x = bw - dc.w;
if(dc.x < x) {
dc.x = x;
if(d < 0.1 || d > 0.9)
return;
mfact = d;
- updatetilegeom();
arrange();
}
/* init bar */
for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
- w = textw(layouts[i].symbol);
+ w = TEXTW(layouts[i].symbol);
blw = MAX(blw, w);
}
return XTextWidth(dc.font.xfont, text, len);
}
-uint
-textw(const char *text) {
- return textnw(text, strlen(text)) + dc.font.height;
-}
-
void
tile(void) {
- int x, y, h, w;
+ int x, y, h, w, mx, my, mw, mh, tx, ty, tw, th;
uint i, n;
Client *c;
if(n == 0)
return;
+ /* master area geometry */
+ mx = wx;
+ my = wy;
+ mw = mfact * ww;
+ mh = wh;
+
+ /* tile area geometry */
+ tx = mx + mw;
+ ty = wy;
+ tw = ww - mw;
+ th = wh;
+
/* master */
c = nexttiled(clients);
bx = wx;
by = showbar ? (topbar ? wy - bh : wy + wh) : -bh;
bw = ww;
-
- /* update layout geometries */
- for(i = 0; i < LENGTH(layouts); i++)
- if(layouts[i].updategeom)
- layouts[i].updategeom();
}
void
&& c->maxw == c->minw && c->maxh == c->minh);
}
-void
-updatetilegeom(void) {
- /* master area geometry */
- mx = wx;
- my = wy;
- mw = mfact * ww;
- mh = wh;
-
- /* tile area geometry */
- tx = mx + mw;
- ty = wy;
- tw = ww - mw;
- th = wh;
-}
-
void
updatetitle(Client *c) {
if(!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))