diff --git a/include/theme/theme.h b/include/theme/theme.h index 09d6955b..1287c3cf 100644 --- a/include/theme/theme.h +++ b/include/theme/theme.h @@ -42,7 +42,7 @@ void parse_hexstr(const char *hex, float *rgba); /** * theme_init - read openbox theme and generate button textures - * @theme: global theme struct + * @theme: theme data * @renderer: wlr_renderer for creating button textures * @theme_name: theme-name in //openbox-3/themerc * Note is obtained in theme-dir.c @@ -50,6 +50,12 @@ void parse_hexstr(const char *hex, float *rgba); void theme_init(struct theme *theme, struct wlr_renderer *renderer, const char *theme_name); +/** + * theme_finish - free button textures + * @theme: theme data + */ +void theme_finish(struct theme *theme); + /** * theme_builin - apply built-in theme similar to Clearlooks * Note: Only used if no theme can be found. Default values for individual diff --git a/src/main.c b/src/main.c index 60675941..35d16671 100644 --- a/src/main.c +++ b/src/main.c @@ -90,8 +90,10 @@ main(int argc, char *argv[]) wl_display_run(server.wl_display); server_finish(&server); + + menu_finish(&rootmenu); + theme_finish(&theme); rcxml_finish(); - menu_finish(server.rootmenu); font_finish(); return 0; } diff --git a/src/server.c b/src/server.c index 83df7ff8..7bd1da75 100644 --- a/src/server.c +++ b/src/server.c @@ -27,6 +27,7 @@ reload_config_and_theme(void) /* TODO: use rc.config_path */ rcxml_finish(); rcxml_read(NULL); + theme_finish(g_server->theme); theme_init(g_server->theme, g_server->renderer, rc.theme_name); menu_reconfigure(g_server, g_server->rootmenu); damage_all_outputs(g_server); diff --git a/src/theme/theme.c b/src/theme/theme.c index 05f837f4..ddf393bc 100644 --- a/src/theme/theme.c +++ b/src/theme/theme.c @@ -9,6 +9,7 @@ #include "common/dir.h" #include "common/log.h" #include "common/string-helpers.h" +#include "common/zfree.h" #include "theme/theme.h" #include "xbm/xbm.h" @@ -135,3 +136,14 @@ theme_init(struct theme *theme, struct wlr_renderer *renderer, theme_read(theme, theme_name); xbm_load(theme, renderer); } + +void +theme_finish(struct theme *theme) +{ + zfree(theme->xbm_close_active_unpressed); + zfree(theme->xbm_maximize_active_unpressed); + zfree(theme->xbm_iconify_active_unpressed); + zfree(theme->xbm_close_inactive_unpressed); + zfree(theme->xbm_maximize_inactive_unpressed); + zfree(theme->xbm_iconify_inactive_unpressed); +}