]> git.decadent.org.uk Git - ion3.git/blobdiff - ioncore/pholder.c
Imported Upstream version 20090110
[ion3.git] / ioncore / pholder.c
index 5fdb7b8aae991f5520bf2515ae445e109b63eea4..d62da21ff9e2e8cb5e7b37b6edda4450b270c4c0 100644 (file)
@@ -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 <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);
 }
 
 
@@ -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
 };