]> git.decadent.org.uk Git - ion3.git/blobdiff - ioncore/window.c
[svn-upgrade] Integrating new upstream version, ion3 (20070203)
[ion3.git] / ioncore / window.c
index 8d2986fe6fb9ccf12b1ec8ec1e919f78f44d4fbe..0b122008e70a7a98231065fa74f9b1ff5ee288d2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * ion/ioncore/window.c
  *
- * Copyright (c) Tuomo Valkonen 1999-2006
+ * Copyright (c) Tuomo Valkonen 1999-2007
  *
  * 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
@@ -57,9 +57,17 @@ void window_release(WWindow *wwin)
 /*{{{ Init, create */
 
 
-bool window_do_init(WWindow *wwin, WWindow *par, Window win,
-                    const WFitParams *fp)
+bool window_do_init(WWindow *wwin, WWindow *par, 
+                    const WFitParams *fp, Window win)
 {
+    if(win==None){
+        assert(par!=NULL);
+        win=create_xwindow(region_rootwin_of((WRegion*)par),
+                           par->win, &(fp->g));
+        if(win==None)
+            return FALSE;
+    }
+
     wwin->win=win;
     wwin->xic=NULL;
     wwin->event_mask=0;
@@ -67,10 +75,8 @@ bool window_do_init(WWindow *wwin, WWindow *par, Window win,
     
     region_init(&(wwin->region), par, fp);
     
-    if(win!=None){
-        XSaveContext(ioncore_g.dpy, win, ioncore_g.win_context, 
-                     (XPointer)wwin);
-    }
+    XSaveContext(ioncore_g.dpy, win, ioncore_g.win_context, 
+                 (XPointer)wwin);
     
     return TRUE;
 }
@@ -78,14 +84,7 @@ bool window_do_init(WWindow *wwin, WWindow *par, Window win,
 
 bool window_init(WWindow *wwin, WWindow *par, const WFitParams *fp)
 {
-    Window win;
-    
-    win=create_xwindow(region_rootwin_of((WRegion*)par),
-                       par->win, &(fp->g));
-    if(win==None)
-        return FALSE;
-    /* window_init does not fail */
-    return window_do_init(wwin, par, win, fp);
+    return window_do_init(wwin, par, fp, None);
 }
 
 
@@ -93,11 +92,14 @@ void window_deinit(WWindow *wwin)
 {
     region_deinit((WRegion*)wwin);
     
+    region_pointer_focus_hack(&wwin->region);
+    
     if(wwin->xic!=NULL)
         XDestroyIC(wwin->xic);
-
+        
     if(wwin->win!=None){
         XDeleteContext(ioncore_g.dpy, wwin->win, ioncore_g.win_context);
+        /* Probably should not try destroy if root window... */
         XDestroyWindow(ioncore_g.dpy, wwin->win);
     }
     
@@ -174,6 +176,8 @@ void window_map(WWindow *wwin)
 
 void window_unmap(WWindow *wwin)
 {
+    region_pointer_focus_hack(&wwin->region);
+
     XUnmapWindow(ioncore_g.dpy, wwin->win);
     REGION_MARK_UNMAPPED(wwin);
 }