summary refs log tree commit diff
path: root/calmwm.c
diff options
context:
space:
mode:
authorokan <okan>2014-01-22 22:14:02 +0000
committerokan <okan>2014-01-22 22:14:02 +0000
commit5121ea5e10bce88d1716f5fc719b4385a26289ff (patch)
tree4d89147b394fe63ec4ba9ac8b938f172b1acb694 /calmwm.c
parent77aa5ac45b06b4afa392e21d55e3318913b0347b (diff)
downloadcwm-5121ea5e10bce88d1716f5fc719b4385a26289ff.tar.gz
cwm-5121ea5e10bce88d1716f5fc719b4385a26289ff.tar.xz
cwm-5121ea5e10bce88d1716f5fc719b4385a26289ff.zip
start properly releasing X resources during teardown
Diffstat (limited to 'calmwm.c')
-rw-r--r--calmwm.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/calmwm.c b/calmwm.c
index 9e76d34..5e3825c 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -156,6 +156,25 @@ x_restart(void)
 static void
 x_teardown(void)
 {
+	struct screen_ctx	*sc;
+	unsigned int		 i;
+
+	TAILQ_FOREACH(sc, &Screenq, entry) {
+		for (i = 0; i < CWM_COLOR_NITEMS; i++)
+			XftColorFree(X_Dpy, sc->visual, sc->colormap,
+			    &sc->xftcolor[i]);
+		XftDrawDestroy(sc->xftdraw);
+		XftFontClose(X_Dpy, sc->xftfont);
+		XUnmapWindow(X_Dpy, sc->menuwin);
+		XDestroyWindow(X_Dpy, sc->menuwin);
+		XUngrabKey(X_Dpy, AnyKey, AnyModifier, sc->rootwin);
+	}
+	XUngrabPointer(X_Dpy, CurrentTime);
+	XUngrabKeyboard(X_Dpy, CurrentTime);
+	for (i = 0; i < CF_NITEMS; i++)
+		XFreeCursor(X_Dpy, Conf.cursor[i]);
+	XSync(X_Dpy, False);
+	XSetInputFocus(X_Dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 	XCloseDisplay(X_Dpy);
 }