made bar togglalble
2aef8b9b
5 file(s) · +47 −18
| 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" }, \ |
|
| 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" }, \ |
|
| 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 | ||
| 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 |
| 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 |
|