some polishing in tileh/tilev

new_dwm
Anselm R Garbe 17 years ago
parent 69439715c0
commit 831428b00c

102
dwm.c

@ -117,6 +117,7 @@ void cleanup(void);
void configure(Client *c); void configure(Client *c);
void configurenotify(XEvent *e); void configurenotify(XEvent *e);
void configurerequest(XEvent *e); void configurerequest(XEvent *e);
unsigned int counttiled(void);
void destroynotify(XEvent *e); void destroynotify(XEvent *e);
void detach(Client *c); void detach(Client *c);
void detachstack(Client *c); void detachstack(Client *c);
@ -170,7 +171,8 @@ unsigned int textnw(const char *text, unsigned int len);
unsigned int textw(const char *text); unsigned int textw(const char *text);
void tileh(void); void tileh(void);
void tilehstack(unsigned int n); void tilehstack(unsigned int n);
unsigned int tilemaster(void); Client *tilemaster(unsigned int n);
void tileresize(Client *c, int x, int y, int w, int h);
void tilev(void); void tilev(void);
void tilevstack(unsigned int n); void tilevstack(unsigned int n);
void togglefloating(const char *arg); void togglefloating(const char *arg);
@ -458,6 +460,15 @@ configurerequest(XEvent *e) {
XSync(dpy, False); XSync(dpy, False);
} }
unsigned int
counttiled(void) {
unsigned int n;
Client *c;
for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next), n++);
return n;
}
void void
destroynotify(XEvent *e) { destroynotify(XEvent *e) {
Client *c; Client *c;
@ -1578,90 +1589,77 @@ textw(const char *text) {
return textnw(text, strlen(text)) + dc.font.height; return textnw(text, strlen(text)) + dc.font.height;
} }
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)))
/* client doesn't accept size constraints */
resize(c, x, y, w, h, False);
}
void void
tileh(void) { tileh(void) {
tilehstack(tilemaster()); int x, w;
} unsigned int i, n = counttiled();
void
tilehstack(unsigned int n) {
int i, x, w;
Client *c; Client *c;
if(n == 0) if(n == 0)
return; return;
c = tilemaster(n);
if(--n == 0)
return;
x = tx; x = tx;
w = tw / n; w = tw / n;
if(w < bh) if(w < bh)
w = tw; w = tw;
for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
if(i > 0) { if(i + 1 == n) /* remainder */
if(i > 1 && i == n) /* remainder */ tileresize(c, x, ty, (tx + tw) - x - 2 * c->border, th - 2 * c->border);
tileresize(c, x, ty, (tx + tw) - x - 2 * c->border, else
th - 2 * c->border); tileresize(c, x, ty, w - 2 * c->border, th - 2 * c->border);
else if(w != tw)
tileresize(c, x, ty, w - 2 * c->border, x = c->x + c->w + 2 * c->border;
th - 2 * c->border); }
if(w != tw)
x = c->x + c->w + 2 * c->border;
}
} }
unsigned int Client *
tilemaster(void) { tilemaster(unsigned int n) {
unsigned int n; Client *c = nexttiled(clients);
Client *c, *mc;
for(n = 0, mc = c = nexttiled(clients); c; c = nexttiled(c->next))
n++;
if(n == 0)
return 0;
if(n == 1) if(n == 1)
tileresize(mc, mox, moy, mow - 2 * mc->border, moh - 2 * mc->border); tileresize(c, mox, moy, mow - 2 * c->border, moh - 2 * c->border);
else else
tileresize(mc, mx, my, mw - 2 * mc->border, mh - 2 * mc->border); tileresize(c, mx, my, mw - 2 * c->border, mh - 2 * c->border);
return n - 1; return c;
} }
void void
tilev(void) { tileresize(Client *c, int x, int y, int w, int h) {
tilevstack(tilemaster()); resize(c, x, y, w, h, RESIZEHINTS);
if((RESIZEHINTS) && ((c->h < bh) || (c->h > h) || (c->w < bh) || (c->w > w)))
/* client doesn't accept size constraints */
resize(c, x, y, w, h, False);
} }
void void
tilevstack(unsigned int n) { tilev(void) {
int i, y, h; int y, h;
unsigned int i, n = counttiled();
Client *c; Client *c;
if(n == 0) if(n == 0)
return; return;
c = tilemaster(n);
if(--n == 0)
return;
y = ty; y = ty;
h = th / n; h = th / n;
if(h < bh) if(h < bh)
h = th; h = th;
for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
if(i > 0) { if(i + 1 == n) /* remainder */
if(i > 1 && i == n) /* remainder */ tileresize(c, tx, y, tw - 2 * c->border, (ty + th) - y - 2 * c->border);
tileresize(c, tx, y, tw - 2 * c->border, else
(ty + th) - y - 2 * c->border); tileresize(c, tx, y, tw - 2 * c->border, h - 2 * c->border);
else if(h != th)
tileresize(c, tx, y, tw - 2 * c->border, y = c->y + c->h + 2 * c->border;
h - 2 * c->border); }
if(h != th)
y = c->y + c->h + 2 * c->border;
}
} }
void void

Loading…
Cancel
Save