/*
* ion/ioncore/window.c
*
- * Copyright (c) Tuomo Valkonen 1999-2006.
+ * Copyright (c) Tuomo Valkonen 1999-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>
/*{{{ 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;
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;
}
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);
}
{
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);
}
void window_unmap(WWindow *wwin)
{
+ region_pointer_focus_hack(&wwin->region);
+
XUnmapWindow(ioncore_g.dpy, wwin->win);
REGION_MARK_UNMAPPED(wwin);
}