implemented the maximization as I described on the mailinglist, this feels better to me.
This commit is contained in:
parent
bda53ac6ad
commit
d800ec05ff
41
client.c
41
client.c
@ -89,8 +89,6 @@ focus(Client *c) {
|
|||||||
if(!sel)
|
if(!sel)
|
||||||
sel = c;
|
sel = c;
|
||||||
else if(sel != c) {
|
else if(sel != c) {
|
||||||
if(maximized)
|
|
||||||
togglemax(NULL);
|
|
||||||
old = sel;
|
old = sel;
|
||||||
sel = c;
|
sel = c;
|
||||||
if(old) {
|
if(old) {
|
||||||
@ -208,6 +206,10 @@ manage(Window w, XWindowAttributes *wa) {
|
|||||||
c->w = c->tw = wa->width;
|
c->w = c->tw = wa->width;
|
||||||
c->h = wa->height;
|
c->h = wa->height;
|
||||||
c->th = bh;
|
c->th = bh;
|
||||||
|
c->rx = sx;
|
||||||
|
c->ry = bh;
|
||||||
|
c->rw = sw;
|
||||||
|
c->rh = sh - bh;
|
||||||
|
|
||||||
c->border = 0;
|
c->border = 0;
|
||||||
updatesize(c);
|
updatesize(c);
|
||||||
@ -369,41 +371,6 @@ updatetitle(Client *c) {
|
|||||||
resizetitle(c);
|
resizetitle(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
|
void
|
||||||
unmanage(Client *c) {
|
unmanage(Client *c) {
|
||||||
Client *nc;
|
Client *nc;
|
||||||
|
@ -33,7 +33,6 @@ static Key key[] = { \
|
|||||||
{ MODKEY, XK_j, focusnext, { 0 } }, \
|
{ MODKEY, XK_j, focusnext, { 0 } }, \
|
||||||
{ MODKEY, XK_k, focusprev, { 0 } }, \
|
{ MODKEY, XK_k, focusprev, { 0 } }, \
|
||||||
{ MODKEY, XK_Return, zoom, { 0 } }, \
|
{ MODKEY, XK_Return, zoom, { 0 } }, \
|
||||||
{ MODKEY, XK_m, togglemax, { 0 } }, \
|
|
||||||
{ MODKEY, XK_g, resizecol, { .i = 20 } }, \
|
{ MODKEY, XK_g, resizecol, { .i = 20 } }, \
|
||||||
{ MODKEY, XK_s, resizecol, { .i = -20 } }, \
|
{ MODKEY, XK_s, resizecol, { .i = -20 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
|
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
|
||||||
|
@ -28,7 +28,6 @@ static Key key[] = { \
|
|||||||
{ MODKEY, XK_Tab, focusnext, { 0 } }, \
|
{ MODKEY, XK_Tab, focusnext, { 0 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \
|
{ MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \
|
||||||
{ MODKEY, XK_Return, zoom, { 0 } }, \
|
{ MODKEY, XK_Return, zoom, { 0 } }, \
|
||||||
{ MODKEY, XK_m, togglemax, { 0 } }, \
|
|
||||||
{ MODKEY, XK_g, resizecol, { .i = 20 } }, \
|
{ MODKEY, XK_g, resizecol, { .i = 20 } }, \
|
||||||
{ MODKEY, XK_s, resizecol, { .i = -20 } }, \
|
{ MODKEY, XK_s, resizecol, { .i = -20 } }, \
|
||||||
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
|
{ MODKEY|ShiftMask, XK_1, tag, { .i = 0 } }, \
|
||||||
|
4
dwm.h
4
dwm.h
@ -78,6 +78,7 @@ struct Client {
|
|||||||
int proto;
|
int proto;
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
int tx, ty, tw, th; /* title window geometry */
|
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 basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
int grav;
|
int grav;
|
||||||
long flags;
|
long flags;
|
||||||
@ -99,7 +100,7 @@ extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */
|
|||||||
extern void (*handler[LASTEvent])(XEvent *); /* event handler */
|
extern void (*handler[LASTEvent])(XEvent *); /* event handler */
|
||||||
extern void (*arrange)(Arg *); /* arrange function, indicates mode */
|
extern void (*arrange)(Arg *); /* arrange function, indicates mode */
|
||||||
extern Atom wmatom[WMLast], netatom[NetLast];
|
extern Atom wmatom[WMLast], netatom[NetLast];
|
||||||
extern Bool running, issel, maximized, *seltag; /* seltag is array of Bool */
|
extern Bool running, issel, *seltag; /* seltag is array of Bool */
|
||||||
extern Client *clients, *sel, *stack; /* global cleint list and stack */
|
extern Client *clients, *sel, *stack; /* global cleint list and stack */
|
||||||
extern Cursor cursor[CurLast];
|
extern Cursor cursor[CurLast];
|
||||||
extern DC dc; /* global draw context */
|
extern DC dc; /* global draw context */
|
||||||
@ -117,7 +118,6 @@ extern void manage(Window w, XWindowAttributes *wa); /* manage new client */
|
|||||||
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/
|
extern void resize(Client *c, Bool sizehints, Corner sticky); /* resize c*/
|
||||||
extern void updatesize(Client *c); /* update the size structs of c */
|
extern void updatesize(Client *c); /* update the size structs of c */
|
||||||
extern void updatetitle(Client *c); /* update the name of c */
|
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 */
|
extern void unmanage(Client *c); /* destroy c */
|
||||||
|
|
||||||
/* draw.c */
|
/* draw.c */
|
||||||
|
4
event.c
4
event.c
@ -130,7 +130,7 @@ buttonpress(XEvent *e) {
|
|||||||
}
|
}
|
||||||
else if((c = getclient(ev->window))) {
|
else if((c = getclient(ev->window))) {
|
||||||
focus(c);
|
focus(c);
|
||||||
if(maximized || CLEANMASK(ev->state) != MODKEY)
|
if(CLEANMASK(ev->state) != MODKEY)
|
||||||
return;
|
return;
|
||||||
if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) {
|
if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) {
|
||||||
restack(c);
|
restack(c);
|
||||||
@ -170,7 +170,7 @@ configurerequest(XEvent *e) {
|
|||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
|
|
||||||
if((c = getclient(ev->window))) {
|
if((c = getclient(ev->window))) {
|
||||||
if((c == sel) && !c->isfloat && (arrange != dofloat) && maximized) {
|
if((c == sel) && !c->isfloat && (arrange != dofloat)) {
|
||||||
synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width);
|
synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
return;
|
return;
|
||||||
|
1
main.c
1
main.c
@ -24,7 +24,6 @@ unsigned int ntags, numlockmask;
|
|||||||
Atom wmatom[WMLast], netatom[NetLast];
|
Atom wmatom[WMLast], netatom[NetLast];
|
||||||
Bool running = True;
|
Bool running = True;
|
||||||
Bool issel = True;
|
Bool issel = True;
|
||||||
Bool maximized = False;
|
|
||||||
Client *clients = NULL;
|
Client *clients = NULL;
|
||||||
Client *sel = NULL;
|
Client *sel = NULL;
|
||||||
Client *stack = NULL;
|
Client *stack = NULL;
|
||||||
|
23
view.c
23
view.c
@ -61,8 +61,6 @@ void
|
|||||||
dofloat(Arg *arg) {
|
dofloat(Arg *arg) {
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
maximized = False;
|
|
||||||
|
|
||||||
for(c = clients; c; c = c->next) {
|
for(c = clients; c; c = c->next) {
|
||||||
if(isvisible(c)) {
|
if(isvisible(c)) {
|
||||||
resize(c, True, TopLeft);
|
resize(c, True, TopLeft);
|
||||||
@ -82,8 +80,6 @@ dotile(Arg *arg) {
|
|||||||
int h, i, n, w;
|
int h, i, n, w;
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
maximized = False;
|
|
||||||
|
|
||||||
w = sw - mw;
|
w = sw - mw;
|
||||||
for(n = 0, c = clients; c; c = c->next)
|
for(n = 0, c = clients; c; c = c->next)
|
||||||
if(isvisible(c) && !c->isfloat)
|
if(isvisible(c) && !c->isfloat)
|
||||||
@ -190,7 +186,7 @@ resizecol(Arg *arg) {
|
|||||||
for(n = 0, c = clients; c; c = c->next)
|
for(n = 0, c = clients; c; c = c->next)
|
||||||
if(isvisible(c) && !c->isfloat)
|
if(isvisible(c) && !c->isfloat)
|
||||||
n++;
|
n++;
|
||||||
if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized)
|
if(!sel || sel->isfloat || n < 2 || (arrange != dotile))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(sel == getnext(clients)) {
|
if(sel == getnext(clients)) {
|
||||||
@ -273,13 +269,28 @@ viewall(Arg *arg) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
zoom(Arg *arg) {
|
zoom(Arg *arg) {
|
||||||
|
int tmp;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
Client *c;
|
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)
|
for(n = 0, c = clients; c; c = c->next)
|
||||||
if(isvisible(c) && !c->isfloat)
|
if(isvisible(c) && !c->isfloat)
|
||||||
n++;
|
n++;
|
||||||
if(!sel || sel->isfloat || n < 2 || (arrange != dotile) || maximized)
|
if(n < 2 || (arrange != dotile))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((c = sel) == nexttiled(clients))
|
if((c = sel) == nexttiled(clients))
|
||||||
|
Loading…
Reference in New Issue
Block a user