summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnselm R Garbe <garbeam@gmail.com>2008-03-13 13:59:40 +0000
committerAnselm R Garbe <garbeam@gmail.com>2008-03-13 13:59:40 +0000
commit831428b00cf0bb6c7830c2178c8d13213f29b2db (patch)
treea6abf32121b64f42247053a160162ec89ad83bf2
parent69439715c09ac36fe94f3cb7b1ed87149fc5ecff (diff)
some polishing in tileh/tilev
-rw-r--r--dwm.c102
1 files changed, 50 insertions, 52 deletions
diff --git a/dwm.c b/dwm.c
index 0071379..0894c65 100644
--- a/dwm.c
+++ b/dwm.c
@@ -117,6 +117,7 @@ void cleanup(void);
void configure(Client *c);
void configurenotify(XEvent *e);
void configurerequest(XEvent *e);
+unsigned int counttiled(void);
void destroynotify(XEvent *e);
void detach(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);
void tileh(void);
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 tilevstack(unsigned int n);
void togglefloating(const char *arg);
@@ -458,6 +460,15 @@ configurerequest(XEvent *e) {
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
destroynotify(XEvent *e) {
Client *c;
@@ -1579,89 +1590,76 @@ textw(const char *text) {
}
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
tileh(void) {
- tilehstack(tilemaster());
-}
-
-void
-tilehstack(unsigned int n) {
- int i, x, w;
+ int x, w;
+ unsigned int i, n = counttiled();
Client *c;
if(n == 0)
return;
+ c = tilemaster(n);
+ if(--n == 0)
+ return;
x = tx;
w = tw / n;
if(w < bh)
w = tw;
- for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++)
- if(i > 0) {
- if(i > 1 && i == n) /* remainder */
- tileresize(c, x, ty, (tx + tw) - x - 2 * c->border,
- th - 2 * c->border);
- else
- tileresize(c, x, ty, w - 2 * c->border,
- th - 2 * c->border);
- if(w != tw)
- x = c->x + c->w + 2 * c->border;
- }
+ 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);
+ else
+ tileresize(c, x, ty, w - 2 * c->border, th - 2 * c->border);
+ if(w != tw)
+ x = c->x + c->w + 2 * c->border;
+ }
}
-unsigned int
-tilemaster(void) {
- unsigned int n;
- Client *c, *mc;
+Client *
+tilemaster(unsigned int n) {
+ Client *c = nexttiled(clients);
- for(n = 0, mc = c = nexttiled(clients); c; c = nexttiled(c->next))
- n++;
- if(n == 0)
- return 0;
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
- tileresize(mc, mx, my, mw - 2 * mc->border, mh - 2 * mc->border);
- return n - 1;
+ tileresize(c, mx, my, mw - 2 * c->border, mh - 2 * c->border);
+ return c;
}
void
-tilev(void) {
- tilevstack(tilemaster());
+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
-tilevstack(unsigned int n) {
- int i, y, h;
+tilev(void) {
+ int y, h;
+ unsigned int i, n = counttiled();
Client *c;
if(n == 0)
return;
+ c = tilemaster(n);
+ if(--n == 0)
+ return;
y = ty;
h = th / n;
if(h < bh)
h = th;
- for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++)
- if(i > 0) {
- if(i > 1 && i == n) /* remainder */
- tileresize(c, tx, y, tw - 2 * c->border,
- (ty + th) - y - 2 * c->border);
- else
- tileresize(c, tx, y, tw - 2 * c->border,
- h - 2 * c->border);
- if(h != th)
- y = c->y + c->h + 2 * c->border;
- }
+ 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);
+ else
+ tileresize(c, tx, y, tw - 2 * c->border, h - 2 * c->border);
+ if(h != th)
+ y = c->y + c->h + 2 * c->border;
+ }
}
void