}
-static bool group_refocus_(WGroup *ws, WStacking *st)
-{
- if(st!=ws->current_managed && st->reg!=NULL){
- if(region_may_control_focus((WRegion*)ws))
- region_set_focus(st->reg);
- else
- ws->current_managed=st;
- return TRUE;
- }
-
- return FALSE;
-}
-
-
static void group_do_set_focus(WGroup *ws, bool warp)
{
- WStacking *st=ws->current_managed;
-
- if(st==NULL || st->reg==NULL)
- st=find_to_focus(ws, NULL, TRUE);
+ WStacking *st=find_to_focus(ws, ws->current_managed, FALSE);
if(st!=NULL && st->reg!=NULL)
region_do_set_focus(st->reg, warp);
}
-static bool group_empty_for_bottom_stdisp(WGroup *ws)
-{
- WGroupIterTmp tmp;
- WStacking *st;
-
- FOR_ALL_NODES_IN_GROUP(ws, st, tmp){
- if(st!=ws->bottom && st!=ws->managed_stdisp)
- return FALSE;
- }
-
- return TRUE;
-}
-
-
-static WRegion *group_managed_disposeroot(WGroup *ws, WRegion *reg)
-{
- if(group_bottom(ws)==reg){
- if(group_empty_for_bottom_stdisp(ws))
- return region_disposeroot((WRegion*)ws);
- }
-
- return reg;
-}
-
-
/*}}}*/
}
+static int group_must_focus(WGroup *ws, WStacking *st)
+{
+ WStacking *stacking=group_get_stacking(ws);
+
+ return (stacking!=NULL && stacking_must_focus(stacking, st));
+}
+
+
bool group_do_attach_final(WGroup *ws,
WRegion *reg,
const WGroupAttachParams *param)
group_do_set_bottom(ws, st);
/* Focus */
- sw=(param->switchto_set ? param->switchto : ioncore_g.switchto_new);
+ sw=((param->switchto_set ? param->switchto : ioncore_g.switchto_new)
+ ? st==find_to_focus(ws, st, FALSE)
+ : group_must_focus(ws, st));
- if(sw || st->level>=STACKING_LEVEL_MODAL1){
- WStacking *stf=find_to_focus(ws, st, FALSE);
-
- if(stf==st){
- /* Ok, the new region can be focused */
- group_refocus_(ws, stf);
- }
+ if(sw){
+ if(region_may_control_focus((WRegion*)ws))
+ region_set_focus(st->reg);
+ else
+ ws->current_managed=st;
}
return TRUE;
}
-static void get_params(WGroup *ws, ExtlTab tab, WGroupAttachParams *par)
+void group_get_attach_params(WGroup *ws, ExtlTab tab,
+ WGroupAttachParams *par)
{
int tmp;
+ bool tmpb;
char *tmps;
ExtlTab g;
if(extl_table_gets_i(tab, "level", &tmp)){
if(tmp>=0){
- par->level_set=STACKING_LEVEL_NORMAL;
+ par->level_set=1;
par->level=tmp;
}
}
par->level_set=1;
}
- if(extl_table_is_bool_set(tab, "switchto"))
- par->switchto=1;
-
+ if(extl_table_gets_b(tab, "switchto", &tmpb)){
+ par->switchto=(tmpb!=0);
+ par->switchto_set=1;
+ }
+
if(extl_table_gets_i(tab, "sizepolicy", &tmp)){
par->szplcy_set=1;
par->szplcy=tmp;
if(reg==NULL)
return NULL;
- get_params(ws, param, &par);
+ group_get_attach_params(ws, param, &par);
data.type=REGION_ATTACH_REPARENT;
data.u.reg=reg;
WGroupAttachParams par=GROUPATTACHPARAMS_INIT;
WRegionAttachData data;
- get_params(ws, param, &par);
+ group_get_attach_params(ws, param, &par);
data.type=REGION_ATTACH_LOAD;
data.u.tab=param;
static int stdisp_szplcy(const WMPlexSTDispInfo *di, WRegion *stdisp)
{
int pos=di->pos;
+ int policy=0, gravity=0;
if(di->fullsize){
if(region_orientation(stdisp)==REGION_ORIENTATION_VERTICAL){
if(pos==MPLEX_STDISP_TL || pos==MPLEX_STDISP_BL)
- return SIZEPOLICY_STRETCH_LEFT;
+ policy=SIZEPOLICY_STRETCH_LEFT;
else
- return SIZEPOLICY_STRETCH_RIGHT;
+ policy=SIZEPOLICY_STRETCH_RIGHT;
}else{
if(pos==MPLEX_STDISP_TL || pos==MPLEX_STDISP_TR)
- return SIZEPOLICY_STRETCH_TOP;
+ policy=SIZEPOLICY_STRETCH_TOP;
else
- return SIZEPOLICY_STRETCH_BOTTOM;
+ policy=SIZEPOLICY_STRETCH_BOTTOM;
}
}else{
- if(pos==MPLEX_STDISP_TL)
- return SIZEPOLICY_GRAVITY_NORTHWEST;
- else if(pos==MPLEX_STDISP_BL)
- return SIZEPOLICY_GRAVITY_SOUTHWEST;
- else if(pos==MPLEX_STDISP_TR)
- return SIZEPOLICY_GRAVITY_NORTHEAST;
- else /*if(pos=MPLEX_STDISP_BR)*/
- return SIZEPOLICY_GRAVITY_SOUTHEAST;
+ policy=SIZEPOLICY_GRAVITY;
}
+
+ if(pos==MPLEX_STDISP_TL)
+ gravity=SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_LEFT;
+ else if(pos==MPLEX_STDISP_BL)
+ gravity=SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_LEFT;
+ else if(pos==MPLEX_STDISP_TR)
+ gravity=SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_RIGHT;
+ else /*if(pos=MPLEX_STDISP_BR)*/
+ gravity=SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_RIGHT;
+
+ return (policy|gravity);
}
{(DynFun*)region_get_configuration,
(DynFun*)group_get_configuration},
- {(DynFun*)region_managed_disposeroot,
- (DynFun*)group_managed_disposeroot},
-
{(DynFun*)region_current,
(DynFun*)group_current},