| cleanup schemes and colors - dmenu - dynamic menu | |
| git clone git://git.suckless.org/dmenu | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 77f96d704bd16b04fe731da815a4e76c4e62decb | |
| parent d893c63cdd927c33b9b8c9bc52aaa284199a650a | |
| Author: Hiltjo Posthuma <[email protected]> | |
| Date: Sat, 27 Sep 2025 12:10:37 +0200 | |
| cleanup schemes and colors | |
| Diffstat: | |
| M dmenu.c | 4 +++- | |
| M drw.c | 28 +++++++++++++++++++++++++--- | |
| M drw.h | 2 ++ | |
| 3 files changed, 30 insertions(+), 4 deletions(-) | |
| --- | |
| diff --git a/dmenu.c b/dmenu.c | |
| @@ -101,8 +101,10 @@ cleanup(void) | |
| size_t i; | |
| XUngrabKeyboard(dpy, CurrentTime); | |
| - for (i = 0; i < SchemeLast; i++) | |
| + for (i = 0; i < SchemeLast; i++) { | |
| + drw_scm_free(drw, scheme[i], 2); | |
| free(scheme[i]); | |
| + } | |
| for (i = 0; items && items[i].text; ++i) | |
| free(items[i].text); | |
| free(items); | |
| diff --git 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 clr… | |
| Clr *ret; | |
| /* need at least two colors for a scheme */ | |
| - if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, siz… | |
| + if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, siz… | |
| return NULL; | |
| for (i = 0; i < clrcount; i++) | |
| @@ -196,6 +195,29 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t cl… | |
| } | |
| 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) | |
| { | |
| if (drw) | |
| diff --git a/drw.h b/drw.h | |
| @@ -40,7 +40,9 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned i… | |
| /* 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); |