]> Skullheadx's Git Forge - dwm.git/commitdiff
cleanup schemes and colors
authorHiltjo Posthuma <hiltjo@codemadness.org>
Sat, 27 Sep 2025 10:10:17 +0000 (12:10 +0200)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sat, 27 Sep 2025 10:10:17 +0000 (12:10 +0200)
drw.c
drw.h
dwm.c

diff --git a/drw.c b/drw.c
index c41e6aff094243c2c58bccf69283192f3db16939..98dbaa8304cc6303925ecf384a09cb9076c96349 100644 (file)
--- a/drw.c
+++ b/drw.c
@@ -178,8 +178,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
                die("error, cannot allocate color '%s'", clrname);
 }
 
-/* Wrapper to create color schemes. The caller has to call free(3) on the
- * returned color scheme when done using it. */
+/* Create color schemes. */
 Clr *
 drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
 {
@@ -187,7 +186,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
        Clr *ret;
 
        /* need at least two colors for a scheme */
-       if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
+       if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(Clr))))
                return NULL;
 
        for (i = 0; i < clrcount; i++)
@@ -195,6 +194,29 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
        return ret;
 }
 
+void
+drw_clr_free(Drw *drw, Clr *c)
+{
+       if (!drw || !c)
+               return;
+
+       /* c is typedef XftColor Clr */
+       XftColorFree(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
+                    DefaultColormap(drw->dpy, drw->screen), c);
+}
+
+void
+drw_scm_free(Drw *drw, Clr *scm, size_t clrcount)
+{
+       size_t i;
+
+       if (!drw || !scm)
+               return;
+
+       for (i = 0; i < clrcount; i++)
+               drw_clr_free(drw, &scm[i]);
+}
+
 void
 drw_setfontset(Drw *drw, Fnt *set)
 {
diff --git a/drw.h b/drw.h
index 64714316bd40c003eac6b722ba5256eebaacf010..bda06f9195e47851ac7d4026ecd89ce164acb1e0 100644 (file)
--- a/drw.h
+++ b/drw.h
@@ -40,7 +40,9 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
 
 /* Colorscheme abstraction */
 void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
+void drw_clr_free(Drw *drw, Clr *c);
 Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
+void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount);
 
 /* Cursor abstraction */
 Cur *drw_cur_create(Drw *drw, int shape);
diff --git a/dwm.c b/dwm.c
index 4cf07eb498a9db92c0918505ba0247559850ade4..21cf8fdc05f530ef7572e419545afcef34e46462 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -485,8 +485,10 @@ cleanup(void)
                cleanupmon(mons);
        for (i = 0; i < CurLast; i++)
                drw_cur_free(drw, cursor[i]);
-       for (i = 0; i < LENGTH(colors); i++)
+       for (i = 0; i < LENGTH(colors); i++) {
+               drw_scm_free(drw, scheme[i], 3);
                free(scheme[i]);
+       }
        free(scheme);
        XDestroyWindow(dpy, wmcheckwin);
        drw_free(drw);