Xinqi Bao's Git
projects
/
dwm.git
/ commitdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (parent:
dba2284
)
removed the string-based setgeom approach, introduced a new Geom type instead and...
author
Anselm R Garbe <
[email protected]
>
Mon, 17 Mar 2008 14:56:11 +0000
(14:56 +0000)
committer
Anselm R Garbe <
[email protected]
>
Mon, 17 Mar 2008 14:56:11 +0000
(14:56 +0000)
config.def.h
patch
|
blob
|
history
dwm.c
patch
|
blob
|
history
diff --git
a/config.def.h
b/config.def.h
index
f6d90d8
..
8130909
100644
(file)
--- a/
config.def.h
+++ b/
config.def.h
@@
-9,19
+9,6
@@
#define SELBORDERCOLOR "#0066ff"
#define SELBGCOLOR "#0066ff"
#define SELFGCOLOR "#ffffff"
#define SELBORDERCOLOR "#0066ff"
#define SELBGCOLOR "#0066ff"
#define SELFGCOLOR "#ffffff"
-#define GEOMETRY "0 0 W B " \
- "0 B W H-B " \
- "0 B W*0.55 H-B " \
- "W*0.55 B W*0.45 H-B " \
- "0 B W H-B"
-
-/* Anselm's dual head geometry in the office */
-#define DUALGEOMETRY "0 0 1280 B " \
- "0 B W H-B " \
- "0 B 1280 800-B " \
- "1280 0 W-1280 H " \
- "0 B 1280 800-B"
-
/* tagging */
const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
/* tagging */
const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
@@
-34,6
+21,17
@@
Rule rules[] = {
{ NULL, NULL, "Acroread", NULL, True },
};
{ NULL, NULL, "Acroread", NULL, True },
};
+/* geometries, s{x,y,w,h} and bh are already initualized here */
+/* func name bx by bw wx wy ww wh mx my mw mh tx ty tw th mox moy mow moh */
+DEFGEOM(single, 0, 0, sw, 0, bh, sw, sh-bh, wx, wy, 0.55*sw, wh, mx+mw, wy, ww-mw, wh, wx, wy, ww, wh)
+DEFGEOM(dual, 0, 0,1280, 0, bh, ww, wh-bh, wx, wy, 1280,800-bh, 1280, 0, ww-mw, sh, mx, my, mw, mh)
+
+Geom geoms[] = {
+ /* symbol function */
+ { "[]", single }, /* first entry is default */
+ { "[][]", dual },
+};
+
/* layout(s) */
#define RESIZEHINTS True /* False - respect size hints in tiled resizals */
#define SNAP 32 /* snap pixel */
/* layout(s) */
#define RESIZEHINTS True /* False - respect size hints in tiled resizals */
#define SNAP 32 /* snap pixel */
@@
-50,8
+48,8
@@
Layout layouts[] = {
#define MODKEY Mod1Mask
Key keys[] = {
/* modifier key function argument */
#define MODKEY Mod1Mask
Key keys[] = {
/* modifier key function argument */
- { MODKEY, XK_a, setgeom,
DUALGEOMETRY
},
- { MODKEY, XK_d, setgeom,
GEOMETRY
},
+ { MODKEY, XK_a, setgeom,
"[][]"
},
+ { MODKEY, XK_d, setgeom,
"[]"
},
{ MODKEY, XK_p, spawn,
"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" },
{ MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" },
{ MODKEY, XK_p, spawn,
"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" },
{ MODKEY|ShiftMask, XK_Return, spawn, "exec uxterm" },
diff --git
a/dwm.c
b/dwm.c
index
4a9ca82
..
f83e800
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-46,6
+46,14
@@
#define LENGTH(x) (sizeof x / sizeof x[0])
#define MAXTAGLEN 16
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
#define LENGTH(x) (sizeof x / sizeof x[0])
#define MAXTAGLEN 16
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
+#define DEFGEOM(GEONAME,BX,BY,BW,WX,WY,WW,WH,MX,MY,MW,MH,TX,TY,TW,TH,MOX,MOY,MOW,MOH) \
+void GEONAME(void) { \
+ bx = (BX); by = (BY); bw = (BW); \
+ wx = (WX); wy = (WY); ww = (WW); wh = (WH); \
+ mx = (MX); my = (MY); mw = (MW); mh = (MH); \
+ tx = (TX); ty = (TY); tw = (TW); th = (TH); \
+ mox = (MOX); moy = (MOY); mow = (MOW); moh = (MOH); \
+}
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
@@
-85,6
+93,11
@@
typedef struct {
} font;
} DC; /* draw context */
} font;
} DC; /* draw context */
+typedef struct {
+ const char *symbol;
+ void (*apply)(void);
+} Geom;
+
typedef struct {
unsigned long mod;
KeySym keysym;
typedef struct {
unsigned long mod;
KeySym keysym;
@@
-107,7
+120,6
@@
typedef struct {
} Rule;
/* function declarations */
} Rule;
/* function declarations */
-void applygeom(const char *arg);
void applyrules(Client *c);
void arrange(void);
void attach(Client *c);
void applyrules(Client *c);
void arrange(void);
void attach(Client *c);
@@
-137,7
+149,6
@@
void focusnext(const char *arg);
void focusprev(const char *arg);
Client *getclient(Window w);
unsigned long getcolor(const char *colstr);
void focusprev(const char *arg);
Client *getclient(Window w);
unsigned long getcolor(const char *colstr);
-double getdouble(const char *s);
long getstate(Window w);
Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
void grabbuttons(Client *c, Bool focused);
long getstate(Window w);
Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
void grabbuttons(Client *c, Bool focused);
@@
-226,6
+237,7
@@
Client *stack = NULL;
Cursor cursor[CurLast];
Display *dpy;
DC dc = {0};
Cursor cursor[CurLast];
Display *dpy;
DC dc = {0};
+Geom *geom = NULL;
Layout *lt = NULL;
Window root, barwin;
Layout *lt = NULL;
Window root, barwin;
@@
-236,55
+248,6
@@
static Bool tmp[LENGTH(tags)];
/* function implementations */
/* function implementations */
-void
-applygeometry(const char *arg) {
- static const char *lastArg = NULL;
- char delim, op, *s, *e, *p;
- double val;
- int i, *map[] = { &bx, &by, &bw, &bh,
- &wx, &wy, &ww, &wh,
- &mx, &my, &mw, &mh,
- &tx, &ty, &tw, &th,
- &mox, &moy, &mow, &moh };
-
- if(!arg)
- arg = lastArg;
- else
- lastArg = arg;
- if(!lastArg)
- return;
- strncpy(buf, arg, sizeof buf);
- for(i = 0, e = s = buf; i < LENGTH(map) && e; e++)
- if(*e == ' ' || *e == 0) {
- delim = *e;
- *e = 0;
- op = 0;
- /* check if there is an operator */
- for(p = s; p < e && *p != '-' && *p != '+' && *p != '*'; p++);
- if(*p) {
- op = *p;
- *p = 0;
- }
- val = getdouble(s);
- if(op && p > s) { /* intermediate operand, e.g. H-B */
- *(map[i]) = (int)val;
- s = ++p;
- val = getdouble(s);
- }
- switch(op) {
- default: *(map[i]) = (int)val; break;
- case '-': *(map[i]) -= (int)val; break;
- case '+': *(map[i]) += (int)val; break;
- case '*': *(map[i]) = (int)(((double)*(map[i])) * val); break;
- }
- if(delim == 0)
- e = NULL;
- else
- s = ++e;
- i++;
- }
-}
-
void
applyrules(Client *c) {
unsigned int i;
void
applyrules(Client *c) {
unsigned int i;
@@
-1438,27
+1401,17
@@
setclientstate(Client *c, long state) {
PropModeReplace, (unsigned char *)data, 2);
}
PropModeReplace, (unsigned char *)data, 2);
}
-double
-getdouble(const char *s) {
- char *endp;
- double result = 0;
-
- switch(*s) {
- default:
- result = strtod(s, &endp);
- if(s == endp || *endp != 0)
- result = strtol(s, &endp, 0);
- break;
- case 'B': result = dc.font.height + 2; break;
- case 'W': result = sw; break;
- case 'H': result = sh; break;
- }
- return result;
-}
-
void
setgeom(const char *arg) {
void
setgeom(const char *arg) {
- applygeometry(arg);
+ unsigned int i;
+
+ for(i = 0; arg && i < LENGTH(geoms); i++)
+ if(!strcmp(geoms[i].symbol, arg))
+ break;
+ if(i == LENGTH(geoms))
+ return;
+ geom = &geoms[i];
+ geom->apply();
updatebarpos();
arrange();
}
updatebarpos();
arrange();
}
@@
-1497,12
+1450,14
@@
setup(void) {
root = RootWindow(dpy, screen);
initfont(FONT);
root = RootWindow(dpy, screen);
initfont(FONT);
- /* apply default
dimensions
*/
+ /* apply default
geometry
*/
sx = 0;
sy = 0;
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
sx = 0;
sy = 0;
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
- applygeometry(GEOMETRY);
+ bh = dc.font.height + 2;
+ geom = &geoms[0];
+ geom->apply();
/* init atoms */
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
/* init atoms */
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);