X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=ioncore%2Fframe.c;fp=ioncore%2Fframe.c;h=f0e786e77cdc1560e4dd5b92de6bac8a0e0d8efd;hp=d733c3f46252d475be9d40f990281d86fc43c3dd;hb=de22e45179cb3bafa490294d31d47f361047a30a;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d diff --git a/ioncore/frame.c b/ioncore/frame.c index d733c3f..f0e786e 100644 --- a/ioncore/frame.c +++ b/ioncore/frame.c @@ -137,6 +137,7 @@ static void frame_add_mode_bindmaps(WFrame *frame) 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); @@ -456,7 +457,7 @@ void frame_size_hints(WFrame *frame, WSizeHints *hints_ret) 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;*/ @@ -832,9 +833,17 @@ bool frame_is_numbers(WFrame *frame) 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); + } } @@ -875,27 +884,17 @@ static void frame_managed_changed(WFrame *frame, int mode, bool sw, } -#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; } @@ -960,25 +959,18 @@ WRegion *frame_load(WWindow *par, const WFitParams *fp, ExtlTab tab) 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; } @@ -1015,12 +1007,13 @@ static DynFunTab frame_dynfuntab[]={ {(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},