dwm-meillo
changeset 327:96d09fd98e89
separated several functions into view.c
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Tue, 22 Aug 2006 16:50:21 +0200 |
parents | 73efaa15a635 |
children | 083f1f3e1e93 |
files | Makefile client.c dwm.h tag.c view.c |
diffstat | 5 files changed, 266 insertions(+), 258 deletions(-) [+] |
line diff
1.1 --- a/Makefile Tue Aug 22 16:42:29 2006 +0200 1.2 +++ b/Makefile Tue Aug 22 16:50:21 2006 +0200 1.3 @@ -3,7 +3,7 @@ 1.4 1.5 include config.mk 1.6 1.7 -SRC = client.c draw.c event.c main.c tag.c util.c 1.8 +SRC = client.c draw.c event.c main.c tag.c util.c view.c 1.9 OBJ = ${SRC:.c=.o} 1.10 1.11 all: options dwm
2.1 --- a/client.c Tue Aug 22 16:42:29 2006 +0200 2.2 +++ b/client.c Tue Aug 22 16:50:21 2006 +0200 2.3 @@ -89,40 +89,6 @@ 2.4 XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); 2.5 } 2.6 2.7 -void 2.8 -focusnext(Arg *arg) 2.9 -{ 2.10 - Client *c; 2.11 - 2.12 - if(!sel) 2.13 - return; 2.14 - 2.15 - if(!(c = getnext(sel->next))) 2.16 - c = getnext(clients); 2.17 - if(c) { 2.18 - focus(c); 2.19 - restack(); 2.20 - } 2.21 -} 2.22 - 2.23 -void 2.24 -focusprev(Arg *arg) 2.25 -{ 2.26 - Client *c; 2.27 - 2.28 - if(!sel) 2.29 - return; 2.30 - 2.31 - if(!(c = getprev(sel->prev))) { 2.32 - for(c = clients; c && c->next; c = c->next); 2.33 - c = getprev(c); 2.34 - } 2.35 - if(c) { 2.36 - focus(c); 2.37 - restack(); 2.38 - } 2.39 -} 2.40 - 2.41 Client * 2.42 getclient(Window w) 2.43 { 2.44 @@ -446,30 +412,3 @@ 2.45 focus(sel); 2.46 arrange(NULL); 2.47 } 2.48 - 2.49 -void 2.50 -zoom(Arg *arg) 2.51 -{ 2.52 - Client *c; 2.53 - 2.54 - if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax) 2.55 - return; 2.56 - 2.57 - if(sel == getnext(clients)) { 2.58 - if((c = getnext(sel->next))) 2.59 - sel = c; 2.60 - else 2.61 - return; 2.62 - } 2.63 - 2.64 - /* pop */ 2.65 - sel->prev->next = sel->next; 2.66 - if(sel->next) 2.67 - sel->next->prev = sel->prev; 2.68 - sel->prev = NULL; 2.69 - clients->prev = sel; 2.70 - sel->next = clients; 2.71 - clients = sel; 2.72 - focus(sel); 2.73 - arrange(NULL); 2.74 -}
3.1 --- a/dwm.h Tue Aug 22 16:42:29 2006 +0200 3.2 +++ b/dwm.h Tue Aug 22 16:50:21 2006 +0200 3.3 @@ -84,8 +84,6 @@ 3.4 /* client.c */ 3.5 extern void ban(Client *c); 3.6 extern void focus(Client *c); 3.7 -extern void focusnext(Arg *arg); 3.8 -extern void focusprev(Arg *arg); 3.9 extern Client *getclient(Window w); 3.10 extern Client *getctitle(Window w); 3.11 extern void gravitate(Client *c, Bool invert); 3.12 @@ -96,7 +94,6 @@ 3.13 extern void settitle(Client *c); 3.14 extern void togglemax(Arg *arg); 3.15 extern void unmanage(Client *c); 3.16 -extern void zoom(Arg *arg); 3.17 3.18 /* draw.c */ 3.19 extern void drawall(); 3.20 @@ -117,22 +114,27 @@ 3.21 extern int xerror(Display *dsply, XErrorEvent *ee); 3.22 3.23 /* tag.c */ 3.24 -extern void dofloat(Arg *arg); 3.25 -extern void dotile(Arg *arg); 3.26 extern void initrregs(); 3.27 -extern Bool isvisible(Client *c); 3.28 extern Client *getnext(Client *c); 3.29 extern Client *getprev(Client *c); 3.30 -extern void restack(); 3.31 extern void settags(Client *c); 3.32 extern void tag(Arg *arg); 3.33 -extern void togglemode(Arg *arg); 3.34 extern void toggletag(Arg *arg); 3.35 -extern void toggleview(Arg *arg); 3.36 -extern void view(Arg *arg); 3.37 3.38 /* util.c */ 3.39 extern void *emallocz(unsigned int size); 3.40 extern void eprint(const char *errstr, ...); 3.41 extern void *erealloc(void *ptr, unsigned int size); 3.42 extern void spawn(Arg *arg); 3.43 + 3.44 +/* view.c */ 3.45 +extern void dofloat(Arg *arg); 3.46 +extern void dotile(Arg *arg); 3.47 +extern void focusnext(Arg *arg); 3.48 +extern void focusprev(Arg *arg); 3.49 +extern Bool isvisible(Client *c); 3.50 +extern void restack(); 3.51 +extern void togglemode(Arg *arg); 3.52 +extern void toggleview(Arg *arg); 3.53 +extern void view(Arg *arg); 3.54 +extern void zoom(Arg *arg);
4.1 --- a/tag.c Tue Aug 22 16:42:29 2006 +0200 4.2 +++ b/tag.c Tue Aug 22 16:50:21 2006 +0200 4.3 @@ -30,97 +30,8 @@ 4.4 static RReg *rreg = NULL; 4.5 static unsigned int len = 0; 4.6 4.7 -void (*arrange)(Arg *) = DEFMODE; 4.8 - 4.9 /* extern */ 4.10 4.11 -void 4.12 -dofloat(Arg *arg) 4.13 -{ 4.14 - Client *c; 4.15 - 4.16 - for(c = clients; c; c = c->next) { 4.17 - c->ismax = False; 4.18 - if(isvisible(c)) { 4.19 - resize(c, True, TopLeft); 4.20 - } 4.21 - else 4.22 - ban(c); 4.23 - } 4.24 - if(!sel || !isvisible(sel)) 4.25 - sel = getnext(clients); 4.26 - if(sel) 4.27 - focus(sel); 4.28 - else 4.29 - XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 4.30 - restack(); 4.31 -} 4.32 - 4.33 -void 4.34 -dotile(Arg *arg) 4.35 -{ 4.36 - int h, i, n, w; 4.37 - Client *c; 4.38 - 4.39 - w = sw - mw; 4.40 - for(n = 0, c = clients; c; c = c->next) 4.41 - if(isvisible(c) && !c->isfloat) 4.42 - n++; 4.43 - 4.44 - if(n > 1) 4.45 - h = (sh - bh) / (n - 1); 4.46 - else 4.47 - h = sh - bh; 4.48 - 4.49 - for(i = 0, c = clients; c; c = c->next) { 4.50 - c->ismax = False; 4.51 - if(isvisible(c)) { 4.52 - if(c->isfloat) { 4.53 - resize(c, True, TopLeft); 4.54 - continue; 4.55 - } 4.56 - if(n == 1) { 4.57 - c->x = sx; 4.58 - c->y = sy + bh; 4.59 - c->w = sw - 2; 4.60 - c->h = sh - 2 - bh; 4.61 - } 4.62 - else if(i == 0) { 4.63 - c->x = sx; 4.64 - c->y = sy + bh; 4.65 - c->w = mw - 2; 4.66 - c->h = sh - 2 - bh; 4.67 - } 4.68 - else if(h > bh) { 4.69 - c->x = sx + mw; 4.70 - c->y = sy + (i - 1) * h + bh; 4.71 - c->w = w - 2; 4.72 - if(i + 1 == n) 4.73 - c->h = sh - c->y - 2; 4.74 - else 4.75 - c->h = h - 2; 4.76 - } 4.77 - else { /* fallback if h < bh */ 4.78 - c->x = sx + mw; 4.79 - c->y = sy + bh; 4.80 - c->w = w - 2; 4.81 - c->h = sh - 2 - bh; 4.82 - } 4.83 - resize(c, False, TopLeft); 4.84 - i++; 4.85 - } 4.86 - else 4.87 - ban(c); 4.88 - } 4.89 - if(!sel || !isvisible(sel)) 4.90 - sel = getnext(clients); 4.91 - if(sel) 4.92 - focus(sel); 4.93 - else 4.94 - XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 4.95 - restack(); 4.96 -} 4.97 - 4.98 Client * 4.99 getnext(Client *c) 4.100 { 4.101 @@ -164,69 +75,6 @@ 4.102 } 4.103 } 4.104 4.105 -Bool 4.106 -isvisible(Client *c) 4.107 -{ 4.108 - unsigned int i; 4.109 - 4.110 - for(i = 0; i < ntags; i++) 4.111 - if(c->tags[i] && seltag[i]) 4.112 - return True; 4.113 - return False; 4.114 -} 4.115 - 4.116 -void 4.117 -restack() 4.118 -{ 4.119 - static unsigned int nwins = 0; 4.120 - static Window *wins = NULL; 4.121 - unsigned int f, fi, m, mi, n; 4.122 - Client *c; 4.123 - XEvent ev; 4.124 - 4.125 - for(f = 0, m = 0, c = clients; c; c = c->next) 4.126 - if(isvisible(c)) { 4.127 - if(c->isfloat || arrange == dofloat) 4.128 - f++; 4.129 - else 4.130 - m++; 4.131 - } 4.132 - if(!(n = 2 * (f + m))) { 4.133 - drawstatus(); 4.134 - return; 4.135 - } 4.136 - if(nwins < n) { 4.137 - nwins = n; 4.138 - wins = erealloc(wins, nwins * sizeof(Window)); 4.139 - } 4.140 - 4.141 - fi = 0; 4.142 - mi = 2 * f; 4.143 - if(sel->isfloat || arrange == dofloat) { 4.144 - wins[fi++] = sel->title; 4.145 - wins[fi++] = sel->win; 4.146 - } 4.147 - else { 4.148 - wins[mi++] = sel->title; 4.149 - wins[mi++] = sel->win; 4.150 - } 4.151 - for(c = clients; c; c = c->next) 4.152 - if(isvisible(c) && c != sel) { 4.153 - if(c->isfloat || arrange == dofloat) { 4.154 - wins[fi++] = c->title; 4.155 - wins[fi++] = c->win; 4.156 - } 4.157 - else { 4.158 - wins[mi++] = c->title; 4.159 - wins[mi++] = c->win; 4.160 - } 4.161 - } 4.162 - XRestackWindows(dpy, wins, n); 4.163 - drawall(); 4.164 - XSync(dpy, False); 4.165 - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); 4.166 -} 4.167 - 4.168 void 4.169 settags(Client *c) 4.170 { 4.171 @@ -277,16 +125,6 @@ 4.172 } 4.173 4.174 void 4.175 -togglemode(Arg *arg) 4.176 -{ 4.177 - arrange = arrange == dofloat ? dotile : dofloat; 4.178 - if(sel) 4.179 - arrange(NULL); 4.180 - else 4.181 - drawstatus(); 4.182 -} 4.183 - 4.184 -void 4.185 toggletag(Arg *arg) 4.186 { 4.187 unsigned int i; 4.188 @@ -302,27 +140,3 @@ 4.189 if(!isvisible(sel)) 4.190 arrange(NULL); 4.191 } 4.192 - 4.193 - 4.194 -void 4.195 -toggleview(Arg *arg) 4.196 -{ 4.197 - unsigned int i; 4.198 - 4.199 - seltag[arg->i] = !seltag[arg->i]; 4.200 - for(i = 0; i < ntags && !seltag[i]; i++); 4.201 - if(i == ntags) 4.202 - seltag[arg->i] = True; /* cannot toggle last view */ 4.203 - arrange(NULL); 4.204 -} 4.205 - 4.206 -void 4.207 -view(Arg *arg) 4.208 -{ 4.209 - unsigned int i; 4.210 - 4.211 - for(i = 0; i < ntags; i++) 4.212 - seltag[i] = False; 4.213 - seltag[arg->i] = True; 4.214 - arrange(NULL); 4.215 -}
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/view.c Tue Aug 22 16:50:21 2006 +0200 5.3 @@ -0,0 +1,253 @@ 5.4 +/* 5.5 + * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> 5.6 + * See LICENSE file for license details. 5.7 + */ 5.8 +#include "dwm.h" 5.9 + 5.10 +/* extern */ 5.11 + 5.12 +void (*arrange)(Arg *) = DEFMODE; 5.13 + 5.14 +void 5.15 +dofloat(Arg *arg) 5.16 +{ 5.17 + Client *c; 5.18 + 5.19 + for(c = clients; c; c = c->next) { 5.20 + c->ismax = False; 5.21 + if(isvisible(c)) { 5.22 + resize(c, True, TopLeft); 5.23 + } 5.24 + else 5.25 + ban(c); 5.26 + } 5.27 + if(!sel || !isvisible(sel)) 5.28 + sel = getnext(clients); 5.29 + if(sel) 5.30 + focus(sel); 5.31 + else 5.32 + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 5.33 + restack(); 5.34 +} 5.35 + 5.36 +void 5.37 +dotile(Arg *arg) 5.38 +{ 5.39 + int h, i, n, w; 5.40 + Client *c; 5.41 + 5.42 + w = sw - mw; 5.43 + for(n = 0, c = clients; c; c = c->next) 5.44 + if(isvisible(c) && !c->isfloat) 5.45 + n++; 5.46 + 5.47 + if(n > 1) 5.48 + h = (sh - bh) / (n - 1); 5.49 + else 5.50 + h = sh - bh; 5.51 + 5.52 + for(i = 0, c = clients; c; c = c->next) { 5.53 + c->ismax = False; 5.54 + if(isvisible(c)) { 5.55 + if(c->isfloat) { 5.56 + resize(c, True, TopLeft); 5.57 + continue; 5.58 + } 5.59 + if(n == 1) { 5.60 + c->x = sx; 5.61 + c->y = sy + bh; 5.62 + c->w = sw - 2; 5.63 + c->h = sh - 2 - bh; 5.64 + } 5.65 + else if(i == 0) { 5.66 + c->x = sx; 5.67 + c->y = sy + bh; 5.68 + c->w = mw - 2; 5.69 + c->h = sh - 2 - bh; 5.70 + } 5.71 + else if(h > bh) { 5.72 + c->x = sx + mw; 5.73 + c->y = sy + (i - 1) * h + bh; 5.74 + c->w = w - 2; 5.75 + if(i + 1 == n) 5.76 + c->h = sh - c->y - 2; 5.77 + else 5.78 + c->h = h - 2; 5.79 + } 5.80 + else { /* fallback if h < bh */ 5.81 + c->x = sx + mw; 5.82 + c->y = sy + bh; 5.83 + c->w = w - 2; 5.84 + c->h = sh - 2 - bh; 5.85 + } 5.86 + resize(c, False, TopLeft); 5.87 + i++; 5.88 + } 5.89 + else 5.90 + ban(c); 5.91 + } 5.92 + if(!sel || !isvisible(sel)) 5.93 + sel = getnext(clients); 5.94 + if(sel) 5.95 + focus(sel); 5.96 + else 5.97 + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); 5.98 + restack(); 5.99 +} 5.100 + 5.101 +void 5.102 +focusnext(Arg *arg) 5.103 +{ 5.104 + Client *c; 5.105 + 5.106 + if(!sel) 5.107 + return; 5.108 + 5.109 + if(!(c = getnext(sel->next))) 5.110 + c = getnext(clients); 5.111 + if(c) { 5.112 + focus(c); 5.113 + restack(); 5.114 + } 5.115 +} 5.116 + 5.117 +void 5.118 +focusprev(Arg *arg) 5.119 +{ 5.120 + Client *c; 5.121 + 5.122 + if(!sel) 5.123 + return; 5.124 + 5.125 + if(!(c = getprev(sel->prev))) { 5.126 + for(c = clients; c && c->next; c = c->next); 5.127 + c = getprev(c); 5.128 + } 5.129 + if(c) { 5.130 + focus(c); 5.131 + restack(); 5.132 + } 5.133 +} 5.134 + 5.135 +Bool 5.136 +isvisible(Client *c) 5.137 +{ 5.138 + unsigned int i; 5.139 + 5.140 + for(i = 0; i < ntags; i++) 5.141 + if(c->tags[i] && seltag[i]) 5.142 + return True; 5.143 + return False; 5.144 +} 5.145 + 5.146 +void 5.147 +restack() 5.148 +{ 5.149 + static unsigned int nwins = 0; 5.150 + static Window *wins = NULL; 5.151 + unsigned int f, fi, m, mi, n; 5.152 + Client *c; 5.153 + XEvent ev; 5.154 + 5.155 + for(f = 0, m = 0, c = clients; c; c = c->next) 5.156 + if(isvisible(c)) { 5.157 + if(c->isfloat || arrange == dofloat) 5.158 + f++; 5.159 + else 5.160 + m++; 5.161 + } 5.162 + if(!(n = 2 * (f + m))) { 5.163 + drawstatus(); 5.164 + return; 5.165 + } 5.166 + if(nwins < n) { 5.167 + nwins = n; 5.168 + wins = erealloc(wins, nwins * sizeof(Window)); 5.169 + } 5.170 + 5.171 + fi = 0; 5.172 + mi = 2 * f; 5.173 + if(sel->isfloat || arrange == dofloat) { 5.174 + wins[fi++] = sel->title; 5.175 + wins[fi++] = sel->win; 5.176 + } 5.177 + else { 5.178 + wins[mi++] = sel->title; 5.179 + wins[mi++] = sel->win; 5.180 + } 5.181 + for(c = clients; c; c = c->next) 5.182 + if(isvisible(c) && c != sel) { 5.183 + if(c->isfloat || arrange == dofloat) { 5.184 + wins[fi++] = c->title; 5.185 + wins[fi++] = c->win; 5.186 + } 5.187 + else { 5.188 + wins[mi++] = c->title; 5.189 + wins[mi++] = c->win; 5.190 + } 5.191 + } 5.192 + XRestackWindows(dpy, wins, n); 5.193 + drawall(); 5.194 + XSync(dpy, False); 5.195 + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); 5.196 +} 5.197 + 5.198 +void 5.199 +togglemode(Arg *arg) 5.200 +{ 5.201 + arrange = arrange == dofloat ? dotile : dofloat; 5.202 + if(sel) 5.203 + arrange(NULL); 5.204 + else 5.205 + drawstatus(); 5.206 +} 5.207 + 5.208 +void 5.209 +toggleview(Arg *arg) 5.210 +{ 5.211 + unsigned int i; 5.212 + 5.213 + seltag[arg->i] = !seltag[arg->i]; 5.214 + for(i = 0; i < ntags && !seltag[i]; i++); 5.215 + if(i == ntags) 5.216 + seltag[arg->i] = True; /* cannot toggle last view */ 5.217 + arrange(NULL); 5.218 +} 5.219 + 5.220 +void 5.221 +view(Arg *arg) 5.222 +{ 5.223 + unsigned int i; 5.224 + 5.225 + for(i = 0; i < ntags; i++) 5.226 + seltag[i] = False; 5.227 + seltag[arg->i] = True; 5.228 + arrange(NULL); 5.229 +} 5.230 + 5.231 +void 5.232 +zoom(Arg *arg) 5.233 +{ 5.234 + Client *c; 5.235 + 5.236 + if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax) 5.237 + return; 5.238 + 5.239 + if(sel == getnext(clients)) { 5.240 + if((c = getnext(sel->next))) 5.241 + sel = c; 5.242 + else 5.243 + return; 5.244 + } 5.245 + 5.246 + /* pop */ 5.247 + sel->prev->next = sel->next; 5.248 + if(sel->next) 5.249 + sel->next->prev = sel->prev; 5.250 + sel->prev = NULL; 5.251 + clients->prev = sel; 5.252 + sel->next = clients; 5.253 + clients = sel; 5.254 + focus(sel); 5.255 + arrange(NULL); 5.256 +}