commit - 74edc27caa65aba9ea8d1fe03d26e3b449f79590
commit + 93f26863d14666e56e992de3670a77178e66ddf2
blob - c41e6aff094243c2c58bccf69283192f3db16939
blob + 98dbaa8304cc6303925ecf384a09cb9076c96349
--- drw.c
+++ drw.c
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)
{
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++)
}
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)
blob - 64714316bd40c003eac6b722ba5256eebaacf010
blob + bda06f9195e47851ac7d4026ecd89ce164acb1e0
--- drw.h
+++ drw.h
/* 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);
blob - 4cf07eb498a9db92c0918505ba0247559850ade4
blob + 21cf8fdc05f530ef7572e419545afcef34e46462
--- dwm.c
+++ dwm.c
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);