region_add_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap);
}else if(mode==FRAME_MODE_TRANSIENT){
region_add_bindmap((WRegion*)frame, ioncore_frame_transient_bindmap);
+ region_add_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap);
}else{
/* mode==FRAME_MODE_TILED || mode==FRAME_MODE_TILED_ALT || mode==FRAME_MODE_UNKNOWN */
region_add_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap);
if(!USE_MINMAX(frame)){
hints_ret->max_set=0;
hints_ret->min_set=0;
- hints_ret->base_set=0;
+ /*hints_ret->base_set=0;*/
hints_ret->aspect_set=0;
hints_ret->no_constrain=FALSE;
/*hints_ret->no_constrain=TRUE;*/
void frame_managed_notify(WFrame *frame, WRegion *sub, WRegionNotify how)
{
- frame_update_attrs(frame);
- frame_recalc_bar(frame);
- frame_draw_bar(frame, FALSE);
+ if(how==ioncore_g.notifies.activated ||
+ how==ioncore_g.notifies.inactivated ||
+ how==ioncore_g.notifies.name ||
+ how==ioncore_g.notifies.activity ||
+ how==ioncore_g.notifies.sub_activity ||
+ how==ioncore_g.notifies.tag){
+
+ frame_update_attrs(frame);
+ frame_recalc_bar(frame);
+ frame_draw_bar(frame, FALSE);
+ }
}
}
-#define EMPTY_AND_SHOULD_BE_DESTROYED(FRAME) \
- (DEST_EMPTY(frame) && FRAME_MCOUNT(FRAME)==0 && \
- !OBJ_IS_BEING_DESTROYED(frame))
-
-
-static void frame_destroy_empty(WFrame *frame)
+WRegion *frame_managed_disposeroot(WFrame *frame, WRegion *reg)
{
- if(EMPTY_AND_SHOULD_BE_DESTROYED(frame)){
- frame_modify_pholders(frame);
- destroy_obj((Obj*)frame);
- }
-}
-
-
-void frame_managed_remove(WFrame *frame, WRegion *reg)
-{
- mplex_managed_remove((WMPlex*)frame, reg);
- if(EMPTY_AND_SHOULD_BE_DESTROYED(frame)){
- mainloop_defer_action((Obj*)frame,
- (WDeferredAction*)frame_destroy_empty);
+ if(DEST_EMPTY(frame) &&
+ frame->mplex.mgd!=NULL &&
+ frame->mplex.mgd->reg==reg &&
+ frame->mplex.mgd->next==NULL){
+ WRegion *tmp=region_disposeroot((WRegion*)frame);
+ return (tmp!=NULL ? tmp : reg);
}
+
+ return reg;
}
int mode=FRAME_MODE_UNKNOWN;
WFrame *frame;
- if(!extl_table_gets_i(tab, "mode", &mode)){
- #warning "TODO: Remove backwards compatibility hack"
- char *style=NULL;
- if(extl_table_gets_s(tab, "frame_style", &style)){
- if(strcmp(style, "frame-tiled")==0)
- mode=FRAME_MODE_TILED;
- else if(strcmp(style, "frame-floating")==0)
- mode=FRAME_MODE_FLOATING;
- else if(strcmp(style, "frame-transientcontainer")==0)
- mode=FRAME_MODE_TRANSIENT;
- free(style);
- }
- }
+ extl_table_gets_i(tab, "mode", &mode);
frame=create_frame(par, fp, mode);
if(frame!=NULL)
frame_do_load(frame, tab);
+ if(DEST_EMPTY(frame) && frame->mplex.mgd==NULL){
+ destroy_obj((Obj*)frame);
+ return NULL;
+ }
+
return (WRegion*)frame;
}
{(DynFun*)region_fitrep,
(DynFun*)frame_fitrep},
+
+ {(DynFun*)region_managed_disposeroot,
+ (DynFun*)frame_managed_disposeroot},
{region_managed_rqgeom_absolute,
frame_managed_rqgeom_absolute},
- {region_managed_remove, frame_managed_remove},
-
{(DynFun*)mplex_default_index,
(DynFun*)frame_default_index},