tseparated several functions into view.c - dwm - [fork] customized build of dwm… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit aa13727067af829b94461eb36aa029297ed8e6b9 | |
parent 595028614bc94c1733b28725dcf9777b0a47ad24 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Tue, 22 Aug 2006 16:50:21 +0200 | |
separated several functions into view.c | |
Diffstat: | |
M Makefile | 2 +- | |
M client.c | 61 -----------------------------… | |
M dwm.h | 22 ++++++++++++---------- | |
M tag.c | 186 -----------------------------… | |
A view.c | 253 +++++++++++++++++++++++++++++… | |
5 files changed, 266 insertions(+), 258 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -3,7 +3,7 @@ | |
include config.mk | |
-SRC = client.c draw.c event.c main.c tag.c util.c | |
+SRC = client.c draw.c event.c main.c tag.c util.c view.c | |
OBJ = ${SRC:.c=.o} | |
all: options dwm | |
diff --git a/client.c b/client.c | |
t@@ -89,40 +89,6 @@ focus(Client *c) | |
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); | |
} | |
-void | |
-focusnext(Arg *arg) | |
-{ | |
- Client *c; | |
- | |
- if(!sel) | |
- return; | |
- | |
- if(!(c = getnext(sel->next))) | |
- c = getnext(clients); | |
- if(c) { | |
- focus(c); | |
- restack(); | |
- } | |
-} | |
- | |
-void | |
-focusprev(Arg *arg) | |
-{ | |
- Client *c; | |
- | |
- if(!sel) | |
- return; | |
- | |
- if(!(c = getprev(sel->prev))) { | |
- for(c = clients; c && c->next; c = c->next); | |
- c = getprev(c); | |
- } | |
- if(c) { | |
- focus(c); | |
- restack(); | |
- } | |
-} | |
- | |
Client * | |
getclient(Window w) | |
{ | |
t@@ -446,30 +412,3 @@ unmanage(Client *c) | |
focus(sel); | |
arrange(NULL); | |
} | |
- | |
-void | |
-zoom(Arg *arg) | |
-{ | |
- Client *c; | |
- | |
- if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax) | |
- return; | |
- | |
- if(sel == getnext(clients)) { | |
- if((c = getnext(sel->next))) | |
- sel = c; | |
- else | |
- return; | |
- } | |
- | |
- /* pop */ | |
- sel->prev->next = sel->next; | |
- if(sel->next) | |
- sel->next->prev = sel->prev; | |
- sel->prev = NULL; | |
- clients->prev = sel; | |
- sel->next = clients; | |
- clients = sel; | |
- focus(sel); | |
- arrange(NULL); | |
-} | |
diff --git a/dwm.h b/dwm.h | |
t@@ -84,8 +84,6 @@ extern Window root, barwin; | |
/* client.c */ | |
extern void ban(Client *c); | |
extern void focus(Client *c); | |
-extern void focusnext(Arg *arg); | |
-extern void focusprev(Arg *arg); | |
extern Client *getclient(Window w); | |
extern Client *getctitle(Window w); | |
extern void gravitate(Client *c, Bool invert); | |
t@@ -96,7 +94,6 @@ extern void setsize(Client *c); | |
extern void settitle(Client *c); | |
extern void togglemax(Arg *arg); | |
extern void unmanage(Client *c); | |
-extern void zoom(Arg *arg); | |
/* draw.c */ | |
extern void drawall(); | |
t@@ -117,22 +114,27 @@ extern void sendevent(Window w, Atom a, long value); | |
extern int xerror(Display *dsply, XErrorEvent *ee); | |
/* tag.c */ | |
-extern void dofloat(Arg *arg); | |
-extern void dotile(Arg *arg); | |
extern void initrregs(); | |
-extern Bool isvisible(Client *c); | |
extern Client *getnext(Client *c); | |
extern Client *getprev(Client *c); | |
-extern void restack(); | |
extern void settags(Client *c); | |
extern void tag(Arg *arg); | |
-extern void togglemode(Arg *arg); | |
extern void toggletag(Arg *arg); | |
-extern void toggleview(Arg *arg); | |
-extern void view(Arg *arg); | |
/* util.c */ | |
extern void *emallocz(unsigned int size); | |
extern void eprint(const char *errstr, ...); | |
extern void *erealloc(void *ptr, unsigned int size); | |
extern void spawn(Arg *arg); | |
+ | |
+/* view.c */ | |
+extern void dofloat(Arg *arg); | |
+extern void dotile(Arg *arg); | |
+extern void focusnext(Arg *arg); | |
+extern void focusprev(Arg *arg); | |
+extern Bool isvisible(Client *c); | |
+extern void restack(); | |
+extern void togglemode(Arg *arg); | |
+extern void toggleview(Arg *arg); | |
+extern void view(Arg *arg); | |
+extern void zoom(Arg *arg); | |
diff --git a/tag.c b/tag.c | |
t@@ -30,97 +30,8 @@ RULES | |
static RReg *rreg = NULL; | |
static unsigned int len = 0; | |
-void (*arrange)(Arg *) = DEFMODE; | |
- | |
/* extern */ | |
-void | |
-dofloat(Arg *arg) | |
-{ | |
- Client *c; | |
- | |
- for(c = clients; c; c = c->next) { | |
- c->ismax = False; | |
- if(isvisible(c)) { | |
- resize(c, True, TopLeft); | |
- } | |
- else | |
- ban(c); | |
- } | |
- if(!sel || !isvisible(sel)) | |
- sel = getnext(clients); | |
- if(sel) | |
- focus(sel); | |
- else | |
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
- restack(); | |
-} | |
- | |
-void | |
-dotile(Arg *arg) | |
-{ | |
- int h, i, n, w; | |
- Client *c; | |
- | |
- w = sw - mw; | |
- for(n = 0, c = clients; c; c = c->next) | |
- if(isvisible(c) && !c->isfloat) | |
- n++; | |
- | |
- if(n > 1) | |
- h = (sh - bh) / (n - 1); | |
- else | |
- h = sh - bh; | |
- | |
- for(i = 0, c = clients; c; c = c->next) { | |
- c->ismax = False; | |
- if(isvisible(c)) { | |
- if(c->isfloat) { | |
- resize(c, True, TopLeft); | |
- continue; | |
- } | |
- if(n == 1) { | |
- c->x = sx; | |
- c->y = sy + bh; | |
- c->w = sw - 2; | |
- c->h = sh - 2 - bh; | |
- } | |
- else if(i == 0) { | |
- c->x = sx; | |
- c->y = sy + bh; | |
- c->w = mw - 2; | |
- c->h = sh - 2 - bh; | |
- } | |
- else if(h > bh) { | |
- c->x = sx + mw; | |
- c->y = sy + (i - 1) * h + bh; | |
- c->w = w - 2; | |
- if(i + 1 == n) | |
- c->h = sh - c->y - 2; | |
- else | |
- c->h = h - 2; | |
- } | |
- else { /* fallback if h < bh */ | |
- c->x = sx + mw; | |
- c->y = sy + bh; | |
- c->w = w - 2; | |
- c->h = sh - 2 - bh; | |
- } | |
- resize(c, False, TopLeft); | |
- i++; | |
- } | |
- else | |
- ban(c); | |
- } | |
- if(!sel || !isvisible(sel)) | |
- sel = getnext(clients); | |
- if(sel) | |
- focus(sel); | |
- else | |
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
- restack(); | |
-} | |
- | |
Client * | |
getnext(Client *c) | |
{ | |
t@@ -164,69 +75,6 @@ initrregs() | |
} | |
} | |
-Bool | |
-isvisible(Client *c) | |
-{ | |
- unsigned int i; | |
- | |
- for(i = 0; i < ntags; i++) | |
- if(c->tags[i] && seltag[i]) | |
- return True; | |
- return False; | |
-} | |
- | |
-void | |
-restack() | |
-{ | |
- static unsigned int nwins = 0; | |
- static Window *wins = NULL; | |
- unsigned int f, fi, m, mi, n; | |
- Client *c; | |
- XEvent ev; | |
- | |
- for(f = 0, m = 0, c = clients; c; c = c->next) | |
- if(isvisible(c)) { | |
- if(c->isfloat || arrange == dofloat) | |
- f++; | |
- else | |
- m++; | |
- } | |
- if(!(n = 2 * (f + m))) { | |
- drawstatus(); | |
- return; | |
- } | |
- if(nwins < n) { | |
- nwins = n; | |
- wins = erealloc(wins, nwins * sizeof(Window)); | |
- } | |
- | |
- fi = 0; | |
- mi = 2 * f; | |
- if(sel->isfloat || arrange == dofloat) { | |
- wins[fi++] = sel->title; | |
- wins[fi++] = sel->win; | |
- } | |
- else { | |
- wins[mi++] = sel->title; | |
- wins[mi++] = sel->win; | |
- } | |
- for(c = clients; c; c = c->next) | |
- if(isvisible(c) && c != sel) { | |
- if(c->isfloat || arrange == dofloat) { | |
- wins[fi++] = c->title; | |
- wins[fi++] = c->win; | |
- } | |
- else { | |
- wins[mi++] = c->title; | |
- wins[mi++] = c->win; | |
- } | |
- } | |
- XRestackWindows(dpy, wins, n); | |
- drawall(); | |
- XSync(dpy, False); | |
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
-} | |
- | |
void | |
settags(Client *c) | |
{ | |
t@@ -277,16 +125,6 @@ tag(Arg *arg) | |
} | |
void | |
-togglemode(Arg *arg) | |
-{ | |
- arrange = arrange == dofloat ? dotile : dofloat; | |
- if(sel) | |
- arrange(NULL); | |
- else | |
- drawstatus(); | |
-} | |
- | |
-void | |
toggletag(Arg *arg) | |
{ | |
unsigned int i; | |
t@@ -302,27 +140,3 @@ toggletag(Arg *arg) | |
if(!isvisible(sel)) | |
arrange(NULL); | |
} | |
- | |
- | |
-void | |
-toggleview(Arg *arg) | |
-{ | |
- unsigned int i; | |
- | |
- seltag[arg->i] = !seltag[arg->i]; | |
- for(i = 0; i < ntags && !seltag[i]; i++); | |
- if(i == ntags) | |
- seltag[arg->i] = True; /* cannot toggle last view */ | |
- arrange(NULL); | |
-} | |
- | |
-void | |
-view(Arg *arg) | |
-{ | |
- unsigned int i; | |
- | |
- for(i = 0; i < ntags; i++) | |
- seltag[i] = False; | |
- seltag[arg->i] = True; | |
- arrange(NULL); | |
-} | |
diff --git a/view.c b/view.c | |
t@@ -0,0 +1,253 @@ | |
+/* | |
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> | |
+ * See LICENSE file for license details. | |
+ */ | |
+#include "dwm.h" | |
+ | |
+/* extern */ | |
+ | |
+void (*arrange)(Arg *) = DEFMODE; | |
+ | |
+void | |
+dofloat(Arg *arg) | |
+{ | |
+ Client *c; | |
+ | |
+ for(c = clients; c; c = c->next) { | |
+ c->ismax = False; | |
+ if(isvisible(c)) { | |
+ resize(c, True, TopLeft); | |
+ } | |
+ else | |
+ ban(c); | |
+ } | |
+ if(!sel || !isvisible(sel)) | |
+ sel = getnext(clients); | |
+ if(sel) | |
+ focus(sel); | |
+ else | |
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
+ restack(); | |
+} | |
+ | |
+void | |
+dotile(Arg *arg) | |
+{ | |
+ int h, i, n, w; | |
+ Client *c; | |
+ | |
+ w = sw - mw; | |
+ for(n = 0, c = clients; c; c = c->next) | |
+ if(isvisible(c) && !c->isfloat) | |
+ n++; | |
+ | |
+ if(n > 1) | |
+ h = (sh - bh) / (n - 1); | |
+ else | |
+ h = sh - bh; | |
+ | |
+ for(i = 0, c = clients; c; c = c->next) { | |
+ c->ismax = False; | |
+ if(isvisible(c)) { | |
+ if(c->isfloat) { | |
+ resize(c, True, TopLeft); | |
+ continue; | |
+ } | |
+ if(n == 1) { | |
+ c->x = sx; | |
+ c->y = sy + bh; | |
+ c->w = sw - 2; | |
+ c->h = sh - 2 - bh; | |
+ } | |
+ else if(i == 0) { | |
+ c->x = sx; | |
+ c->y = sy + bh; | |
+ c->w = mw - 2; | |
+ c->h = sh - 2 - bh; | |
+ } | |
+ else if(h > bh) { | |
+ c->x = sx + mw; | |
+ c->y = sy + (i - 1) * h + bh; | |
+ c->w = w - 2; | |
+ if(i + 1 == n) | |
+ c->h = sh - c->y - 2; | |
+ else | |
+ c->h = h - 2; | |
+ } | |
+ else { /* fallback if h < bh */ | |
+ c->x = sx + mw; | |
+ c->y = sy + bh; | |
+ c->w = w - 2; | |
+ c->h = sh - 2 - bh; | |
+ } | |
+ resize(c, False, TopLeft); | |
+ i++; | |
+ } | |
+ else | |
+ ban(c); | |
+ } | |
+ if(!sel || !isvisible(sel)) | |
+ sel = getnext(clients); | |
+ if(sel) | |
+ focus(sel); | |
+ else | |
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); | |
+ restack(); | |
+} | |
+ | |
+void | |
+focusnext(Arg *arg) | |
+{ | |
+ Client *c; | |
+ | |
+ if(!sel) | |
+ return; | |
+ | |
+ if(!(c = getnext(sel->next))) | |
+ c = getnext(clients); | |
+ if(c) { | |
+ focus(c); | |
+ restack(); | |
+ } | |
+} | |
+ | |
+void | |
+focusprev(Arg *arg) | |
+{ | |
+ Client *c; | |
+ | |
+ if(!sel) | |
+ return; | |
+ | |
+ if(!(c = getprev(sel->prev))) { | |
+ for(c = clients; c && c->next; c = c->next); | |
+ c = getprev(c); | |
+ } | |
+ if(c) { | |
+ focus(c); | |
+ restack(); | |
+ } | |
+} | |
+ | |
+Bool | |
+isvisible(Client *c) | |
+{ | |
+ unsigned int i; | |
+ | |
+ for(i = 0; i < ntags; i++) | |
+ if(c->tags[i] && seltag[i]) | |
+ return True; | |
+ return False; | |
+} | |
+ | |
+void | |
+restack() | |
+{ | |
+ static unsigned int nwins = 0; | |
+ static Window *wins = NULL; | |
+ unsigned int f, fi, m, mi, n; | |
+ Client *c; | |
+ XEvent ev; | |
+ | |
+ for(f = 0, m = 0, c = clients; c; c = c->next) | |
+ if(isvisible(c)) { | |
+ if(c->isfloat || arrange == dofloat) | |
+ f++; | |
+ else | |
+ m++; | |
+ } | |
+ if(!(n = 2 * (f + m))) { | |
+ drawstatus(); | |
+ return; | |
+ } | |
+ if(nwins < n) { | |
+ nwins = n; | |
+ wins = erealloc(wins, nwins * sizeof(Window)); | |
+ } | |
+ | |
+ fi = 0; | |
+ mi = 2 * f; | |
+ if(sel->isfloat || arrange == dofloat) { | |
+ wins[fi++] = sel->title; | |
+ wins[fi++] = sel->win; | |
+ } | |
+ else { | |
+ wins[mi++] = sel->title; | |
+ wins[mi++] = sel->win; | |
+ } | |
+ for(c = clients; c; c = c->next) | |
+ if(isvisible(c) && c != sel) { | |
+ if(c->isfloat || arrange == dofloat) { | |
+ wins[fi++] = c->title; | |
+ wins[fi++] = c->win; | |
+ } | |
+ else { | |
+ wins[mi++] = c->title; | |
+ wins[mi++] = c->win; | |
+ } | |
+ } | |
+ XRestackWindows(dpy, wins, n); | |
+ drawall(); | |
+ XSync(dpy, False); | |
+ while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
+} | |
+ | |
+void | |
+togglemode(Arg *arg) | |
+{ | |
+ arrange = arrange == dofloat ? dotile : dofloat; | |
+ if(sel) | |
+ arrange(NULL); | |
+ else | |
+ drawstatus(); | |
+} | |
+ | |
+void | |
+toggleview(Arg *arg) | |
+{ | |
+ unsigned int i; | |
+ | |
+ seltag[arg->i] = !seltag[arg->i]; | |
+ for(i = 0; i < ntags && !seltag[i]; i++); | |
+ if(i == ntags) | |
+ seltag[arg->i] = True; /* cannot toggle last view */ | |
+ arrange(NULL); | |
+} | |
+ | |
+void | |
+view(Arg *arg) | |
+{ | |
+ unsigned int i; | |
+ | |
+ for(i = 0; i < ntags; i++) | |
+ seltag[i] = False; | |
+ seltag[arg->i] = True; | |
+ arrange(NULL); | |
+} | |
+ | |
+void | |
+zoom(Arg *arg) | |
+{ | |
+ Client *c; | |
+ | |
+ if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax) | |
+ return; | |
+ | |
+ if(sel == getnext(clients)) { | |
+ if((c = getnext(sel->next))) | |
+ sel = c; | |
+ else | |
+ return; | |
+ } | |
+ | |
+ /* pop */ | |
+ sel->prev->next = sel->next; | |
+ if(sel->next) | |
+ sel->next->prev = sel->prev; | |
+ sel->prev = NULL; | |
+ clients->prev = sel; | |
+ sel->next = clients; | |
+ clients = sel; | |
+ focus(sel); | |
+ arrange(NULL); | |
+} |