Client: Keep free-size after toggle_{free, max}.

This commit is contained in:
OldMan 2010-02-25 20:48:24 +01:00
parent 7e44e4b314
commit 2b7d1c115d
3 changed files with 14 additions and 2 deletions

View File

@ -555,6 +555,7 @@ client_manage(Window w, XWindowAttributes *wa, Bool ar)
c->ogeo.y = c->geo.y = my; c->ogeo.y = c->geo.y = my;
c->ogeo.width = c->geo.width = wa->width; c->ogeo.width = c->geo.width = wa->width;
c->ogeo.height = c->geo.height = wa->height; c->ogeo.height = c->geo.height = wa->height;
c->free_geo = c->geo;
c->tag = seltag[c->screen]; c->tag = seltag[c->screen];
c->layer = (sel && sel->layer > 0) ? sel->layer : 1; c->layer = (sel && sel->layer > 0) ? sel->layer : 1;

View File

@ -71,7 +71,7 @@ freelayout(int screen)
&& c->screen == screen_get_sel() && c->screen == screen_get_sel()
&& !(c->flags & MaxFlag)) && !(c->flags & MaxFlag))
{ {
client_moveresize(c, c->ogeo, True); client_moveresize(c, c->free_geo, True);
c->flags &= ~(TileFlag | LMaxFlag); c->flags &= ~(TileFlag | LMaxFlag);
} }
@ -93,7 +93,10 @@ layoutswitch(Bool b)
if(tags[selscreen][seltag[selscreen]].layout.func == freelayout) if(tags[selscreen][seltag[selscreen]].layout.func == freelayout)
for(c = clients; c && (c->tag != seltag[selscreen] && c->screen != selscreen); c = c->next) for(c = clients; c && (c->tag != seltag[selscreen] && c->screen != selscreen); c = c->next)
{
c->ogeo = c->geo; c->ogeo = c->geo;
c->free_geo = c->geo;
}
for(i = 0; i < conf.nlayout; ++i) for(i = 0; i < conf.nlayout; ++i)
{ {
@ -775,11 +778,14 @@ uicb_togglefree(uicb_t cmd)
if((sel->flags & FreeFlag)) if((sel->flags & FreeFlag))
{ {
sel->flags &= ~(TileFlag | MaxFlag | LMaxFlag); sel->flags &= ~(TileFlag | MaxFlag | LMaxFlag);
client_moveresize(sel, sel->ogeo, True); client_moveresize(sel, sel->free_geo, True);
client_raise(sel); client_raise(sel);
} }
else else
{
sel->free_geo = sel->geo;
sel->ogeo = sel->geo; sel->ogeo = sel->geo;
}
client_update_attributes(sel); client_update_attributes(sel);
@ -802,6 +808,7 @@ uicb_togglemax(uicb_t cmd)
if(!(sel->flags & MaxFlag)) if(!(sel->flags & MaxFlag))
{ {
sel->ogeo = sel->geo; sel->ogeo = sel->geo;
sel->free_geo = sel->geo;
sel->flags &= ~(TileFlag | FreeFlag); sel->flags &= ~(TileFlag | FreeFlag);
client_maximize(sel); client_maximize(sel);
client_raise(sel); client_raise(sel);
@ -809,6 +816,8 @@ uicb_togglemax(uicb_t cmd)
} }
else else
{ {
sel->geo = sel->free_geo;
client_moveresize(sel, sel->geo, True);
sel->flags &= ~MaxFlag; sel->flags &= ~MaxFlag;
tags[selscreen][seltag[selscreen]].layout.func(selscreen); tags[selscreen][seltag[selscreen]].layout.func(selscreen);
} }

View File

@ -176,6 +176,8 @@ struct Client
XRectangle frame_geo; XRectangle frame_geo;
/* Old window attribute */ /* Old window attribute */
XRectangle ogeo; XRectangle ogeo;
/* Free window attribute */
XRectangle free_geo;
/* For resizehint usage */ /* For resizehint usage */
int basew, baseh, incw, inch; int basew, baseh, incw, inch;
int maxw, maxh, minw, minh; int maxw, maxh, minw, minh;