X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=ioncore%2Fdetach.c;h=21997ec1f3feb3eb6e968c9ee2b66f0020745b61;hb=720e6978185b09f2b2f60a6b96018238085a7238;hp=72c74060e4d6d1278b4866147c5b7e2b36e55fa3;hpb=ae4260bb64817c11f9a7140324cd3e3ba113e297;p=ion3.git diff --git a/ioncore/detach.c b/ioncore/detach.c index 72c7406..21997ec 100644 --- a/ioncore/detach.c +++ b/ioncore/detach.c @@ -6,6 +6,8 @@ * See the included file LICENSE for details. */ +#include + #include #include #include @@ -115,9 +117,10 @@ static WRegion *check_mplex(WRegion *reg, WFrameMode *mode) *mode=FRAME_MODE_FLOATING; - if(OBJ_IS(mplex, WFrame) - && frame_mode((WFrame*)mplex)==FRAME_MODE_TRANSIENT){ - *mode=FRAME_MODE_TRANSIENT; + if(OBJ_IS(mplex, WFrame)){ + WFrameMode mode2=frame_mode((WFrame*)mplex); + if(framemode_unalt(mode2)==FRAME_MODE_TRANSIENT) + *mode=mode2; } return (WRegion*)mplex; @@ -145,7 +148,6 @@ static WGroup *find_group(WRegion *reg, uint *level) bool ioncore_detach(WRegion *reg, int sp) { - WPHolder *ph=region_get_return(reg); WFrameMode mode; WGroup *grp; bool set, nset; @@ -183,15 +185,17 @@ bool ioncore_detach(WRegion *reg, int sp) /*EXTL_DOC - * Detach or reattach \var{reg}, depending on whether \var{how} - * is \codestr{set}, \codestr{unset} or \codestr{toggle}. (Detaching - * means making \var{reg} managed by its nearest ancestor \type{WGroup}, - * framed if \var{reg} is not itself \type{WFrame}. Reattaching means - * making it managed where it used to be managed, if a return-placeholder - * exists.) - * If \var{reg} is the `bottom' of some group, the whole group is - * detached. If \var{reg} is a \type{WWindow}, it is put into a - * frame. + * Detach or reattach \var{reg} or any group it is the leader of + * (see \fnref{WRegion.groupleader_of}), depending on whether \var{how} + * is \codestr{set}, \codestr{unset} or \codestr{toggle}. If this + * region is not a window, it is put into a frame. + * + * Detaching a region means having it managed by its nearest ancestor + * \type{WGroup}. Reattaching means having it managed where it used + * to be managed, if a ``return placeholder'' exists. + * + * Additionally, setting \var{how} to \codestr{forget}, can be used to + * clear this return placeholder of the group leader of \var{reg}. */ EXTL_EXPORT_AS(ioncore, detach) bool ioncore_detach_extl(WRegion *reg, const char *how) @@ -199,6 +203,11 @@ bool ioncore_detach_extl(WRegion *reg, const char *how) if(how==NULL) how="set"; + if(strcmp(how, "forget")==0){ + region_unset_return(region_groupleader_of(reg)); + return FALSE; + } + return ioncore_detach(reg, libtu_string_to_setparam(how)); }