]> git.decadent.org.uk Git - ion3.git/blobdiff - ioncore/frame.c
[svn-upgrade] Integrating new upstream version, ion3 (20070318)
[ion3.git] / ioncore / frame.c
index d733c3f46252d475be9d40f990281d86fc43c3dd..f0e786e77cdc1560e4dd5b92de6bac8a0e0d8efd 100644 (file)
@@ -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},