cleanup schemes and colors
77f96d70
3 file(s) · +30 −4
| 101 | 101 | size_t i; |
|
| 102 | 102 | ||
| 103 | 103 | XUngrabKeyboard(dpy, CurrentTime); |
|
| 104 | - | for (i = 0; i < SchemeLast; i++) |
|
| 104 | + | for (i = 0; i < SchemeLast; i++) { |
|
| 105 | + | drw_scm_free(drw, scheme[i], 2); |
|
| 105 | 106 | free(scheme[i]); |
|
| 107 | + | } |
|
| 106 | 108 | for (i = 0; items && items[i].text; ++i) |
|
| 107 | 109 | free(items[i].text); |
|
| 108 | 110 | free(items); |
| 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); |