X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=ioncore%2Fpholder.c;h=d62da21ff9e2e8cb5e7b37b6edda4450b270c4c0;hb=bab1a29cb81b48fe5f1f79349db31363e52143c1;hp=5fdb7b8aae991f5520bf2515ae445e109b63eea4;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d;p=ion3.git diff --git a/ioncore/pholder.c b/ioncore/pholder.c index 5fdb7b8..d62da21 100644 --- a/ioncore/pholder.c +++ b/ioncore/pholder.c @@ -1,12 +1,9 @@ /* * ion/ioncore/pholder.c * - * Copyright (c) Tuomo Valkonen 2005-2007. + * Copyright (c) Tuomo Valkonen 2005-2009. * - * Ion is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. + * See the included file LICENSE for details. */ #include @@ -18,15 +15,12 @@ bool pholder_init(WPHolder *ph) { - ph->redirect=NULL; return TRUE; } void pholder_deinit(WPHolder *ph) { - if(ph->redirect!=NULL) - destroy_obj((Obj*)ph->redirect); } @@ -40,32 +34,6 @@ WRegion *pholder_do_attach(WPHolder *ph, int flags, } -static WRegion *add_fn_reparent(WWindow *par, const WFitParams *fp, - WRegion *reg) -{ - if(!region_fitrep(reg, par, fp)){ - warn(TR("Unable to reparent.")); - return NULL; - } - region_detach_manager(reg); - return reg; -} - - -WRegion *pholder_attach_(WPHolder *ph, int flags, WRegionAttachData *data) -{ - WPHolder *root=pholder_root(ph); - - /* Use the root, so that extra containers are not added from - * stale chains. - */ - - return (root==NULL - ? NULL - : pholder_do_attach(root, flags, data)); -} - - bool pholder_attach(WPHolder *ph, int flags, WRegion *reg) { WRegionAttachData data; @@ -73,7 +41,7 @@ bool pholder_attach(WPHolder *ph, int flags, WRegion *reg) data.type=REGION_ATTACH_REPARENT; data.u.reg=reg; - return (pholder_attach_(ph, flags, &data)!=NULL); + return (pholder_do_attach(ph, flags, &data)!=NULL); } @@ -101,9 +69,7 @@ WRegion *pholder_do_target(WPHolder *ph) WRegion *pholder_target(WPHolder *ph) { - return (ph->redirect!=NULL - ? pholder_target(ph->redirect) - : pholder_do_target(ph)); + return pholder_do_target(ph); } @@ -111,10 +77,9 @@ static bool pholder_do_check_reparent_default(WPHolder *ph, WRegion *reg) { WRegion *target=pholder_do_target(ph); - if(target==NULL) - return FALSE; - else - return region_attach_reparent_check(target, reg); + return (target==NULL + ? FALSE + : region_ancestor_check(target, reg)); } @@ -128,10 +93,7 @@ DYNFUN bool pholder_do_check_reparent(WPHolder *ph, WRegion *reg) bool pholder_check_reparent(WPHolder *ph, WRegion *reg) { - if(ph->redirect!=NULL) - return pholder_check_reparent(ph->redirect, reg); - else - return pholder_do_check_reparent(ph, reg); + return pholder_do_check_reparent(ph, reg); } @@ -145,53 +107,21 @@ bool pholder_do_goto(WPHolder *ph) bool pholder_goto(WPHolder *ph) { - return (ph->redirect!=NULL - ? pholder_goto(ph->redirect) - : pholder_do_goto(ph)); -} - - -WPHolder *pholder_do_root_default(WPHolder *ph) -{ - return ph; -} - - -WPHolder *pholder_do_root(WPHolder *ph) -{ - WPHolder *ret=NULL; - CALL_DYN_RET(ret, WPHolder*, pholder_do_root, ph, (ph)); - return ret; + return pholder_do_goto(ph); } -WPHolder *pholder_root(WPHolder *ph) +bool pholder_stale_default(WPHolder *ph) { - return (ph->redirect!=NULL - ? pholder_root(ph->redirect) - : pholder_do_root(ph)); + return (pholder_target(ph)==NULL); } bool pholder_stale(WPHolder *ph) { - return (pholder_root(ph)!=ph); -} - - -bool pholder_redirect(WPHolder *ph, WRegion *old_target) -{ - WPHolder *ph2=region_get_rescue_pholder(old_target); - - if(ph2==NULL) - return FALSE; - - if(ph->redirect!=NULL) - destroy_obj((Obj*)ph->redirect); - - ph->redirect=ph2; - - return TRUE; + bool ret=TRUE; + CALL_DYN_RET(ret, bool, pholder_stale, ph, (ph)); + return ret; } @@ -247,8 +177,8 @@ static DynFunTab pholder_dynfuntab[]={ {(DynFun*)pholder_do_check_reparent, (DynFun*)pholder_do_check_reparent_default}, - {(DynFun*)pholder_do_root, - (DynFun*)pholder_do_root_default}, + {(DynFun*)pholder_stale, + (DynFun*)pholder_stale_default}, END_DYNFUNTAB };