tmade Layout a static struct in layout.c, added some convenience getters in lay… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 77044e876511f51c34bde379d89e2de754707ee6 | |
parent 2feb3afe784cbd9d900bd70aad91431a4b25f2ab | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Mon, 13 Aug 2007 19:13:54 +0200 | |
made Layout a static struct in layout.c, added some convenience getters in layo… | |
Diffstat: | |
M client.c | 9 +++++---- | |
M config.mk | 4 ++-- | |
M draw.c | 2 +- | |
M dwm.h | 11 ++++------- | |
M event.c | 10 +++++----- | |
M layout.c | 47 ++++++++++++++++++++++++-----… | |
M tag.c | 8 ++++---- | |
M tile.c | 13 ++++--------- | |
8 files changed, 62 insertions(+), 42 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -230,13 +230,14 @@ manage(Window w, XWindowAttributes *wa) { | |
setclientstate(c, IconicState); | |
c->isbanned = True; | |
focus(c); | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | |
double dx, dy, max, min, ratio; | |
XWindowChanges wc; | |
+ | |
if(sizehints) { | |
if(c->minay > 0 && c->maxay > 0 && (h - c->baseh) > 0 && (w - … | |
dx = (double)(w - c->basew); | |
t@@ -297,12 +298,12 @@ resize(Client *c, int x, int y, int w, int h, Bool sizeh… | |
void | |
togglefloating(const char *arg) { | |
- if(!sel || lt->arrange == floating) | |
+ if(!sel || isfloating()) | |
return; | |
sel->isfloating = !sel->isfloating; | |
if(sel->isfloating) | |
resize(sel, sel->x, sel->y, sel->w, sel->h, True); | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
t@@ -334,7 +335,7 @@ unmanage(Client *c) { | |
XSync(dpy, False); | |
XSetErrorHandler(xerror); | |
XUngrabServer(dpy); | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
diff --git a/config.mk b/config.mk | |
t@@ -20,8 +20,8 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 | |
# flags | |
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | |
LDFLAGS = -s ${LIBS} | |
-CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | |
-LDFLAGS = -g ${LIBS} | |
+#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | |
+#LDFLAGS = -g ${LIBS} | |
# Solaris | |
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" | |
diff --git a/draw.c b/draw.c | |
t@@ -66,7 +66,7 @@ drawstatus(void) { | |
dc.x += dc.w; | |
} | |
dc.w = blw; | |
- drawtext(lt->symbol, dc.norm); | |
+ drawtext(getsymbol(), dc.norm); | |
x = dc.x + dc.w; | |
dc.w = textw(stext); | |
dc.x = sw - dc.w; | |
diff --git a/dwm.h b/dwm.h | |
t@@ -74,11 +74,6 @@ typedef struct { | |
} font; | |
} DC; /* draw context */ | |
-typedef struct { | |
- const char *symbol; | |
- void (*arrange)(void); | |
-} Layout; | |
- | |
extern const char *tags[]; /* all tags */ | |
extern char stext[256]; /* status text */ | |
extern int screen, sx, sy, sw, sh; /* screen geometry */ | |
t@@ -92,7 +87,6 @@ extern Client *clients, *sel, *stack; /* glob… | |
extern Cursor cursor[CurLast]; | |
extern DC dc; /* global draw context */ | |
extern Display *dpy; | |
-extern Layout *lt; | |
extern Window root, barwin; | |
/* client.c */ | |
t@@ -120,8 +114,11 @@ unsigned int textw(const char *text); /* return th… | |
void grabkeys(void); /* grab all keys defined in config… | |
/* layout.c */ | |
-void floating(void); /* arranges all windows floating, … | |
+void arrange(void); /* arranges all windows depending o… | |
void focusclient(const char *arg); /* focuses next(1)/previous(-1) visi… | |
+const char *getsymbol(void); /* returns True symbol of enabled… | |
+Bool isfloating(void); /* returns True if floating layo… | |
+Bool isarrange(void (*func)()); /* returns True if func is the … | |
void initlayouts(void); /* initialize layout array */ | |
Client *nexttiled(Client *c); /* returns tiled successor of c */ | |
void restack(void); /* restores z layers of all clients… | |
diff --git a/event.c b/event.c | |
t@@ -145,14 +145,14 @@ buttonpress(XEvent *e) { | |
focus(c); | |
if(CLEANMASK(ev->state) != MODKEY) | |
return; | |
- if(ev->button == Button1 && (lt->arrange == floating || c->isf… | |
+ if(ev->button == Button1 && (isfloating() || c->isfloating)) { | |
restack(); | |
movemouse(c); | |
} | |
else if(ev->button == Button2) | |
zoom(NULL); | |
else if(ev->button == Button3 | |
- && (lt->arrange == floating || c->isfloating) && !c->isfixed) | |
+ && (isfloating() || c->isfloating) && !c->isfixed) | |
{ | |
restack(); | |
resizemouse(c); | |
t@@ -170,7 +170,7 @@ configurerequest(XEvent *e) { | |
c->ismax = False; | |
if(ev->value_mask & CWBorderWidth) | |
c->border = ev->border_width; | |
- if(c->isfixed || c->isfloating || (lt->arrange == floating)) { | |
+ if(c->isfixed || c->isfloating || isfloating()) { | |
if(ev->value_mask & CWX) | |
c->x = ev->x; | |
if(ev->value_mask & CWY) | |
t@@ -216,7 +216,7 @@ configurenotify(XEvent *e) { | |
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dp… | |
XResizeWindow(dpy, barwin, sw, bh); | |
updatebarpos(); | |
- lt->arrange(); | |
+ arrange(); | |
} | |
} | |
t@@ -317,7 +317,7 @@ propertynotify(XEvent *e) { | |
case XA_WM_TRANSIENT_FOR: | |
XGetTransientForHint(dpy, c->win, &trans); | |
if(!c->isfloating && (c->isfloating = (getclie… | |
- lt->arrange(); | |
+ arrange(); | |
break; | |
case XA_WM_NORMAL_HINTS: | |
updatesizehints(c); | |
diff --git a/layout.c b/layout.c | |
t@@ -2,11 +2,25 @@ | |
#include "dwm.h" | |
#include <stdlib.h> | |
+typedef struct { | |
+ const char *symbol; | |
+ void (*arrange)(void); | |
+} Layout; | |
+ | |
unsigned int blw = 0; | |
-Layout *lt = NULL; | |
+static Layout *lt = NULL; | |
/* static */ | |
+static void | |
+floating(void) { | |
+ Client *c; | |
+ | |
+ for(c = clients; c; c = c->next) | |
+ if(isvisible(c)) | |
+ resize(c, c->x, c->y, c->w, c->h, True); | |
+} | |
+ | |
static unsigned int nlayouts = 0; | |
LAYOUTS | |
t@@ -14,19 +28,15 @@ LAYOUTS | |
/* extern */ | |
void | |
-floating(void) { | |
+arrange(void) { | |
Client *c; | |
- if(lt->arrange != floating) | |
- return; | |
- | |
for(c = clients; c; c = c->next) | |
- if(isvisible(c)) { | |
+ if(isvisible(c)) | |
unban(c); | |
- resize(c, c->x, c->y, c->w, c->h, True); | |
- } | |
else | |
ban(c); | |
+ lt->arrange(); | |
focus(NULL); | |
restack(); | |
} | |
t@@ -55,6 +65,23 @@ focusclient(const char *arg) { | |
} | |
} | |
+const char * | |
+getsymbol(void) | |
+{ | |
+ return lt->symbol; | |
+} | |
+ | |
+Bool | |
+isfloating(void) { | |
+ return lt->arrange == floating; | |
+} | |
+ | |
+Bool | |
+isarrange(void (*func)()) | |
+{ | |
+ return func == lt->arrange; | |
+} | |
+ | |
void | |
initlayouts(void) { | |
unsigned int i, w; | |
t@@ -119,7 +146,7 @@ setlayout(const char *arg) { | |
lt = &layout[i]; | |
} | |
if(sel) | |
- lt->arrange(); | |
+ arrange(); | |
else | |
drawstatus(); | |
} | |
t@@ -131,7 +158,7 @@ togglebar(const char *arg) { | |
else | |
bpos = BarOff; | |
updatebarpos(); | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
diff --git a/tag.c b/tag.c | |
t@@ -110,7 +110,7 @@ tag(const char *arg) { | |
i = arg ? atoi(arg) : 0; | |
if(i >= 0 && i < ntags) | |
sel->tags[i] = True; | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
t@@ -124,7 +124,7 @@ toggletag(const char *arg) { | |
for(j = 0; j < ntags && !sel->tags[j]; j++); | |
if(j == ntags) | |
sel->tags[i] = True; | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
t@@ -136,7 +136,7 @@ toggleview(const char *arg) { | |
for(j = 0; j < ntags && !seltag[j]; j++); | |
if(j == ntags) | |
seltag[i] = True; /* cannot toggle last view */ | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
t@@ -148,5 +148,5 @@ view(const char *arg) { | |
i = arg ? atoi(arg) : 0; | |
if(i >= 0 && i < ntags) | |
seltag[i] = True; | |
- lt->arrange(); | |
+ arrange(); | |
} | |
diff --git a/tile.c b/tile.c | |
t@@ -12,7 +12,7 @@ void | |
addtomwfact(const char *arg) { | |
double delta; | |
- if(lt->arrange != tile) | |
+ if(isarrange(tile)) | |
return; | |
/* arg handling, manipulate mwfact */ | |
t@@ -20,7 +20,7 @@ addtomwfact(const char *arg) { | |
if(delta + mwfact > 0.1 && delta + mwfact < 0.9) | |
mwfact += delta; | |
} | |
- lt->arrange(); | |
+ arrange(); | |
} | |
void | |
t@@ -41,7 +41,6 @@ tile(void) { | |
ny = way; | |
for(i = 0, c = clients; c; c = c->next) | |
if(isvisible(c)) { | |
- unban(c); | |
if(c->isfloating) | |
continue; | |
c->ismax = False; | |
t@@ -65,17 +64,13 @@ tile(void) { | |
ny += nh + 2 * c->border; | |
i++; | |
} | |
- else | |
- ban(c); | |
- focus(NULL); | |
- restack(); | |
} | |
void | |
zoom(const char *arg) { | |
Client *c; | |
- if(!sel || lt->arrange == floating || sel->isfloating) | |
+ if(!sel || !isarrange(tile) || sel->isfloating) | |
return; | |
if((c = sel) == nexttiled(clients)) | |
if(!(c = nexttiled(c->next))) | |
t@@ -83,5 +78,5 @@ zoom(const char *arg) { | |
detach(c); | |
attach(c); | |
focus(c); | |
- lt->arrange(); | |
+ arrange(); | |
} |