From 2b7d1c115dfe2c2dcf3c8ca76b84f9e57a2ec8fd Mon Sep 17 00:00:00 2001 From: OldMan Date: Thu, 25 Feb 2010 20:48:24 +0100 Subject: [PATCH] Client: Keep free-size after toggle_{free, max}. --- src/client.c | 1 + src/layout.c | 13 +++++++++++-- src/structs.h | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/client.c b/src/client.c index 9bed5d0..21ce5c9 100644 --- a/src/client.c +++ b/src/client.c @@ -555,6 +555,7 @@ client_manage(Window w, XWindowAttributes *wa, Bool ar) c->ogeo.y = c->geo.y = my; c->ogeo.width = c->geo.width = wa->width; c->ogeo.height = c->geo.height = wa->height; + c->free_geo = c->geo; c->tag = seltag[c->screen]; c->layer = (sel && sel->layer > 0) ? sel->layer : 1; diff --git a/src/layout.c b/src/layout.c index 7704029..6c8b792 100644 --- a/src/layout.c +++ b/src/layout.c @@ -71,7 +71,7 @@ freelayout(int screen) && c->screen == screen_get_sel() && !(c->flags & MaxFlag)) { - client_moveresize(c, c->ogeo, True); + client_moveresize(c, c->free_geo, True); c->flags &= ~(TileFlag | LMaxFlag); } @@ -93,7 +93,10 @@ layoutswitch(Bool b) if(tags[selscreen][seltag[selscreen]].layout.func == freelayout) for(c = clients; c && (c->tag != seltag[selscreen] && c->screen != selscreen); c = c->next) + { c->ogeo = c->geo; + c->free_geo = c->geo; + } for(i = 0; i < conf.nlayout; ++i) { @@ -775,11 +778,14 @@ uicb_togglefree(uicb_t cmd) if((sel->flags & FreeFlag)) { sel->flags &= ~(TileFlag | MaxFlag | LMaxFlag); - client_moveresize(sel, sel->ogeo, True); + client_moveresize(sel, sel->free_geo, True); client_raise(sel); } else + { + sel->free_geo = sel->geo; sel->ogeo = sel->geo; + } client_update_attributes(sel); @@ -802,6 +808,7 @@ uicb_togglemax(uicb_t cmd) if(!(sel->flags & MaxFlag)) { sel->ogeo = sel->geo; + sel->free_geo = sel->geo; sel->flags &= ~(TileFlag | FreeFlag); client_maximize(sel); client_raise(sel); @@ -809,6 +816,8 @@ uicb_togglemax(uicb_t cmd) } else { + sel->geo = sel->free_geo; + client_moveresize(sel, sel->geo, True); sel->flags &= ~MaxFlag; tags[selscreen][seltag[selscreen]].layout.func(selscreen); } diff --git a/src/structs.h b/src/structs.h index f2f4179..58462a2 100644 --- a/src/structs.h +++ b/src/structs.h @@ -176,6 +176,8 @@ struct Client XRectangle frame_geo; /* Old window attribute */ XRectangle ogeo; + /* Free window attribute */ + XRectangle free_geo; /* For resizehint usage */ int basew, baseh, incw, inch; int maxw, maxh, minw, minh;