From 6828fba7a002062dd383f83bb8d584a82fc7677a Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Tue, 29 Aug 2006 17:33:27 +0200 Subject: [PATCH 01/16] fixed --- event.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/event.c b/event.c index 0f74478..a1d2d9c 100644 --- a/event.c +++ b/event.c @@ -196,7 +196,9 @@ configurerequest(XEvent *e) XSendEvent(dpy, c->win, True, NoEventMask, &synev); } XSync(dpy, False); - if(c->isfloat || c->ismax) { + if(c->isfloat) + resize(c, False, TopLeft); + else if(c->ismax) { resize(c, False, TopLeft); c->x = ox; c->y = oy; -- 2.20.1 From 70a3e62257d05946176aad3dbe19047d3bb705c1 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Tue, 29 Aug 2006 18:05:02 +0200 Subject: [PATCH 02/16] now dwm enforces max screen size also in tiled mode on non-floating clients which are maximized --- event.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/event.c b/event.c index a1d2d9c..5a1c68e 100644 --- a/event.c +++ b/event.c @@ -150,7 +150,6 @@ buttonpress(XEvent *e) static void configurerequest(XEvent *e) { - int ox, oy, ow, oh; unsigned long newmask; Client *c; XConfigureRequestEvent *ev = &e->xconfigurerequest; @@ -158,10 +157,20 @@ configurerequest(XEvent *e) XWindowChanges wc; if((c = getclient(ev->window))) { - ox = c->x; - oy = c->y; - ow = c->w; - oh = c->h; + if(!c->isfloat && (arrange != dofloat) && c->ismax) { + synev.type = ConfigureNotify; + synev.xconfigure.display = dpy; + synev.xconfigure.event = c->win; + synev.xconfigure.window = c->win; + synev.xconfigure.x = sx; + synev.xconfigure.y = sy + bh; + synev.xconfigure.width = sw - 2; + synev.xconfigure.height = sw - 2 - bh; + synev.xconfigure.border_width = ev->border_width; + synev.xconfigure.above = None; + XSendEvent(dpy, c->win, True, NoEventMask, &synev); + return; + } gravitate(c, True); if(ev->value_mask & CWX) c->x = ev->x; @@ -192,19 +201,11 @@ configurerequest(XEvent *e) synev.xconfigure.height = c->h; synev.xconfigure.border_width = c->border; synev.xconfigure.above = None; - /* Send synthetic ConfigureNotify */ XSendEvent(dpy, c->win, True, NoEventMask, &synev); } XSync(dpy, False); if(c->isfloat) resize(c, False, TopLeft); - else if(c->ismax) { - resize(c, False, TopLeft); - c->x = ox; - c->y = oy; - c->w = ow; - c->h = oh; - } else arrange(NULL); } -- 2.20.1 From 30d928591dbdb40d06c5973f6f3bda7a0c16e3e7 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Tue, 29 Aug 2006 19:24:28 +0200 Subject: [PATCH 03/16] simplified configurerequest --- event.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/event.c b/event.c index 5a1c68e..bdf4071 100644 --- a/event.c +++ b/event.c @@ -147,28 +147,36 @@ buttonpress(XEvent *e) } } +static void +synconfig(Client *c, int x, int y, int w, int h, unsigned int border) +{ + XEvent synev; + + synev.type = ConfigureNotify; + synev.xconfigure.display = dpy; + synev.xconfigure.event = c->win; + synev.xconfigure.window = c->win; + synev.xconfigure.x = x; + synev.xconfigure.y = y; + synev.xconfigure.width = w; + synev.xconfigure.height = h; + synev.xconfigure.border_width = border; + synev.xconfigure.above = None; + XSendEvent(dpy, c->win, True, NoEventMask, &synev); +} + static void configurerequest(XEvent *e) { unsigned long newmask; Client *c; XConfigureRequestEvent *ev = &e->xconfigurerequest; - XEvent synev; XWindowChanges wc; if((c = getclient(ev->window))) { if(!c->isfloat && (arrange != dofloat) && c->ismax) { - synev.type = ConfigureNotify; - synev.xconfigure.display = dpy; - synev.xconfigure.event = c->win; - synev.xconfigure.window = c->win; - synev.xconfigure.x = sx; - synev.xconfigure.y = sy + bh; - synev.xconfigure.width = sw - 2; - synev.xconfigure.height = sw - 2 - bh; - synev.xconfigure.border_width = ev->border_width; - synev.xconfigure.above = None; - XSendEvent(dpy, c->win, True, NoEventMask, &synev); + synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width); + XSync(dpy, False); return; } gravitate(c, True); @@ -190,19 +198,8 @@ configurerequest(XEvent *e) newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); if(newmask) XConfigureWindow(dpy, c->win, newmask, &wc); - else { - synev.type = ConfigureNotify; - synev.xconfigure.display = dpy; - synev.xconfigure.event = c->win; - synev.xconfigure.window = c->win; - synev.xconfigure.x = c->x; - synev.xconfigure.y = c->y; - synev.xconfigure.width = c->w; - synev.xconfigure.height = c->h; - synev.xconfigure.border_width = c->border; - synev.xconfigure.above = None; - XSendEvent(dpy, c->win, True, NoEventMask, &synev); - } + else + synconfig(c, c->x, c->y, c->w, c->h, c->border); XSync(dpy, False); if(c->isfloat) resize(c, False, TopLeft); -- 2.20.1 From 5a3bea2d69c8ad864667de5142a9777aa41e1448 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Wed, 30 Aug 2006 11:15:58 +0200 Subject: [PATCH 04/16] removed a warning reported by Jukka --- view.c | 1 - 1 file changed, 1 deletion(-) diff --git a/view.c b/view.c index 5de34c0..424ee5a 100644 --- a/view.c +++ b/view.c @@ -261,7 +261,6 @@ void view(Arg *arg) { unsigned int i; - Client *c; for(i = 0; i < ntags; i++) seltag[i] = False; -- 2.20.1 From 79259acc1260595f657dfc4c2cf64fa6309192cf Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Wed, 30 Aug 2006 11:21:56 +0200 Subject: [PATCH 05/16] now using Salmi's menu command --- config.arg.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config.arg.h b/config.arg.h index 41ae9b1..7a03460 100644 --- a/config.arg.h +++ b/config.arg.h @@ -27,8 +27,9 @@ static Key key[] = { \ { MODKEY|ShiftMask, XK_Return, spawn, \ { .cmd = "exec uxterm -bg '#111111' -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \ { MODKEY, XK_p, spawn, \ - { .cmd = "exec `ls -lL /usr/bin /usr/X11R6/bin /usr/local/bin 2>/dev/null | " \ - "awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u | dmenu`" } }, \ + { .cmd = "exec \"$(IFS=:; for dir in $PATH; do " \ + "for file in \"$dir\"/*; do [ -x \"$file\" ] && echo \"${file##*/}\"; done; " \ + "done | sort -u | dmenu)\"" } }, \ { MODKEY, XK_j, focusnext, { 0 } }, \ { MODKEY, XK_k, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ -- 2.20.1 From 140be1b4b3aa1665631d81e18afa29749636e2f2 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Wed, 30 Aug 2006 12:39:27 +0200 Subject: [PATCH 06/16] prepared 1.2 --- dwm.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dwm.html b/dwm.html index e8d8bc8..aa24aba 100644 --- a/dwm.html +++ b/dwm.html @@ -104,7 +104,7 @@

Download

Development

-- 2.20.1 From 1b492dffc8adce5fb061e9df4504f7dd1ebcf478 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Wed, 30 Aug 2006 12:39:35 +0200 Subject: [PATCH 07/16] Added tag 1.2 for changeset e3179ce2b90451d2807cd53b589d768412b8666b --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 062833d..2329115 100644 --- a/.hgtags +++ b/.hgtags @@ -9,3 +9,4 @@ cd15de32e173f8ce97bfe1c9b6607937b59056b4 0.8 fae61afa861755636c4a1070694209ace8efbb6c 0.9 bbc98e77ae89a7c9232a5be0835f60ea00d8036e 1.0 44a55e6e46bf6c231780b09d919977d6f01083de 1.1 +e3179ce2b90451d2807cd53b589d768412b8666b 1.2 -- 2.20.1 From 9927b9e64253643f409bd1ef22349cf4e9ca7727 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Wed, 30 Aug 2006 13:00:30 +0200 Subject: [PATCH 08/16] small fix in config.arg.h --- config.arg.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config.arg.h b/config.arg.h index 7a03460..2d80342 100644 --- a/config.arg.h +++ b/config.arg.h @@ -27,9 +27,9 @@ static Key key[] = { \ { MODKEY|ShiftMask, XK_Return, spawn, \ { .cmd = "exec uxterm -bg '#111111' -fg '#eeeeee' -cr '#eeeeee' +sb -fn '"FONT"'" } }, \ { MODKEY, XK_p, spawn, \ - { .cmd = "exec \"$(IFS=:; for dir in $PATH; do " \ - "for file in \"$dir\"/*; do [ -x \"$file\" ] && echo \"${file##*/}\"; done; " \ - "done | sort -u | dmenu)\"" } }, \ + { .cmd = "exe=\"$(IFS=:; for dir in $PATH; do " \ + "for file in \"$dir\"/*; do [ -x \"$file\" ] && echo \"${file##*/}\"; done; " \ + "done | sort -u | dmenu)\" && exec \"$exe\"" } }, \ { MODKEY, XK_j, focusnext, { 0 } }, \ { MODKEY, XK_k, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ -- 2.20.1 From 4c368bcd24172166aab32948fc63feaa6a1bec93 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Thu, 31 Aug 2006 08:48:04 +0200 Subject: [PATCH 09/16] applied sanders patch to remove unnecessary commit() --- config.mk | 2 +- tag.c | 15 ++------------- view.c | 8 ++++++-- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/config.mk b/config.mk index 262fbde..af775ae 100644 --- a/config.mk +++ b/config.mk @@ -1,5 +1,5 @@ # dwm version -VERSION = 1.2 +VERSION = 1.3 # Customize below to fit your system diff --git a/tag.c b/tag.c index b7c06de..dcda6dc 100644 --- a/tag.c +++ b/tag.c @@ -30,17 +30,6 @@ RULES static RReg *rreg = NULL; static unsigned int len = 0; -static void -commit() -{ - /* asserts sel != NULL */ - settitle(sel); - if(!isvisible(sel)) - arrange(NULL); - else - drawstatus(); -} - /* extern */ Client * @@ -132,7 +121,7 @@ tag(Arg *arg) for(i = 0; i < ntags; i++) sel->tags[i] = False; sel->tags[arg->i] = True; - commit(); + arrange(NULL); } void @@ -147,5 +136,5 @@ toggletag(Arg *arg) for(i = 0; i < ntags && !sel->tags[i]; i++); if(i == ntags) sel->tags[arg->i] = True; - commit(); + arrange(NULL); } diff --git a/view.c b/view.c index 424ee5a..aa0a23a 100644 --- a/view.c +++ b/view.c @@ -67,7 +67,9 @@ dofloat(Arg *arg) else ban(c); } - if((sel = getnext(clients))) + if(!sel || !isvisible(sel)) + sel = getnext(clients); + if(sel) focus(sel); else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); @@ -130,7 +132,9 @@ dotile(Arg *arg) else ban(c); } - if((sel = getnext(clients))) + if(!sel || !isvisible(sel)) + sel = getnext(clients); + if(sel) focus(sel); else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); -- 2.20.1 From 05fbbbd8dc3f990f07fe2055693bef0031fd4623 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Thu, 31 Aug 2006 17:49:04 +0200 Subject: [PATCH 10/16] implemented Button2 press on tags for toggletag on the focused client --- dwm.1 | 6 ++++++ event.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/dwm.1 b/dwm.1 index 4e23f1c..6a75b1d 100644 --- a/dwm.1 +++ b/dwm.1 @@ -47,6 +47,12 @@ and .B floating mode. .TP +.B Button2 +click on a tag label adds/removes that +.B tag +to/from the focused +.B window. +.TP .B Button3 click on a tag label adds/removes all windows with that .B tag diff --git a/event.c b/event.c index bdf4071..e97abad 100644 --- a/event.c +++ b/event.c @@ -109,10 +109,17 @@ buttonpress(XEvent *e) for(a.i = 0; a.i < ntags; a.i++) { x += textw(tags[a.i]); if(ev->x < x) { - if(ev->button == Button1) + switch(ev->button) { + case Button1: view(&a); - else if(ev->button == Button3) + break; + case Button2: + toggletag(&a); + break; + case Button3: toggleview(&a); + break; + } return; } } -- 2.20.1 From daae3bba504fc705c5fd56363b656937eee5deb4 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Thu, 31 Aug 2006 18:02:38 +0200 Subject: [PATCH 11/16] added viewall to mainstream (only Ross Mohns version, not the toggle) --- config.arg.h | 1 + config.default.h | 1 + dwm.1 | 4 ++++ dwm.h | 1 + view.c | 10 ++++++++++ 5 files changed, 17 insertions(+) diff --git a/config.arg.h b/config.arg.h index 2d80342..3862be4 100644 --- a/config.arg.h +++ b/config.arg.h @@ -48,6 +48,7 @@ static Key key[] = { \ { MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \ { MODKEY, XK_4, view, { .i = 3 } }, \ + { MODKEY, XK_a, viewall, { 0 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ diff --git a/config.default.h b/config.default.h index 6147c98..35729ac 100644 --- a/config.default.h +++ b/config.default.h @@ -46,6 +46,7 @@ static Key key[] = { \ { MODKEY, XK_3, view, { .i = 2 } }, \ { MODKEY, XK_4, view, { .i = 3 } }, \ { MODKEY, XK_5, view, { .i = 4 } }, \ + { MODKEY, XK_a, viewall, { 0 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ diff --git a/dwm.1 b/dwm.1 index 6a75b1d..95f6d22 100644 --- a/dwm.1 +++ b/dwm.1 @@ -112,6 +112,10 @@ mode (affects View all windows with .BR "tag n" . .TP +.B Mod1-a +View all windows with any +.BR "tag" . +.TP .B Mod1-Control-[0..n] Add/remove all windows with .B tag n diff --git a/dwm.h b/dwm.h index b416851..d8ce212 100644 --- a/dwm.h +++ b/dwm.h @@ -137,4 +137,5 @@ extern void restack(); extern void togglemode(Arg *arg); extern void toggleview(Arg *arg); extern void view(Arg *arg); +extern void viewall(Arg *arg); extern void zoom(Arg *arg); diff --git a/view.c b/view.c index aa0a23a..bb0647a 100644 --- a/view.c +++ b/view.c @@ -273,6 +273,16 @@ view(Arg *arg) arrange(NULL); } +void +viewall(Arg *arg) +{ + unsigned int i; + + for(i = 0; i < ntags; i++) + seltag[i] = True; + arrange(NULL); +} + void zoom(Arg *arg) { -- 2.20.1 From bab575c868bcd4206e4e530f339c1255a4adcd29 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Thu, 31 Aug 2006 18:04:34 +0200 Subject: [PATCH 12/16] changed shortcut into Mod1-0 --- config.arg.h | 2 +- config.default.h | 2 +- dwm.1 | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/config.arg.h b/config.arg.h index 3862be4..7636b93 100644 --- a/config.arg.h +++ b/config.arg.h @@ -44,11 +44,11 @@ static Key key[] = { \ { MODKEY|ControlMask|ShiftMask, XK_4, toggletag, { .i = 3 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ + { MODKEY, XK_0, viewall, { 0 } }, \ { MODKEY, XK_1, view, { .i = 0 } }, \ { MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \ { MODKEY, XK_4, view, { .i = 3 } }, \ - { MODKEY, XK_a, viewall, { 0 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ diff --git a/config.default.h b/config.default.h index 35729ac..3f46d8d 100644 --- a/config.default.h +++ b/config.default.h @@ -41,12 +41,12 @@ static Key key[] = { \ { MODKEY|ControlMask|ShiftMask, XK_5, toggletag, { .i = 4 } }, \ { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ { MODKEY, XK_space, togglemode, { 0 } }, \ + { MODKEY, XK_0, viewall, { 0 } }, \ { MODKEY, XK_1, view, { .i = 0 } }, \ { MODKEY, XK_2, view, { .i = 1 } }, \ { MODKEY, XK_3, view, { .i = 2 } }, \ { MODKEY, XK_4, view, { .i = 3 } }, \ { MODKEY, XK_5, view, { .i = 4 } }, \ - { MODKEY, XK_a, viewall, { 0 } }, \ { MODKEY|ControlMask, XK_1, toggleview, { .i = 0 } }, \ { MODKEY|ControlMask, XK_2, toggleview, { .i = 1 } }, \ { MODKEY|ControlMask, XK_3, toggleview, { .i = 2 } }, \ diff --git a/dwm.1 b/dwm.1 index 95f6d22..2758bbf 100644 --- a/dwm.1 +++ b/dwm.1 @@ -84,13 +84,13 @@ mode only). Maximize current .BR window . .TP -.B Mod1-Shift-[0..n] +.B Mod1-Shift-[1..n] Apply .B nth tag to current .BR window . .TP -.B Mod1-Control-Shift-[0..n] +.B Mod1-Control-Shift-[1..n] Add/remove .B nth tag to/from current @@ -108,15 +108,15 @@ and mode (affects .BR "all windows" ). .TP -.B Mod1-[0..n] +.B Mod1-[1..n] View all windows with .BR "tag n" . .TP -.B Mod1-a +.B Mod1-0 View all windows with any .BR "tag" . .TP -.B Mod1-Control-[0..n] +.B Mod1-Control-[1..n] Add/remove all windows with .B tag n to/from the view. -- 2.20.1 From 924a0888126bd8ff12312c6e3e6a33003f271b2a Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Thu, 31 Aug 2006 18:08:28 +0200 Subject: [PATCH 13/16] reorder was misssing in Ross version of viewall --- view.c | 1 + 1 file changed, 1 insertion(+) diff --git a/view.c b/view.c index bb0647a..37b4fd7 100644 --- a/view.c +++ b/view.c @@ -280,6 +280,7 @@ viewall(Arg *arg) for(i = 0; i < ntags; i++) seltag[i] = True; + reorder(); arrange(NULL); } -- 2.20.1 From 1836b6740d7fc1a2e7fa0343aa7de657592ebfeb Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Fri, 1 Sep 2006 10:32:50 +0200 Subject: [PATCH 14/16] applied sanders patch --- dwm.1 | 18 ++++++++++++------ event.c | 13 ++++++++----- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/dwm.1 b/dwm.1 index 2758bbf..31ebad0 100644 --- a/dwm.1 +++ b/dwm.1 @@ -47,16 +47,22 @@ and .B floating mode. .TP -.B Button2 -click on a tag label adds/removes that -.B tag -to/from the focused -.B window. -.TP .B Button3 click on a tag label adds/removes all windows with that .B tag to/from the view. +.TP +.B Mod1-Button1 +click on a tag label applies that +.B tag +to the focused +.BR window . +.TP +.B Mod1-Button3 +click on a tag label adds/removes that +.B tag +to/from the focused +.BR window . .SS Keyboard commands .TP .B Mod1-Shift-Return diff --git a/event.c b/event.c index e97abad..a719bf2 100644 --- a/event.c +++ b/event.c @@ -111,13 +111,16 @@ buttonpress(XEvent *e) if(ev->x < x) { switch(ev->button) { case Button1: - view(&a); - break; - case Button2: - toggletag(&a); + if(ev->state & MODKEY) + tag(&a); + else + view(&a); break; case Button3: - toggleview(&a); + if(ev->state & MODKEY) + toggletag(&a); + else + toggleview(&a); break; } return; -- 2.20.1 From 6d22782e8f991a99f9adef56b2b729e5ab5454d2 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Fri, 1 Sep 2006 15:31:59 +0200 Subject: [PATCH 15/16] simplified buttonpress --- event.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/event.c b/event.c index a719bf2..e5ea712 100644 --- a/event.c +++ b/event.c @@ -109,19 +109,17 @@ buttonpress(XEvent *e) for(a.i = 0; a.i < ntags; a.i++) { x += textw(tags[a.i]); if(ev->x < x) { - switch(ev->button) { - case Button1: + if(ev->button == Button1) { if(ev->state & MODKEY) tag(&a); else view(&a); - break; - case Button3: + } + else if(ev->button == Button3) { if(ev->state & MODKEY) toggletag(&a); else toggleview(&a); - break; } return; } @@ -133,26 +131,17 @@ buttonpress(XEvent *e) } else if((c = getclient(ev->window))) { focus(c); - if(CLEANMASK(ev->state) != MODKEY) + if(c->ismax || CLEANMASK(ev->state) != MODKEY) return; - switch(ev->button) { - default: - break; - case Button1: - if(!c->ismax && (arrange == dofloat || c->isfloat)) { - restack(c); - movemouse(c); - } - break; - case Button2: + if((ev->button == Button1) && ((arrange == dofloat) || c->isfloat)) { + restack(c); + movemouse(c); + } + else if(ev->button == Button2) zoom(NULL); - break; - case Button3: - if(!c->ismax && (arrange == dofloat || c->isfloat)) { - restack(c); - resizemouse(c); - } - break; + else if(ev->button == Button3 && ((arrange == dofloat) || c->isfloat)) { + restack(c); + resizemouse(c); } } } -- 2.20.1 From 26157e6973f240a9b5ee407b9d2d5eca9358844f Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Mon, 4 Sep 2006 08:55:49 +0200 Subject: [PATCH 16/16] applied Sanders max_and_focus.patch --- client.c | 50 +++++++++++++++++++++++++++++--------------------- dwm.h | 3 +-- event.c | 8 ++++---- main.c | 1 + view.c | 30 +++++++++++++----------------- 5 files changed, 48 insertions(+), 44 deletions(-) diff --git a/client.c b/client.c index 9645444..8a8a99e 100644 --- a/client.c +++ b/client.c @@ -82,22 +82,29 @@ ban(Client *c) void focus(Client *c) { - Client *old = sel; + Client *old; if(!issel) return; if(!sel) sel = c; else if(sel != c) { - if(sel->ismax) + if(maximized) togglemax(NULL); + old = sel; sel = c; - grabbuttons(old, False); - drawtitle(old); + if(old) { + grabbuttons(old, False); + drawtitle(old); + } + } + if(c) { + grabbuttons(c, True); + drawtitle(c); + XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); } - grabbuttons(c, True); - drawtitle(c); - XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); + else + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); } Client * @@ -247,8 +254,6 @@ manage(Window w, XWindowAttributes *wa) clients = c; settitle(c); - if(isvisible(c)) - sel = c; arrange(NULL); XMapWindow(dpy, c->win); XMapWindow(dpy, c->twin); @@ -366,12 +371,13 @@ void togglemax(Arg *arg) { int ox, oy, ow, oh; + Client *c; XEvent ev; if(!sel) return; - if((sel->ismax = !sel->ismax)) { + if((maximized = !maximized)) { ox = sel->x; oy = sel->y; ow = sel->w; @@ -382,6 +388,9 @@ togglemax(Arg *arg) sel->h = sh - 2 - bh; restack(); + for(c = getnext(clients); c; c = getnext(c->next)) + if(c != sel) + ban(c); resize(sel, arrange == dofloat, TopLeft); sel->x = ox; @@ -390,37 +399,36 @@ togglemax(Arg *arg) sel->h = oh; } else - resize(sel, False, TopLeft); + arrange(NULL); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void unmanage(Client *c) { - Client *tc; + Client *tc, *fc; Window trans; XGrabServer(dpy); XSetErrorHandler(xerrordummy); - XGetTransientForHint(dpy, c->win, &trans); - - XUngrabButton(dpy, AnyButton, AnyModifier, c->win); - XDestroyWindow(dpy, c->twin); - detach(c); if(sel == c) { + XGetTransientForHint(dpy, c->win, &trans); if(trans && (tc = getclient(trans)) && isvisible(tc)) - sel = tc; + fc = tc; else - sel = getnext(clients); + fc = getnext(clients); + focus(fc); } + + XUngrabButton(dpy, AnyButton, AnyModifier, c->win); + XDestroyWindow(dpy, c->twin); + free(c->tags); free(c); XSync(dpy, False); XSetErrorHandler(xerror); XUngrabServer(dpy); - if(sel) - focus(sel); arrange(NULL); } diff --git a/dwm.h b/dwm.h index d8ce212..e1df6bc 100644 --- a/dwm.h +++ b/dwm.h @@ -58,7 +58,6 @@ struct Client { long flags; unsigned int border, weight; Bool isfloat; - Bool ismax; Bool *tags; Client *next; Client *prev; @@ -73,7 +72,7 @@ extern unsigned int ntags, numlockmask; extern void (*handler[LASTEvent])(XEvent *); extern void (*arrange)(Arg *); extern Atom wmatom[WMLast], netatom[NetLast]; -extern Bool running, issel, *seltag; +extern Bool running, issel, maximized, *seltag; extern Client *clients, *sel; extern Cursor cursor[CurLast]; extern DC dc; diff --git a/event.c b/event.c index e5ea712..9974192 100644 --- a/event.c +++ b/event.c @@ -131,15 +131,15 @@ buttonpress(XEvent *e) } else if((c = getclient(ev->window))) { focus(c); - if(c->ismax || CLEANMASK(ev->state) != MODKEY) + if(maximized || CLEANMASK(ev->state) != MODKEY) return; - if((ev->button == Button1) && ((arrange == dofloat) || c->isfloat)) { + if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) { restack(c); movemouse(c); } else if(ev->button == Button2) zoom(NULL); - else if(ev->button == Button3 && ((arrange == dofloat) || c->isfloat)) { + else if(ev->button == Button3 && (arrange == dofloat || c->isfloat)) { restack(c); resizemouse(c); } @@ -173,7 +173,7 @@ configurerequest(XEvent *e) XWindowChanges wc; if((c = getclient(ev->window))) { - if(!c->isfloat && (arrange != dofloat) && c->ismax) { + if((c == sel) && !c->isfloat && (arrange != dofloat) && maximized) { synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width); XSync(dpy, False); return; diff --git a/main.c b/main.c index 5dab0db..9856354 100644 --- a/main.c +++ b/main.c @@ -24,6 +24,7 @@ unsigned int ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; Bool issel = True; +Bool maximized = False; Client *clients = NULL; Client *sel = NULL; Cursor cursor[CurLast]; diff --git a/view.c b/view.c index 37b4fd7..86902d4 100644 --- a/view.c +++ b/view.c @@ -57,22 +57,20 @@ detach(Client *c) void dofloat(Arg *arg) { - Client *c; + Client *c, *fc; + + maximized = False; for(c = clients; c; c = c->next) { - c->ismax = False; if(isvisible(c)) { resize(c, True, TopLeft); } else ban(c); } - if(!sel || !isvisible(sel)) - sel = getnext(clients); - if(sel) - focus(sel); - else - XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + if(!(fc = sel) || !isvisible(fc)) + fc = getnext(clients); + focus(fc); restack(); } @@ -80,7 +78,9 @@ void dotile(Arg *arg) { int h, i, n, w; - Client *c; + Client *c, *fc; + + maximized = False; w = sw - mw; for(n = 0, c = clients; c; c = c->next) @@ -93,7 +93,6 @@ dotile(Arg *arg) h = sh - bh; for(i = 0, c = clients; c; c = c->next) { - c->ismax = False; if(isvisible(c)) { if(c->isfloat) { resize(c, True, TopLeft); @@ -132,12 +131,9 @@ dotile(Arg *arg) else ban(c); } - if(!sel || !isvisible(sel)) - sel = getnext(clients); - if(sel) - focus(sel); - else - XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + if(!(fc = sel) || !isvisible(fc)) + fc = getnext(clients); + focus(fc); restack(); } @@ -289,7 +285,7 @@ zoom(Arg *arg) { Client *c = sel; - if(!c || (arrange != dotile) || c->isfloat || c->ismax) + if(!c || (arrange != dotile) || c->isfloat || maximized) return; if(c == getnext(clients)) -- 2.20.1