/*
* ion/ioncore/pholder.c
*
- * Copyright (c) Tuomo Valkonen 2005-2007.
+ * Copyright (c) Tuomo Valkonen 2005-2008.
*
- * 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 <libtu/objp.h>
bool pholder_init(WPHolder *ph)
{
- ph->redirect=NULL;
return TRUE;
}
void pholder_deinit(WPHolder *ph)
{
- if(ph->redirect!=NULL)
- destroy_obj((Obj*)ph->redirect);
}
}
-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;
data.type=REGION_ATTACH_REPARENT;
data.u.reg=reg;
- return (pholder_attach_(ph, flags, &data)!=NULL);
+ return (pholder_do_attach(ph, flags, &data)!=NULL);
}
WRegion *pholder_target(WPHolder *ph)
{
- return (ph->redirect!=NULL
- ? pholder_target(ph->redirect)
- : pholder_do_target(ph));
+ return pholder_do_target(ph);
}
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);
}
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;
}
{(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
};