146 void drawtext(Monitor *, const char *text, unsigned long col[ColLast], Bool invert); |
149 void drawtext(Monitor *, const char *text, unsigned long col[ColLast], Bool invert); |
147 void *emallocz(unsigned int size); |
150 void *emallocz(unsigned int size); |
148 void enternotify(XEvent *e); |
151 void enternotify(XEvent *e); |
149 void eprint(const char *errstr, ...); |
152 void eprint(const char *errstr, ...); |
150 void expose(XEvent *e); |
153 void expose(XEvent *e); |
151 void floating(void); /* default floating layout */ |
154 void floating(Monitor *m); /* default floating layout */ |
152 void focus(Client *c); |
155 void focus(Client *c); |
153 void focusin(XEvent *e); |
156 void focusin(XEvent *e); |
154 void focusnext(const char *arg); |
157 void focusnext(const char *arg); |
155 void focusprev(const char *arg); |
158 void focusprev(const char *arg); |
156 Client *getclient(Window w); |
159 Client *getclient(Window w); |
186 void setup(void); |
189 void setup(void); |
187 void spawn(const char *arg); |
190 void spawn(const char *arg); |
188 void tag(const char *arg); |
191 void tag(const char *arg); |
189 unsigned int textnw(const char *text, unsigned int len); |
192 unsigned int textnw(const char *text, unsigned int len); |
190 unsigned int textw(const char *text); |
193 unsigned int textw(const char *text); |
191 void tile(void); |
194 void tile(Monitor *m); |
192 void togglebar(const char *arg); |
195 void togglebar(const char *arg); |
193 void togglefloating(const char *arg); |
196 void togglefloating(const char *arg); |
194 void toggletag(const char *arg); |
197 void toggletag(const char *arg); |
195 void toggleview(const char *arg); |
198 void toggleview(const char *arg); |
196 void unban(Client *c); |
199 void unban(Client *c); |
1712 textw(const char *text) { |
1716 textw(const char *text) { |
1713 return textnw(text, strlen(text)) + dc.font.height; |
1717 return textnw(text, strlen(text)) + dc.font.height; |
1714 } |
1718 } |
1715 |
1719 |
1716 void |
1720 void |
1717 tile(void) { |
1721 tile(Monitor *m) { |
1718 unsigned int i, j, n, nx, ny, nw, nh, mw, th; |
1722 unsigned int i, n, nx, ny, nw, nh, mw, th; |
1719 Client *c, *mc; |
1723 Client *c, *mc; |
1720 |
1724 |
1721 domwfact = dozoom = True; |
1725 domwfact = dozoom = True; |
1722 |
1726 |
1723 nx = ny = nw = 0; /* gcc stupidity requires this */ |
1727 nx = ny = nw = 0; /* gcc stupidity requires this */ |
1724 |
1728 |
1725 for (i = 0; i < mcount; i++) { |
1729 for(n = 0, c = nexttiled(clients, m->id); c; c = nexttiled(c->next, m->id)) |
1726 Monitor *m = &monitors[i]; |
1730 n++; |
1727 |
1731 |
1728 for(n = 0, c = nexttiled(clients, i); c; c = nexttiled(c->next, i)) |
1732 /* window geoms */ |
1729 n++; |
1733 mw = (n == 1) ? m->waw : m->mwfact * m->waw; |
1730 |
1734 th = (n > 1) ? m->wah / (n - 1) : 0; |
1731 /* window geoms */ |
1735 if(n > 1 && th < bh) |
1732 mw = (n == 1) ? m->waw : m->mwfact * m->waw; |
1736 th = m->wah; |
1733 th = (n > 1) ? m->wah / (n - 1) : 0; |
1737 |
1734 if(n > 1 && th < bh) |
1738 for(i = 0, c = mc = nexttiled(clients, m->id); c; c = nexttiled(c->next, m->id)) { |
1735 th = m->wah; |
1739 if(i == 0) { /* master */ |
1736 |
1740 nx = m->wax; |
1737 for(j = 0, c = mc = nexttiled(clients, i); c; c = nexttiled(c->next, i)) { |
1741 ny = m->way; |
1738 if(j == 0) { /* master */ |
1742 nw = mw - 2 * c->border; |
1739 nx = m->wax; |
1743 nh = m->wah - 2 * c->border; |
|
1744 } |
|
1745 else { /* tile window */ |
|
1746 if(i == 1) { |
1740 ny = m->way; |
1747 ny = m->way; |
1741 nw = mw - 2 * c->border; |
1748 nx += mc->w + 2 * mc->border; |
1742 nh = m->wah - 2 * c->border; |
1749 nw = m->waw - mw - 2 * c->border; |
1743 } |
1750 } |
1744 else { /* tile window */ |
1751 if(i + 1 == n) /* remainder */ |
1745 if(j == 1) { |
1752 nh = (m->way + m->wah) - ny - 2 * c->border; |
1746 ny = m->way; |
1753 else |
1747 nx += mc->w + 2 * mc->border; |
1754 nh = th - 2 * c->border; |
1748 nw = m->waw - mw - 2 * c->border; |
1755 } |
1749 } |
1756 resize(c, nx, ny, nw, nh, RESIZEHINTS); |
1750 if(j + 1 == n) /* remainder */ |
1757 if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw))) |
1751 nh = (m->way + m->wah) - ny - 2 * c->border; |
1758 /* client doesn't accept size constraints */ |
1752 else |
1759 resize(c, nx, ny, nw, nh, False); |
1753 nh = th - 2 * c->border; |
1760 if(n > 1 && th != m->wah) |
1754 } |
1761 ny = c->y + c->h + 2 * c->border; |
1755 fprintf(stderr, "tile(%d, %d, %d, %d)\n", nx, ny, nw, nh); |
1762 |
1756 resize(c, nx, ny, nw, nh, RESIZEHINTS); |
1763 i++; |
1757 if((RESIZEHINTS) && ((c->h < bh) || (c->h > nh) || (c->w < bh) || (c->w > nw))) |
1764 } |
1758 /* client doesn't accept size constraints */ |
|
1759 resize(c, nx, ny, nw, nh, False); |
|
1760 if(n > 1 && th != m->wah) |
|
1761 ny = c->y + c->h + 2 * c->border; |
|
1762 |
|
1763 j++; |
|
1764 } |
|
1765 } |
|
1766 fprintf(stderr, "done\n"); |
|
1767 } |
1765 } |
1768 void |
1766 void |
1769 togglebar(const char *arg) { |
1767 togglebar(const char *arg) { |
1770 if(bpos == BarOff) |
1768 if(bpos == BarOff) |
1771 bpos = (BARPOS == BarOff) ? BarTop : BARPOS; |
1769 bpos = (BARPOS == BarOff) ? BarTop : BARPOS; |
2043 |
2041 |
2044 |
2042 |
2045 int |
2043 int |
2046 main(int argc, char *argv[]) { |
2044 main(int argc, char *argv[]) { |
2047 if(argc == 2 && !strcmp("-v", argv[1])) |
2045 if(argc == 2 && !strcmp("-v", argv[1])) |
2048 eprint("dwm-"VERSION", © 2006-2007 Anselm R. Garbe, Sander van Dijk, " |
2046 eprint("dwm-"VERSION", © 2006-2008 Anselm R. Garbe, Sander van Dijk, " |
2049 "Jukka Salmi, Premysl Hruby, Szabolcs Nagy, Christof Musik\n"); |
2047 "Jukka Salmi, Premysl Hruby, Szabolcs Nagy, Christof Musik\n"); |
2050 else if(argc != 1) |
2048 else if(argc != 1) |
2051 eprint("usage: dwm [-v]\n"); |
2049 eprint("usage: dwm [-v]\n"); |
2052 |
2050 |
2053 setlocale(LC_CTYPE, ""); |
2051 setlocale(LC_CTYPE, ""); |