cleanup schemes and colors
93f26863
3 file(s) · +30 −4
| 178 | 178 | die("error, cannot allocate color '%s'", clrname); |
|
| 179 | 179 | } |
|
| 180 | 180 | ||
| 181 | - | /* Wrapper to create color schemes. The caller has to call free(3) on the |
|
| 182 | - | * returned color scheme when done using it. */ |
|
| 181 | + | /* Create color schemes. */ |
|
| 183 | 182 | Clr * |
|
| 184 | 183 | drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) |
|
| 185 | 184 | { |
|
| 187 | 186 | Clr *ret; |
|
| 188 | 187 | ||
| 189 | 188 | /* need at least two colors for a scheme */ |
|
| 190 | - | if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor)))) |
|
| 189 | + | if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(Clr)))) |
|
| 191 | 190 | return NULL; |
|
| 192 | 191 | ||
| 193 | 192 | for (i = 0; i < clrcount; i++) |
|
| 194 | 193 | drw_clr_create(drw, &ret[i], clrnames[i]); |
|
| 195 | 194 | return ret; |
|
| 195 | + | } |
|
| 196 | + | ||
| 197 | + | void |
|
| 198 | + | drw_clr_free(Drw *drw, Clr *c) |
|
| 199 | + | { |
|
| 200 | + | if (!drw || !c) |
|
| 201 | + | return; |
|
| 202 | + | ||
| 203 | + | /* c is typedef XftColor Clr */ |
|
| 204 | + | XftColorFree(drw->dpy, DefaultVisual(drw->dpy, drw->screen), |
|
| 205 | + | DefaultColormap(drw->dpy, drw->screen), c); |
|
| 206 | + | } |
|
| 207 | + | ||
| 208 | + | void |
|
| 209 | + | drw_scm_free(Drw *drw, Clr *scm, size_t clrcount) |
|
| 210 | + | { |
|
| 211 | + | size_t i; |
|
| 212 | + | ||
| 213 | + | if (!drw || !scm) |
|
| 214 | + | return; |
|
| 215 | + | ||
| 216 | + | for (i = 0; i < clrcount; i++) |
|
| 217 | + | drw_clr_free(drw, &scm[i]); |
|
| 196 | 218 | } |
|
| 197 | 219 | ||
| 198 | 220 | void |
|
| 40 | 40 | ||
| 41 | 41 | /* Colorscheme abstraction */ |
|
| 42 | 42 | void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); |
|
| 43 | + | void drw_clr_free(Drw *drw, Clr *c); |
|
| 43 | 44 | Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); |
|
| 45 | + | void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount); |
|
| 44 | 46 | ||
| 45 | 47 | /* Cursor abstraction */ |
|
| 46 | 48 | Cur *drw_cur_create(Drw *drw, int shape); |
| 485 | 485 | cleanupmon(mons); |
|
| 486 | 486 | for (i = 0; i < CurLast; i++) |
|
| 487 | 487 | drw_cur_free(drw, cursor[i]); |
|
| 488 | - | for (i = 0; i < LENGTH(colors); i++) |
|
| 488 | + | for (i = 0; i < LENGTH(colors); i++) { |
|
| 489 | + | drw_scm_free(drw, scheme[i], 3); |
|
| 489 | 490 | free(scheme[i]); |
|
| 491 | + | } |
|
| 490 | 492 | free(scheme); |
|
| 491 | 493 | XDestroyWindow(dpy, wmcheckwin); |
|
| 492 | 494 | drw_free(drw); |