From 0fe2e783e9e6b097bc6529dc286b4b697f7e1fde Mon Sep 17 00:00:00 2001 From: Anselm R Garbe Date: Mon, 26 May 2008 09:39:57 +0100 Subject: applied yiyus domax patch with slight modifications --- config.def.h | 52 +++++++++++++---------------------------- dwm.1 | 3 +++ dwm.c | 76 ++++++++++++++++++++++++++++-------------------------------- 3 files changed, 55 insertions(+), 76 deletions(-) diff --git a/config.def.h b/config.def.h index 12d72b2..ba45347 100644 --- a/config.def.h +++ b/config.def.h @@ -34,6 +34,12 @@ Layout layouts[] = { /* key definitions */ #define MODKEY Mod1Mask +#define TAGKEYS(KEY,TAG) \ + { MODKEY, KEY, view, TAG }, \ + { MODKEY|ControlMask, KEY, toggleview, TAG }, \ + { MODKEY|ShiftMask, KEY, tag, TAG }, \ + { MODKEY|ControlMask|ShiftMask, KEY, toggletag, TAG }, + Key keys[] = { /* modifier key function argument */ { MODKEY, XK_p, spawn, (char *)"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }, @@ -43,48 +49,22 @@ Key keys[] = { { MODKEY, XK_k, focusprev, NULL }, { MODKEY, XK_h, setmfact, (double[]){-0.05} }, { MODKEY, XK_l, setmfact, (double[]){+0.05} }, + { MODKEY, XK_m, togglemax, NULL }, { MODKEY, XK_Return, zoom, NULL }, { MODKEY, XK_Tab, viewprevtag, NULL }, { MODKEY|ShiftMask, XK_c, killclient, NULL }, { MODKEY, XK_space, togglelayout, NULL }, { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, { MODKEY, XK_0, view, (uint[]){ ~0 } }, - { MODKEY, XK_1, view, (uint[]){ 1 << 0 } }, - { MODKEY, XK_2, view, (uint[]){ 1 << 1 } }, - { MODKEY, XK_3, view, (uint[]){ 1 << 2 } }, - { MODKEY, XK_4, view, (uint[]){ 1 << 3 } }, - { MODKEY, XK_5, view, (uint[]){ 1 << 4 } }, - { MODKEY, XK_6, view, (uint[]){ 1 << 5 } }, - { MODKEY, XK_7, view, (uint[]){ 1 << 6 } }, - { MODKEY, XK_8, view, (uint[]){ 1 << 7 } }, - { MODKEY, XK_9, view, (uint[]){ 1 << 8 } }, - { MODKEY|ControlMask, XK_1, toggleview, (uint[]){ 1 << 0 } }, - { MODKEY|ControlMask, XK_2, toggleview, (uint[]){ 1 << 1 } }, - { MODKEY|ControlMask, XK_3, toggleview, (uint[]){ 1 << 2 } }, - { MODKEY|ControlMask, XK_4, toggleview, (uint[]){ 1 << 3 } }, - { MODKEY|ControlMask, XK_5, toggleview, (uint[]){ 1 << 4 } }, - { MODKEY|ControlMask, XK_6, toggleview, (uint[]){ 1 << 5 } }, - { MODKEY|ControlMask, XK_7, toggleview, (uint[]){ 1 << 6 } }, - { MODKEY|ControlMask, XK_8, toggleview, (uint[]){ 1 << 7 } }, - { MODKEY|ControlMask, XK_9, toggleview, (uint[]){ 1 << 8 } }, { MODKEY|ShiftMask, XK_0, tag, (uint[]){ ~0 } }, - { MODKEY|ShiftMask, XK_1, tag, (uint[]){ 1 << 0 } }, - { MODKEY|ShiftMask, XK_2, tag, (uint[]){ 1 << 1 } }, - { MODKEY|ShiftMask, XK_3, tag, (uint[]){ 1 << 2 } }, - { MODKEY|ShiftMask, XK_4, tag, (uint[]){ 1 << 3 } }, - { MODKEY|ShiftMask, XK_5, tag, (uint[]){ 1 << 4 } }, - { MODKEY|ShiftMask, XK_6, tag, (uint[]){ 1 << 5 } }, - { MODKEY|ShiftMask, XK_7, tag, (uint[]){ 1 << 6 } }, - { MODKEY|ShiftMask, XK_8, tag, (uint[]){ 1 << 7 } }, - { MODKEY|ShiftMask, XK_9, tag, (uint[]){ 1 << 8 } }, - { MODKEY|ControlMask|ShiftMask, XK_1, toggletag, (uint[]){ 1 << 0 } }, - { MODKEY|ControlMask|ShiftMask, XK_2, toggletag, (uint[]){ 1 << 1 } }, - { MODKEY|ControlMask|ShiftMask, XK_3, toggletag, (uint[]){ 1 << 2 } }, - { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, (uint[]){ 1 << 3 } }, - { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, (uint[]){ 1 << 4 } }, - { MODKEY|ControlMask|ShiftMask, XK_6, toggletag, (uint[]){ 1 << 5 } }, - { MODKEY|ControlMask|ShiftMask, XK_7, toggletag, (uint[]){ 1 << 6 } }, - { MODKEY|ControlMask|ShiftMask, XK_8, toggletag, (uint[]){ 1 << 7 } }, - { MODKEY|ControlMask|ShiftMask, XK_9, toggletag, (uint[]){ 1 << 8 } }, + TAGKEYS( XK_1, (uint[]){ 1 << 0} ) + TAGKEYS( XK_2, (uint[]){ 1 << 1} ) + TAGKEYS( XK_3, (uint[]){ 1 << 2} ) + TAGKEYS( XK_4, (uint[]){ 1 << 3} ) + TAGKEYS( XK_5, (uint[]){ 1 << 4} ) + TAGKEYS( XK_6, (uint[]){ 1 << 5} ) + TAGKEYS( XK_7, (uint[]){ 1 << 6} ) + TAGKEYS( XK_8, (uint[]){ 1 << 7} ) + TAGKEYS( XK_9, (uint[]){ 1 << 8} ) { MODKEY|ShiftMask, XK_q, quit, NULL }, }; diff --git a/dwm.1 b/dwm.1 index 5b45825..4a465aa 100644 --- a/dwm.1 +++ b/dwm.1 @@ -75,6 +75,9 @@ Decrease master area size. .B Mod1\-l Increase master area size. .TP +.B Mod1\-m +Toggle focused window between maximisation and normal state. +.TP .B Mod1\-Return Zooms/cycles focused window to/from master area (tiled layouts only). .TP diff --git a/dwm.c b/dwm.c index 908c464..352e9db 100644 --- a/dwm.c +++ b/dwm.c @@ -71,7 +71,7 @@ struct Client { int minax, maxax, minay, maxay; long flags; int bw, oldbw; - Bool isbanned, isfixed, isfloating, isurgent; + Bool isbanned, isfixed, isfloating, ismax, isurgent; uint tags; Client *next; Client *prev; @@ -120,7 +120,6 @@ void applyrules(Client *c); void arrange(void); void attach(Client *c); void attachstack(Client *c); -void ban(Client *c); void buttonpress(XEvent *e); void checkotherwm(void); void cleanup(void); @@ -176,9 +175,9 @@ void tileresize(Client *c, int x, int y, int w, int h); void togglebar(const void *arg); void togglefloating(const void *arg); void togglelayout(const void *arg); +void togglemax(const void *arg); void toggletag(const void *arg); void toggleview(const void *arg); -void unban(Client *c); void unmanage(Client *c); void unmapnotify(XEvent *e); void updatebar(void); @@ -217,6 +216,7 @@ void (*handler[LASTEvent]) (XEvent *) = { [UnmapNotify] = unmapnotify }; Atom wmatom[WMLast], netatom[NetLast]; +Bool domax = False; Bool otherwm, readin; Bool running = True; uint tagset[] = {1, 1}; /* after start, first tag is selected */ @@ -268,15 +268,16 @@ arrange(void) { for(c = clients; c; c = c->next) if(VISIBLE(c)) { - unban(c); if(!lt->arrange || c->isfloating) resize(c, c->x, c->y, c->w, c->h, True); } - else - ban(c); + else if(!c->isbanned) { + XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); + c->isbanned = True; + } focus(NULL); - if(lt->arrange) + if(lt->arrange && !domax) lt->arrange(); restack(); } @@ -295,14 +296,6 @@ attachstack(Client *c) { stack = c; } -void -ban(Client *c) { - if(c->isbanned) - return; - XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); - c->isbanned = True; -} - void buttonpress(XEvent *e) { uint i, x, mask; @@ -330,23 +323,23 @@ buttonpress(XEvent *e) { return; } } - if((ev->x < x + blw) && ev->button == Button1) - togglelayout(NULL); + if(ev->x < x + blw) { + if(ev->button == Button1) + togglelayout(NULL); + else if(ev->button == Button3) + togglemax(NULL); + } } else if((c = getclient(ev->window))) { focus(c); - if(CLEANMASK(ev->state) != MODKEY) + if(CLEANMASK(ev->state) != MODKEY || domax) return; - if(ev->button == Button1) { - restack(); + if(ev->button == Button1) movemouse(c); - } else if(ev->button == Button2) togglefloating(NULL); - else if(ev->button == Button3 && !c->isfixed) { - restack(); + else if(ev->button == Button3 && !c->isfixed) resizemouse(c); - } } } @@ -369,10 +362,9 @@ checkotherwm(void) { void cleanup(void) { close(STDIN_FILENO); - while(stack) { - unban(stack); + view(NULL); + while(stack) unmanage(stack); - } if(dc.font.set) XFreeFontSet(dpy, dc.font.set); else @@ -512,7 +504,7 @@ drawbar(void) { } if(blw > 0) { dc.w = blw; - drawtext(lt->symbol, dc.norm, False); + drawtext(lt->symbol, dc.norm, domax); x = dc.x + dc.w; } else @@ -641,6 +633,10 @@ focus(Client *c) { } sel = c; if(c) { + if(domax) { + XMoveResizeWindow(dpy, c->win, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw); + c->ismax = True; + } XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); } @@ -960,7 +956,6 @@ manage(Window w, XWindowAttributes *wa) { attach(c); attachstack(c); XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some windows require this */ - ban(c); XMapWindow(dpy, c->win); setclientstate(c, NormalState); arrange(); @@ -995,6 +990,7 @@ movemouse(Client *c) { Window dummy; XEvent ev; + restack(); ocx = nx = c->x; ocy = ny = c->y; if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, @@ -1130,7 +1126,8 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) { x = sx; if(y + h + 2 * c->bw < sy) y = sy; - if(c->x != x || c->y != y || c->w != w || c->h != h) { + if(c->x != x || c->y != y || c->w != w || c->h != h || c->isbanned || c->ismax) { + c->isbanned = c->ismax = False; c->x = wc.x = x; c->y = wc.y = y; c->w = wc.width = w; @@ -1149,6 +1146,7 @@ resizemouse(Client *c) { int nw, nh; XEvent ev; + restack(); ocx = c->x; ocy = c->y; if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, @@ -1196,9 +1194,9 @@ restack(void) { drawbar(); if(!sel) return; - if(sel->isfloating || !lt->arrange) + if(domax || sel->isfloating || !lt->arrange) XRaiseWindow(dpy, sel->win); - if(lt->arrange) { + if(!domax && lt->arrange) { wc.stack_mode = Below; wc.sibling = barwin; for(c = stack; c; c = c->snext) @@ -1531,6 +1529,12 @@ togglelayout(const void *arg) { drawbar(); } +void +togglemax(const void *arg) { + domax = !domax; + arrange(); +} + void toggletag(const void *arg) { if(sel && (sel->tags ^ ((*(int *)arg) & TAGMASK))) { @@ -1547,14 +1551,6 @@ toggleview(const void *arg) { } } -void -unban(Client *c) { - if(!c->isbanned) - return; - XMoveWindow(dpy, c->win, c->x, c->y); - c->isbanned = False; -} - void unmanage(Client *c) { XWindowChanges wc; -- cgit 1.4.1-2-gfad0 '>256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338