applied yiyus domax patch with slight modifications
0fe2e783
3 file(s) · +55 −76
| 34 | 34 | ||
| 35 | 35 | /* key definitions */ |
|
| 36 | 36 | #define MODKEY Mod1Mask |
|
| 37 | + | #define TAGKEYS(KEY,TAG) \ |
|
| 38 | + | { MODKEY, KEY, view, TAG }, \ |
|
| 39 | + | { MODKEY|ControlMask, KEY, toggleview, TAG }, \ |
|
| 40 | + | { MODKEY|ShiftMask, KEY, tag, TAG }, \ |
|
| 41 | + | { MODKEY|ControlMask|ShiftMask, KEY, toggletag, TAG }, |
|
| 42 | + | ||
| 37 | 43 | Key keys[] = { |
|
| 38 | 44 | /* modifier key function argument */ |
|
| 39 | 45 | { MODKEY, XK_p, spawn, (char *)"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }, |
|
| 43 | 49 | { MODKEY, XK_k, focusprev, NULL }, |
|
| 44 | 50 | { MODKEY, XK_h, setmfact, (double[]){-0.05} }, |
|
| 45 | 51 | { MODKEY, XK_l, setmfact, (double[]){+0.05} }, |
|
| 52 | + | { MODKEY, XK_m, togglemax, NULL }, |
|
| 46 | 53 | { MODKEY, XK_Return, zoom, NULL }, |
|
| 47 | 54 | { MODKEY, XK_Tab, viewprevtag, NULL }, |
|
| 48 | 55 | { MODKEY|ShiftMask, XK_c, killclient, NULL }, |
|
| 49 | 56 | { MODKEY, XK_space, togglelayout, NULL }, |
|
| 50 | 57 | { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, |
|
| 51 | 58 | { MODKEY, XK_0, view, (uint[]){ ~0 } }, |
|
| 52 | - | { MODKEY, XK_1, view, (uint[]){ 1 << 0 } }, |
|
| 53 | - | { MODKEY, XK_2, view, (uint[]){ 1 << 1 } }, |
|
| 54 | - | { MODKEY, XK_3, view, (uint[]){ 1 << 2 } }, |
|
| 55 | - | { MODKEY, XK_4, view, (uint[]){ 1 << 3 } }, |
|
| 56 | - | { MODKEY, XK_5, view, (uint[]){ 1 << 4 } }, |
|
| 57 | - | { MODKEY, XK_6, view, (uint[]){ 1 << 5 } }, |
|
| 58 | - | { MODKEY, XK_7, view, (uint[]){ 1 << 6 } }, |
|
| 59 | - | { MODKEY, XK_8, view, (uint[]){ 1 << 7 } }, |
|
| 60 | - | { MODKEY, XK_9, view, (uint[]){ 1 << 8 } }, |
|
| 61 | - | { MODKEY|ControlMask, XK_1, toggleview, (uint[]){ 1 << 0 } }, |
|
| 62 | - | { MODKEY|ControlMask, XK_2, toggleview, (uint[]){ 1 << 1 } }, |
|
| 63 | - | { MODKEY|ControlMask, XK_3, toggleview, (uint[]){ 1 << 2 } }, |
|
| 64 | - | { MODKEY|ControlMask, XK_4, toggleview, (uint[]){ 1 << 3 } }, |
|
| 65 | - | { MODKEY|ControlMask, XK_5, toggleview, (uint[]){ 1 << 4 } }, |
|
| 66 | - | { MODKEY|ControlMask, XK_6, toggleview, (uint[]){ 1 << 5 } }, |
|
| 67 | - | { MODKEY|ControlMask, XK_7, toggleview, (uint[]){ 1 << 6 } }, |
|
| 68 | - | { MODKEY|ControlMask, XK_8, toggleview, (uint[]){ 1 << 7 } }, |
|
| 69 | - | { MODKEY|ControlMask, XK_9, toggleview, (uint[]){ 1 << 8 } }, |
|
| 70 | 59 | { MODKEY|ShiftMask, XK_0, tag, (uint[]){ ~0 } }, |
|
| 71 | - | { MODKEY|ShiftMask, XK_1, tag, (uint[]){ 1 << 0 } }, |
|
| 72 | - | { MODKEY|ShiftMask, XK_2, tag, (uint[]){ 1 << 1 } }, |
|
| 73 | - | { MODKEY|ShiftMask, XK_3, tag, (uint[]){ 1 << 2 } }, |
|
| 74 | - | { MODKEY|ShiftMask, XK_4, tag, (uint[]){ 1 << 3 } }, |
|
| 75 | - | { MODKEY|ShiftMask, XK_5, tag, (uint[]){ 1 << 4 } }, |
|
| 76 | - | { MODKEY|ShiftMask, XK_6, tag, (uint[]){ 1 << 5 } }, |
|
| 77 | - | { MODKEY|ShiftMask, XK_7, tag, (uint[]){ 1 << 6 } }, |
|
| 78 | - | { MODKEY|ShiftMask, XK_8, tag, (uint[]){ 1 << 7 } }, |
|
| 79 | - | { MODKEY|ShiftMask, XK_9, tag, (uint[]){ 1 << 8 } }, |
|
| 80 | - | { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, (uint[]){ 1 << 0 } }, |
|
| 81 | - | { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, (uint[]){ 1 << 1 } }, |
|
| 82 | - | { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, (uint[]){ 1 << 2 } }, |
|
| 83 | - | { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, (uint[]){ 1 << 3 } }, |
|
| 84 | - | { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, (uint[]){ 1 << 4 } }, |
|
| 85 | - | { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, (uint[]){ 1 << 5 } }, |
|
| 86 | - | { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, (uint[]){ 1 << 6 } }, |
|
| 87 | - | { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, (uint[]){ 1 << 7 } }, |
|
| 88 | - | { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, (uint[]){ 1 << 8 } }, |
|
| 60 | + | TAGKEYS( XK_1, (uint[]){ 1 << 0} ) |
|
| 61 | + | TAGKEYS( XK_2, (uint[]){ 1 << 1} ) |
|
| 62 | + | TAGKEYS( XK_3, (uint[]){ 1 << 2} ) |
|
| 63 | + | TAGKEYS( XK_4, (uint[]){ 1 << 3} ) |
|
| 64 | + | TAGKEYS( XK_5, (uint[]){ 1 << 4} ) |
|
| 65 | + | TAGKEYS( XK_6, (uint[]){ 1 << 5} ) |
|
| 66 | + | TAGKEYS( XK_7, (uint[]){ 1 << 6} ) |
|
| 67 | + | TAGKEYS( XK_8, (uint[]){ 1 << 7} ) |
|
| 68 | + | TAGKEYS( XK_9, (uint[]){ 1 << 8} ) |
|
| 89 | 69 | { MODKEY|ShiftMask, XK_q, quit, NULL }, |
|
| 90 | 70 | }; |
|
| 75 | 75 | .B Mod1\-l |
|
| 76 | 76 | Increase master area size. |
|
| 77 | 77 | .TP |
|
| 78 | + | .B Mod1\-m |
|
| 79 | + | Toggle focused window between maximisation and normal state. |
|
| 80 | + | .TP |
|
| 78 | 81 | .B Mod1\-Return |
|
| 79 | 82 | Zooms/cycles focused window to/from master area (tiled layouts only). |
|
| 80 | 83 | .TP |
| 71 | 71 | int minax, maxax, minay, maxay; |
|
| 72 | 72 | long flags; |
|
| 73 | 73 | int bw, oldbw; |
|
| 74 | - | Bool isbanned, isfixed, isfloating, isurgent; |
|
| 74 | + | Bool isbanned, isfixed, isfloating, ismax, isurgent; |
|
| 75 | 75 | uint tags; |
|
| 76 | 76 | Client *next; |
|
| 77 | 77 | Client *prev; |
|
| 120 | 120 | void arrange(void); |
|
| 121 | 121 | void attach(Client *c); |
|
| 122 | 122 | void attachstack(Client *c); |
|
| 123 | - | void ban(Client *c); |
|
| 124 | 123 | void buttonpress(XEvent *e); |
|
| 125 | 124 | void checkotherwm(void); |
|
| 126 | 125 | void cleanup(void); |
|
| 176 | 175 | void togglebar(const void *arg); |
|
| 177 | 176 | void togglefloating(const void *arg); |
|
| 178 | 177 | void togglelayout(const void *arg); |
|
| 178 | + | void togglemax(const void *arg); |
|
| 179 | 179 | void toggletag(const void *arg); |
|
| 180 | 180 | void toggleview(const void *arg); |
|
| 181 | - | void unban(Client *c); |
|
| 182 | 181 | void unmanage(Client *c); |
|
| 183 | 182 | void unmapnotify(XEvent *e); |
|
| 184 | 183 | void updatebar(void); |
|
| 217 | 216 | [UnmapNotify] = unmapnotify |
|
| 218 | 217 | }; |
|
| 219 | 218 | Atom wmatom[WMLast], netatom[NetLast]; |
|
| 219 | + | Bool domax = False; |
|
| 220 | 220 | Bool otherwm, readin; |
|
| 221 | 221 | Bool running = True; |
|
| 222 | 222 | uint tagset[] = {1, 1}; /* after start, first tag is selected */ |
|
| 268 | 268 | ||
| 269 | 269 | for(c = clients; c; c = c->next) |
|
| 270 | 270 | if(VISIBLE(c)) { |
|
| 271 | - | unban(c); |
|
| 272 | 271 | if(!lt->arrange || c->isfloating) |
|
| 273 | 272 | resize(c, c->x, c->y, c->w, c->h, True); |
|
| 274 | 273 | } |
|
| 275 | - | else |
|
| 276 | - | ban(c); |
|
| 274 | + | else if(!c->isbanned) { |
|
| 275 | + | XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); |
|
| 276 | + | c->isbanned = True; |
|
| 277 | + | } |
|
| 277 | 278 | ||
| 278 | 279 | focus(NULL); |
|
| 279 | - | if(lt->arrange) |
|
| 280 | + | if(lt->arrange && !domax) |
|
| 280 | 281 | lt->arrange(); |
|
| 281 | 282 | restack(); |
|
| 282 | 283 | } |
|
| 296 | 297 | } |
|
| 297 | 298 | ||
| 298 | 299 | void |
|
| 299 | - | ban(Client *c) { |
|
| 300 | - | if(c->isbanned) |
|
| 301 | - | return; |
|
| 302 | - | XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); |
|
| 303 | - | c->isbanned = True; |
|
| 304 | - | } |
|
| 305 | - | ||
| 306 | - | void |
|
| 307 | 300 | buttonpress(XEvent *e) { |
|
| 308 | 301 | uint i, x, mask; |
|
| 309 | 302 | Client *c; |
|
| 330 | 323 | return; |
|
| 331 | 324 | } |
|
| 332 | 325 | } |
|
| 333 | - | if((ev->x < x + blw) && ev->button == Button1) |
|
| 334 | - | togglelayout(NULL); |
|
| 326 | + | if(ev->x < x + blw) { |
|
| 327 | + | if(ev->button == Button1) |
|
| 328 | + | togglelayout(NULL); |
|
| 329 | + | else if(ev->button == Button3) |
|
| 330 | + | togglemax(NULL); |
|
| 331 | + | } |
|
| 335 | 332 | } |
|
| 336 | 333 | else if((c = getclient(ev->window))) { |
|
| 337 | 334 | focus(c); |
|
| 338 | - | if(CLEANMASK(ev->state) != MODKEY) |
|
| 335 | + | if(CLEANMASK(ev->state) != MODKEY || domax) |
|
| 339 | 336 | return; |
|
| 340 | - | if(ev->button == Button1) { |
|
| 341 | - | restack(); |
|
| 337 | + | if(ev->button == Button1) |
|
| 342 | 338 | movemouse(c); |
|
| 343 | - | } |
|
| 344 | 339 | else if(ev->button == Button2) |
|
| 345 | 340 | togglefloating(NULL); |
|
| 346 | - | else if(ev->button == Button3 && !c->isfixed) { |
|
| 347 | - | restack(); |
|
| 341 | + | else if(ev->button == Button3 && !c->isfixed) |
|
| 348 | 342 | resizemouse(c); |
|
| 349 | - | } |
|
| 350 | 343 | } |
|
| 351 | 344 | } |
|
| 352 | 345 | ||
| 369 | 362 | void |
|
| 370 | 363 | cleanup(void) { |
|
| 371 | 364 | close(STDIN_FILENO); |
|
| 372 | - | while(stack) { |
|
| 373 | - | unban(stack); |
|
| 365 | + | view(NULL); |
|
| 366 | + | while(stack) |
|
| 374 | 367 | unmanage(stack); |
|
| 375 | - | } |
|
| 376 | 368 | if(dc.font.set) |
|
| 377 | 369 | XFreeFontSet(dpy, dc.font.set); |
|
| 378 | 370 | else |
|
| 512 | 504 | } |
|
| 513 | 505 | if(blw > 0) { |
|
| 514 | 506 | dc.w = blw; |
|
| 515 | - | drawtext(lt->symbol, dc.norm, False); |
|
| 507 | + | drawtext(lt->symbol, dc.norm, domax); |
|
| 516 | 508 | x = dc.x + dc.w; |
|
| 517 | 509 | } |
|
| 518 | 510 | else |
|
| 641 | 633 | } |
|
| 642 | 634 | sel = c; |
|
| 643 | 635 | if(c) { |
|
| 636 | + | if(domax) { |
|
| 637 | + | XMoveResizeWindow(dpy, c->win, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw); |
|
| 638 | + | c->ismax = True; |
|
| 639 | + | } |
|
| 644 | 640 | XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); |
|
| 645 | 641 | XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); |
|
| 646 | 642 | } |
|
| 960 | 956 | attach(c); |
|
| 961 | 957 | attachstack(c); |
|
| 962 | 958 | XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some windows require this */ |
|
| 963 | - | ban(c); |
|
| 964 | 959 | XMapWindow(dpy, c->win); |
|
| 965 | 960 | setclientstate(c, NormalState); |
|
| 966 | 961 | arrange(); |
|
| 995 | 990 | Window dummy; |
|
| 996 | 991 | XEvent ev; |
|
| 997 | 992 | ||
| 993 | + | restack(); |
|
| 998 | 994 | ocx = nx = c->x; |
|
| 999 | 995 | ocy = ny = c->y; |
|
| 1000 | 996 | if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
| 1130 | 1126 | x = sx; |
|
| 1131 | 1127 | if(y + h + 2 * c->bw < sy) |
|
| 1132 | 1128 | y = sy; |
|
| 1133 | - | if(c->x != x || c->y != y || c->w != w || c->h != h) { |
|
| 1129 | + | if(c->x != x || c->y != y || c->w != w || c->h != h || c->isbanned || c->ismax) { |
|
| 1130 | + | c->isbanned = c->ismax = False; |
|
| 1134 | 1131 | c->x = wc.x = x; |
|
| 1135 | 1132 | c->y = wc.y = y; |
|
| 1136 | 1133 | c->w = wc.width = w; |
|
| 1149 | 1146 | int nw, nh; |
|
| 1150 | 1147 | XEvent ev; |
|
| 1151 | 1148 | ||
| 1149 | + | restack(); |
|
| 1152 | 1150 | ocx = c->x; |
|
| 1153 | 1151 | ocy = c->y; |
|
| 1154 | 1152 | if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
| 1196 | 1194 | drawbar(); |
|
| 1197 | 1195 | if(!sel) |
|
| 1198 | 1196 | return; |
|
| 1199 | - | if(sel->isfloating || !lt->arrange) |
|
| 1197 | + | if(domax || sel->isfloating || !lt->arrange) |
|
| 1200 | 1198 | XRaiseWindow(dpy, sel->win); |
|
| 1201 | - | if(lt->arrange) { |
|
| 1199 | + | if(!domax && lt->arrange) { |
|
| 1202 | 1200 | wc.stack_mode = Below; |
|
| 1203 | 1201 | wc.sibling = barwin; |
|
| 1204 | 1202 | for(c = stack; c; c = c->snext) |
|
| 1532 | 1530 | } |
|
| 1533 | 1531 | ||
| 1534 | 1532 | void |
|
| 1533 | + | togglemax(const void *arg) { |
|
| 1534 | + | domax = !domax; |
|
| 1535 | + | arrange(); |
|
| 1536 | + | } |
|
| 1537 | + | ||
| 1538 | + | void |
|
| 1535 | 1539 | toggletag(const void *arg) { |
|
| 1536 | 1540 | if(sel && (sel->tags ^ ((*(int *)arg) & TAGMASK))) { |
|
| 1537 | 1541 | sel->tags ^= (*(int *)arg) & TAGMASK; |
|
| 1545 | 1549 | tagset[seltags] ^= (*(int *)arg) & TAGMASK; |
|
| 1546 | 1550 | arrange(); |
|
| 1547 | 1551 | } |
|
| 1548 | - | } |
|
| 1549 | - | ||
| 1550 | - | void |
|
| 1551 | - | unban(Client *c) { |
|
| 1552 | - | if(!c->isbanned) |
|
| 1553 | - | return; |
|
| 1554 | - | XMoveWindow(dpy, c->win, c->x, c->y); |
|
| 1555 | - | c->isbanned = False; |
|
| 1556 | 1552 | } |
|
| 1557 | 1553 | ||
| 1558 | 1554 | void |
|