]> git.decadent.org.uk Git - ion3.git/blobdiff - ioncore/clientwin.c
Update cfg_kludge_flash for Flash 10
[ion3.git] / ioncore / clientwin.c
index 7c3880ece4862934b58222e4036a60c6c0fc27ca..11ce2904b56c7d085c5a2924b2b596fa77fbd2f8 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ion/ioncore/clientwin.c
  *
- * Copyright (c) Tuomo Valkonen 1999-2007
+ * Copyright (c) Tuomo Valkonen 1999-2009
  *
  * See the included file LICENSE for details.
  */
@@ -508,10 +508,7 @@ WClientWin* ioncore_manage_clientwin(Window win, bool maprq)
                 
                 xwindow_unmanaged_selectinput(win, 0);
                 xwindow_unmanaged_selectinput(icon_win, StructureNotifyMask);
-
-                win=icon_win;
-                attr=icon_attr;
-
+                
                 /* Copy WM_CLASS as _ION_DOCKAPP_HACK */
 
                 p=xwindow_get_text_property(win, XA_WM_CLASS, &n);
@@ -525,6 +522,9 @@ WClientWin* ioncore_manage_clientwin(Window win, bool maprq)
                     xwindow_set_text_property(icon_win, ioncore_g.atom_dockapp_hack,
                                               pdummy, 2);
                 }
+                
+                win=icon_win;
+                attr=icon_attr;
             }
         }
         
@@ -561,8 +561,9 @@ WClientWin* ioncore_manage_clientwin(Window win, bool maprq)
 
     param.geom=REGION_GEOM(cwin);
     param.maprq=maprq;
-    param.switchto=(init_state!=IconicState && clientwin_get_switchto(cwin));
     param.jumpto=extl_table_is_bool_set(cwin->proptab, "jumpto");
+    param.switchto=(init_state!=IconicState && 
+                    (param.jumpto || clientwin_get_switchto(cwin)));
     param.gravity=(cwin->size_hints.flags&PWinGravity
                    ? cwin->size_hints.win_gravity
                    : ForgetGravity);
@@ -597,7 +598,11 @@ WClientWin* ioncore_manage_clientwin(Window win, bool maprq)
     }
     
     if(postmanage_check(cwin, &attr)){
-        if(param.jumpto && ioncore_g.focus_next==NULL)
+        /* Check for focus_next==NULL does not play nicely with
+         * pointer_focus_hack.
+         */
+        /*if(param.jumpto && ioncore_g.focus_next==NULL)*/
+        if(param.jumpto && !region_manager_is_focusnext((WRegion*)cwin))
             region_goto((WRegion*)cwin);
         hook_call_o(clientwin_mapped_hook, (Obj*)cwin);
         return cwin;
@@ -1319,6 +1324,25 @@ static ExtlTab clientwin_get_configuration(WClientWin *cwin)
 }
 
 
+static void do_sm(ExtlTab tab)
+{
+    SMAddCallback *add_cb;
+    SMCfgCallback *cfg_cb;
+    WPHolder *ph;
+    
+    ioncore_get_sm_callbacks(&add_cb, &cfg_cb);
+    
+    if(add_cb!=NULL){
+        ph=ioncore_get_load_pholder();
+    
+        if(ph!=NULL){
+            if(!add_cb(ph, tab))
+                destroy_obj((Obj*)ph);
+        }
+    }
+}
+
+    
 WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab)
 {
     double wind=0;
@@ -1345,7 +1369,7 @@ WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab)
                                           &real_chkc);
     
     if(!got_chkc || real_chkc!=chkc){
-        ioncore_clientwin_load_missing();
+        do_sm(tab);
         return NULL;
     }
 
@@ -1356,6 +1380,9 @@ WRegion *clientwin_load(WWindow *par, const WFitParams *fp, ExtlTab tab)
         return NULL;
     }
     
+    if(attr.root!=region_root_of((WRegion*)par))
+        return NULL;
+        
     if(attr.override_redirect || 
        (ioncore_g.opmode==IONCORE_OPMODE_INIT && attr.map_state!=IsViewable)){
         warn(TR("Saved client window does not want to be managed."));