From 76268dc79af3cea1ecda671cc0438f860859b4f0 Mon Sep 17 00:00:00 2001 From: ketmar Date: Sat, 4 Dec 2010 17:55:30 +0200 Subject: [PATCH] fixes to X11 primitives --- src/primlib/x11lib/lstpl_x11.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/primlib/x11lib/lstpl_x11.c b/src/primlib/x11lib/lstpl_x11.c index 731ee9a..0b66af2 100644 --- a/src/primlib/x11lib/lstpl_x11.c +++ b/src/primlib/x11lib/lstpl_x11.c @@ -24,6 +24,13 @@ #include "lstpl_x11.h" +#ifdef DEBUG +# define dprintf(...) fprintf(stderr, __VA_ARGS__) +#else +# define dprintf(...) +#endif + + static const char *x11ObjId = "X11Handle"; static const char *x11SubId[] = { "Window", @@ -113,17 +120,25 @@ typedef struct { static void deinitX11Obj (X11Object *x11o) { if (x11o) { - if (x11o->inited && !x11o->dontKill) { - switch (x11o->subtype) { - case X11_WINDOW: XDestroyWindow(curDisp, x11o->win); break; - case X11_GC: XFreeGC(curDisp, x11o->gc); break; - case X11_XFTFONT: XftFontClose(curDisp, x11o->font); break; - case X11_XFTDRAW: XftDrawDestroy(x11o->xd); break; - case X11_XFTCOLOR: XftColorFree(curDisp, vis, curCMap, &x11o->tc); + if (x11o->inited) { + if (!x11o->dontKill) { + dprintf("deinitializing X11 object; subtype=%s\n", x11SubId[x11o->subtype]); + switch (x11o->subtype) { + case X11_WINDOW: XDestroyWindow(curDisp, x11o->win); break; + case X11_GC: XFreeGC(curDisp, x11o->gc); break; + case X11_XFTFONT: XftFontClose(curDisp, x11o->font); break; + case X11_XFTDRAW: XftDrawDestroy(x11o->xd); break; + case X11_XFTCOLOR: XftColorFree(curDisp, vis, curCMap, &x11o->tc); + } } if (--aliveObjects <= 0) { aliveObjects = 0; - if (!initialized) { XCloseDisplay(curDisp); curDisp = NULL; } + if (!initialized) { + dprintf("closing X11\n"); + XCloseDisplay(curDisp); curDisp = NULL; + } + } else { + dprintf("X11: %d objects left\n", aliveObjects); } x11o->inited = 0; } @@ -150,7 +165,7 @@ static lstObject *newX11 (X11Object **x11o, int subtype) { xo->subtype = subtype; xo->dontKill = 0; xo->inited = 1; /* MUST! be initialized by caller */ - lstSetFinalizer(res, lpX11Finalizer, x11o); + lstSetFinalizer(res, lpX11Finalizer, xo); ++aliveObjects; if (x11o) *x11o = xo; return res; -- 2.11.4.GIT