X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=ioncore%2Fgroup.c;h=3db079526e8ece8bbcb89b258207e12cd4bb7227;hp=21db4bbb15608d11af2447a495a7ad8a39093895;hb=HEAD;hpb=df57861c962a50bfbf57f276d288395fe0c6a4b6 diff --git a/ioncore/group.c b/ioncore/group.c index 21db4bb..3db0795 100644 --- a/ioncore/group.c +++ b/ioncore/group.c @@ -1,7 +1,7 @@ /* * ion/ioncore/group.c * - * Copyright (c) Tuomo Valkonen 1999-2008. + * Copyright (c) Tuomo Valkonen 1999-2009. * * See the included file LICENSE for details. */ @@ -633,47 +633,50 @@ bool group_do_attach_final(WGroup *ws, ? param->szplcy : (param->bottom ? SIZEPOLICY_FULL_EXACT - : SIZEPOLICY_UNCONSTRAINED)); - - weak=(param->geom_weak_set - ? param->geom_weak - : (param->geom_set - ? 0 - : REGION_RQGEOM_WEAK_ALL)); - - if(param->geom_set) - geom_group_to_parent(ws, ¶m->geom, &g); - else - g=REGION_GEOM(reg); - - /* If the requested geometry does not overlap the workspaces's geometry, - * position request is never honoured. - */ - if((g.x+g.w<=REGION_GEOM(ws).x) || - (g.x>=REGION_GEOM(ws).x+REGION_GEOM(ws).w)){ - weak|=REGION_RQGEOM_WEAK_X; - } - - if((g.y+g.h<=REGION_GEOM(ws).y) || - (g.y>=REGION_GEOM(ws).y+REGION_GEOM(ws).h)){ - weak|=REGION_RQGEOM_WEAK_Y; - } + : SIZEPOLICY_VISIBILITY_CONSTRAINED)); + + if(!param->whatever){ + weak=(param->geom_weak_set + ? param->geom_weak + : (param->geom_set + ? 0 + : REGION_RQGEOM_WEAK_ALL)); + + if(param->geom_set) + geom_group_to_parent(ws, ¶m->geom, &g); + else + g=REGION_GEOM(reg); + + /* If the requested geometry does not overlap the workspaces's geometry, + * position request is never honoured. + */ + if((g.x+g.w<=REGION_GEOM(ws).x) || + (g.x>=REGION_GEOM(ws).x+REGION_GEOM(ws).w)){ + weak|=REGION_RQGEOM_WEAK_X; + } + + if((g.y+g.h<=REGION_GEOM(ws).y) || + (g.y>=REGION_GEOM(ws).y+REGION_GEOM(ws).h)){ + weak|=REGION_RQGEOM_WEAK_Y; + } - if(weak&(REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_Y) && - (szplcy==SIZEPOLICY_UNCONSTRAINED || - szplcy==SIZEPOLICY_FREE || - szplcy==SIZEPOLICY_FREE_GLUE /* without flags */)){ - /* TODO: use 'weak'? */ - group_calc_placement(ws, level, &g); - } + if(weak&(REGION_RQGEOM_WEAK_X|REGION_RQGEOM_WEAK_Y) && + (szplcy==SIZEPOLICY_UNCONSTRAINED || + szplcy==SIZEPOLICY_VISIBILITY_CONSTRAINED || + szplcy==SIZEPOLICY_FREE || + szplcy==SIZEPOLICY_FREE_GLUE /* without flags */)){ + /* TODO: use 'weak'? */ + group_calc_placement(ws, level, &g); + } - fp.g=REGION_GEOM(ws); - fp.mode=REGION_FIT_EXACT; + fp.g=REGION_GEOM(ws); + fp.mode=REGION_FIT_EXACT; - sizepolicy(&szplcy, reg, &g, weak, &fp); + sizepolicy(&szplcy, reg, &g, weak, &fp); - if(rectangle_compare(&fp.g, ®ION_GEOM(reg))!=RECTANGLE_SAME) - region_fitrep(reg, NULL, &fp); + if(rectangle_compare(&fp.g, ®ION_GEOM(reg))!=RECTANGLE_SAME) + region_fitrep(reg, NULL, &fp); + } /* Add */ st=group_do_add_managed(ws, reg, level, szplcy);