timplemented the maximization as I described on the mailinglist, this feels bet… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit d800ec05ff63451193a0b858c114f5144534c2a1 | |
parent bda53ac6ad834824e8e5d5678ccd638a122c173a | |
Author: arg@mmvi <unknown> | |
Date: Fri, 22 Sep 2006 07:37:56 +0200 | |
implemented the maximization as I described on the mailinglist, this feels bett… | |
Diffstat: | |
M client.c | 41 +++--------------------------… | |
M config.arg.h | 1 - | |
M config.default.h | 1 - | |
M dwm.h | 4 ++-- | |
M event.c | 4 ++-- | |
M main.c | 1 - | |
M view.c | 23 +++++++++++++++++------ | |
7 files changed, 25 insertions(+), 50 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -89,8 +89,6 @@ focus(Client *c) { | |
if(!sel) | |
sel = c; | |
else if(sel != c) { | |
- if(maximized) | |
- togglemax(NULL); | |
old = sel; | |
sel = c; | |
if(old) { | |
t@@ -208,6 +206,10 @@ manage(Window w, XWindowAttributes *wa) { | |
c->w = c->tw = wa->width; | |
c->h = wa->height; | |
c->th = bh; | |
+ c->rx = sx; | |
+ c->ry = bh; | |
+ c->rw = sw; | |
+ c->rh = sh - bh; | |
c->border = 0; | |
updatesize(c); | |
t@@ -370,41 +372,6 @@ updatetitle(Client *c) { | |
} | |
void | |
-togglemax(Arg *arg) { | |
- int ox, oy, ow, oh; | |
- Client *c; | |
- XEvent ev; | |
- | |
- if(!sel) | |
- return; | |
- | |
- if((maximized = !maximized)) { | |
- ox = sel->x; | |
- oy = sel->y; | |
- ow = sel->w; | |
- oh = sel->h; | |
- sel->x = sx; | |
- sel->y = sy + bh; | |
- sel->w = sw - 2; | |
- 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; | |
- sel->y = oy; | |
- sel->w = ow; | |
- sel->h = oh; | |
- } | |
- else | |
- arrange(NULL); | |
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
-} | |
- | |
-void | |
unmanage(Client *c) { | |
Client *nc; | |
diff --git a/config.arg.h b/config.arg.h | |
t@@ -33,7 +33,6 @@ static Key key[] = { \ | |
{ MODKEY, XK_j, focusnext, … | |
{ MODKEY, XK_k, focusprev, … | |
{ MODKEY, XK_Return, zoom, … | |
- { MODKEY, XK_m, togglemax, … | |
{ MODKEY, XK_g, resizecol, … | |
{ MODKEY, XK_s, resizecol, … | |
{ MODKEY|ShiftMask, XK_1, tag, … | |
diff --git a/config.default.h b/config.default.h | |
t@@ -28,7 +28,6 @@ static Key key[] = { \ | |
{ MODKEY, XK_Tab, focusnext, … | |
{ MODKEY|ShiftMask, XK_Tab, focusprev, … | |
{ MODKEY, XK_Return, zoom, … | |
- { MODKEY, XK_m, togglemax, … | |
{ MODKEY, XK_g, resizecol, … | |
{ MODKEY, XK_s, resizecol, … | |
{ MODKEY|ShiftMask, XK_1, tag, … | |
diff --git a/dwm.h b/dwm.h | |
t@@ -78,6 +78,7 @@ struct Client { | |
int proto; | |
int x, y, w, h; | |
int tx, ty, tw, th; /* title window geometry */ | |
+ int rx, ry, rw, rh; /* revert geometry */ | |
int basew, baseh, incw, inch, maxw, maxh, minw, minh; | |
int grav; | |
long flags; | |
t@@ -99,7 +100,7 @@ extern unsigned int ntags, numlockmask; /* n… | |
extern void (*handler[LASTEvent])(XEvent *); /* event handler */ | |
extern void (*arrange)(Arg *); /* arrange function, ind… | |
extern Atom wmatom[WMLast], netatom[NetLast]; | |
-extern Bool running, issel, maximized, *seltag; /* seltag is array of B… | |
+extern Bool running, issel, *seltag; /* seltag is array of Bool… | |
extern Client *clients, *sel, *stack; /* global cleint list and… | |
extern Cursor cursor[CurLast]; | |
extern DC dc; /* global draw context */ | |
t@@ -117,7 +118,6 @@ extern void manage(Window w, XWindowAttributes *wa); … | |
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/ | |
extern void updatesize(Client *c); /* update the size s… | |
extern void updatetitle(Client *c); /* update the name of c */ | |
-extern void togglemax(Arg *arg); /* (un)maximize c */ | |
extern void unmanage(Client *c); /* destroy c */ | |
/* draw.c */ | |
diff --git a/event.c b/event.c | |
t@@ -130,7 +130,7 @@ buttonpress(XEvent *e) { | |
} | |
else if((c = getclient(ev->window))) { | |
focus(c); | |
- if(maximized || CLEANMASK(ev->state) != MODKEY) | |
+ if(CLEANMASK(ev->state) != MODKEY) | |
return; | |
if(ev->button == Button1 && (arrange == dofloat || c->isfloat)… | |
restack(c); | |
t@@ -170,7 +170,7 @@ configurerequest(XEvent *e) { | |
XWindowChanges wc; | |
if((c = getclient(ev->window))) { | |
- if((c == sel) && !c->isfloat && (arrange != dofloat) && maximi… | |
+ if((c == sel) && !c->isfloat && (arrange != dofloat)) { | |
synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->bor… | |
XSync(dpy, False); | |
return; | |
diff --git a/main.c b/main.c | |
t@@ -24,7 +24,6 @@ unsigned int ntags, numlockmask; | |
Atom wmatom[WMLast], netatom[NetLast]; | |
Bool running = True; | |
Bool issel = True; | |
-Bool maximized = False; | |
Client *clients = NULL; | |
Client *sel = NULL; | |
Client *stack = NULL; | |
diff --git a/view.c b/view.c | |
t@@ -61,8 +61,6 @@ void | |
dofloat(Arg *arg) { | |
Client *c; | |
- maximized = False; | |
- | |
for(c = clients; c; c = c->next) { | |
if(isvisible(c)) { | |
resize(c, True, TopLeft); | |
t@@ -82,8 +80,6 @@ dotile(Arg *arg) { | |
int h, i, n, w; | |
Client *c; | |
- maximized = False; | |
- | |
w = sw - mw; | |
for(n = 0, c = clients; c; c = c->next) | |
if(isvisible(c) && !c->isfloat) | |
t@@ -190,7 +186,7 @@ resizecol(Arg *arg) { | |
for(n = 0, c = clients; c; c = c->next) | |
if(isvisible(c) && !c->isfloat) | |
n++; | |
- if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) | |
+ if(!sel || sel->isfloat || n < 2 || (arrange != dotile)) | |
return; | |
if(sel == getnext(clients)) { | |
t@@ -273,13 +269,28 @@ viewall(Arg *arg) { | |
void | |
zoom(Arg *arg) { | |
+ int tmp; | |
unsigned int n; | |
Client *c; | |
+ XEvent ev; | |
+ | |
+ if(!sel) | |
+ return; | |
+ | |
+ if(sel->isfloat || (arrange == dofloat)) { | |
+ tmp = sel->x; sel->x = sel->rx; sel->rx = tmp; | |
+ tmp = sel->y; sel->y = sel->ry; sel->ry = tmp; | |
+ tmp = sel->w; sel->w = sel->rw; sel->rw = tmp; | |
+ tmp = sel->h; sel->h = sel->rh; sel->rh = tmp; | |
+ resize(sel, True, TopLeft); | |
+ while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | |
+ return; | |
+ } | |
for(n = 0, c = clients; c; c = c->next) | |
if(isvisible(c) && !c->isfloat) | |
n++; | |
- if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized) | |
+ if(n < 2 || (arrange != dotile)) | |
return; | |
if((c = sel) == nexttiled(clients)) |