aboutsummaryrefslogtreecommitdiff
path: root/dmenu/drw.c
diff options
context:
space:
mode:
Diffstat (limited to 'dmenu/drw.c')
-rw-r--r--dmenu/drw.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/dmenu/drw.c b/dmenu/drw.c
index f258a41..c88f43d 100644
--- a/dmenu/drw.c
+++ b/dmenu/drw.c
@@ -182,8 +182,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
dest->pixel = (dest->pixel & 0x00FFFFFFU) | (alpha << 24);
}
-/* 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[], const unsigned int alphas[], size_t clrcount)
{
@@ -191,7 +190,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], si
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++)
@@ -200,6 +199,30 @@ drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], si
}
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]);
+ free(scm);
+}
+
+void
drw_setfontset(Drw *drw, Fnt *set)
{
if (drw)