made bar togglalble 2aef8b9b
Anselm R. Garbe · 2007-05-15 12:09 5 file(s) · +47 −18
config.arg.h +2 −1
3 3
 * See LICENSE file for license details. */
4 4
5 5
/* appearance */
6 +
#define BARPOS			BarTop /* BarBot, BarOff */
6 7
#define BORDERPX		1
7 8
#define FONT			"-*-pixelcarnage monospace-*-r-*-*-14-*-*-*-*-*-*-*"
8 9
#define NORMBORDERCOLOR		"#333"
11 12
#define SELBORDERCOLOR		"#8c8"
12 13
#define SELBGCOLOR		"#555"
13 14
#define SELFGCOLOR		"#fff"
14 -
#define TOPBAR			True		/* False */
15 15
16 16
/* tagging */
17 17
#define TAGS \
47 47
	{ MODKEY|ShiftMask,		XK_Return,	spawn, \
48 48
		"exec urxvtcd -tr -bg '#222' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" }, \
49 49
	{ MODKEY,			XK_space,	setlayout,	NULL }, \
50 +
	{ MODKEY,			XK_b,		togglebar,	NULL }, \
50 51
	{ MODKEY,			XK_h,		incmasterw,	"-32" }, \
51 52
	{ MODKEY,			XK_l,		incmasterw,	"32" }, \
52 53
	{ MODKEY|ShiftMask,		XK_j,		incnmaster,	"1" }, \
config.default.h +2 −1
3 3
 * See LICENSE file for license details. */
4 4
5 5
/* appearance */
6 +
#define BARPOS			BarTop /* BarBot, BarOff */
6 7
#define BORDERPX		1
7 8
#define FONT			"-*-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"
8 9
#define NORMBORDERCOLOR		"#dddddd"
11 12
#define SELBORDERCOLOR		"#ff0000"
12 13
#define SELBGCOLOR		"#006699"
13 14
#define SELFGCOLOR		"#ffffff"
14 -
#define TOPBAR			True		/* False */
15 15
16 16
/* tagging */
17 17
#define TAGS \
45 45
	{ MODKEY|ShiftMask,		XK_Return,	spawn,		"exec xterm" }, \
46 46
	{ MODKEY,			XK_p,		spawn, 		"exe=`dmenu_path | dmenu` && exec $exe" }, \
47 47
	{ MODKEY,			XK_space,	setlayout,	NULL }, \
48 +
	{ MODKEY,			XK_b,		togglebar,	NULL }, \
48 49
	{ MODKEY,			XK_h,		incmasterw,	"-32" }, \
49 50
	{ MODKEY,			XK_l,		incmasterw,	"32" }, \
50 51
	{ MODKEY|ShiftMask,		XK_j,		incnmaster,	"1" }, \
dwm.h +12 −9
37 37
/* mask shorthands, used in event.c and client.c */
38 38
#define BUTTONMASK		(ButtonPressMask | ButtonReleaseMask)
39 39
40 +
enum { BarTop, BarBot, BarOff };			/* bar position */
41 +
enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */
42 +
enum { ColBorder, ColFG, ColBG, ColLast };		/* color */
40 43
enum { NetSupported, NetWMName, NetLast };		/* EWMH atoms */
41 44
enum { WMProtocols, WMDelete, WMState, WMLast };	/* default atoms */
42 -
enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */
43 -
enum { ColBorder, ColFG, ColBG, ColLast };		/* color */
44 45
45 46
typedef struct Client Client;
46 47
struct Client {
83 84
char stext[256];			/* status text */
84 85
int screen, sx, sy, sw, sh;		/* screen geometry */
85 86
int wax, way, wah, waw;			/* windowarea geometry */
86 -
unsigned int bh, blw;			/* bar height, bar layout label width */
87 +
unsigned int bh, blw, bpos;		/* bar height, bar layout label width, bar position */
87 88
unsigned int ntags, numlockmask;	/* number of tags, dynamic lock mask */
88 89
void (*handler[LASTEvent])(XEvent *);	/* event handler */
89 90
Atom wmatom[WMLast], netatom[NetLast];
100 101
void configure(Client *c);		/* send synthetic configure event */
101 102
void detach(Client *c);			/* detaches c from global client list */
102 103
void focus(Client *c);			/* focus c, c may be NULL */
103 -
void focustopvisible(void);	    /* focus top visible window on stack */
104 -
void killclient(const char *arg);		/* kill sel  nicely */
104 +
void focustopvisible(void);		/* focus top visible window on stack */
105 +
void killclient(const char *arg);	/* kill sel  nicely */
105 106
void manage(Window w, XWindowAttributes *wa);	/* manage new client */
106 107
void resize(Client *c, int x, int y,
107 108
		int w, int h, Bool sizehints);	/* resize with given coordinates c*/
108 109
void togglefloating(const char *arg);	/* toggles sel between floating/tiled state */
109 -
void updatesizehints(Client *c);		/* update the size hint variables of c */
110 +
void updatesizehints(Client *c);	/* update the size hint variables of c */
110 111
void updatetitle(Client *c);		/* update the name of c */
111 112
void unmanage(Client *c);		/* destroy c */
112 113
126 127
void initlayouts(void);			/* initialize layout array */
127 128
Client *nexttiled(Client *c);		/* returns tiled successor of c */
128 129
void restack(void);			/* restores z layers of all clients */
129 -
void setlayout(const char *arg);		/* sets layout, -1 toggles */
130 -
void togglemax(const char *arg);		/* toggles maximization of floating client */
130 +
void setlayout(const char *arg);	/* sets layout, -1 toggles */
131 +
void togglebar(const char *arg);	/* shows/hides the bar */
132 +
void togglemax(const char *arg);	/* toggles maximization of floating client */
131 133
void zoom(const char *arg);		/* zooms the focused client to master area, arg is ignored */
132 134
133 135
/* main.c */
136 +
void updatebarpos(void);		/* updates the bar position */
134 137
void quit(const char *arg);		/* quit dwm nicely */
135 138
int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */
136 139
139 142
Bool isvisible(Client *c);		/* returns True if client is visible */
140 143
void settags(Client *c, Client *trans);	/* sets tags of c */
141 144
void tag(const char *arg);		/* tags sel with arg's index */
142 -
void toggletag(const char *arg);		/* toggles sel tags with arg's index */
145 +
void toggletag(const char *arg);	/* toggles sel tags with arg's index */
143 146
void toggleview(const char *arg);	/* toggles the tag with arg's index (in)visible */
144 147
void view(const char *arg);		/* views the tag with arg's index */
145 148
layout.c +6 −0
217 217
}
218 218
219 219
void
220 +
togglebar(const char *arg) {
221 +
	bpos = (bpos == BarOff) ? BARPOS : BarOff;
222 +
	updatebarpos();
223 +
}
224 +
225 +
void
220 226
togglemax(const char *arg) {
221 227
	XEvent ev;
222 228
main.c +25 −7
18 18
19 19
char stext[256];
20 20
int screen, sx, sy, sw, sh, wax, way, waw, wah;
21 -
unsigned int bh, ntags, numlockmask;
21 +
unsigned int bh, bpos, ntags, numlockmask;
22 22
Atom wmatom[WMLast], netatom[NetLast];
23 23
Bool *seltag;
24 24
Bool selscreen = True;
190 190
	wa.override_redirect = 1;
191 191
	wa.background_pixmap = ParentRelative;
192 192
	wa.event_mask = ButtonPressMask | ExposureMask;
193 -
	barwin = XCreateWindow(dpy, root, sx, sy + (TOPBAR ? 0 : sh - bh), sw, bh, 0,
193 +
	barwin = XCreateWindow(dpy, root, sx, sy - bh, sw, bh, 0,
194 194
			DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
195 195
			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
196 196
	XDefineCursor(dpy, barwin, cursor[CurNormal]);
197 +
	updatebarpos();
197 198
	XMapRaised(dpy, barwin);
198 199
	strcpy(stext, "dwm-"VERSION);
199 -
	/* windowarea */
200 -
	wax = sx;
201 -
	way = sy + (TOPBAR ? bh : 0);
202 -
	wah = sh - bh;
203 -
	waw = sw;
204 200
	/* pixmap for everything */
205 201
	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
206 202
	dc.gc = XCreateGC(dpy, root, 0, 0);
226 222
void
227 223
quit(const char *arg) {
228 224
	readin = running = False;
225 +
}
226 +
227 +
void
228 +
updatebarpos(void) {
229 +
	wax = sx;
230 +
	way = sy;
231 +
	wah = sh;
232 +
	waw = sw;
233 +
	switch(bpos) {
234 +
	case BarTop:
235 +
		wah -= bh;
236 +
		way += bh;
237 +
		XMoveWindow(dpy, barwin, sx, sy);
238 +
		break;
239 +
	case BarBot:
240 +
		wah -= bh;
241 +
		XMoveWindow(dpy, barwin, sx, sy + wah);
242 +
		break;
243 +
	case BarOff:
244 +
		XMoveWindow(dpy, barwin, sx, sy - bh);
245 +
	}
246 +
	lt->arrange();
229 247
}
230 248
231 249
/* There's no way to check accesses to destroyed windows, thus those cases are