diff --git a/src/bin/main.c b/src/bin/main.c index 1dc85a78..bcb5d86a 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -96,6 +96,39 @@ static Term *main_term_new(Win *wn, Config *config, const char *cmd, Eina_Bool l static void _term_focus(Term *term); static void _sel_restore(Split *sp); +static Win * +_win_find(Evas_Object *win) +{ + Win *wn; + Eina_List *l; + + EINA_LIST_FOREACH(wins, l, wn) + { + if (wn->win == win) return wn; + } + return NULL; +} + +void change_theme(Evas_Object *win, Config *config) +{ + Win *wn; + Eina_List *l; + Term *term; + + wn = _win_find(win); + if (!wn) return; + + EINA_LIST_FOREACH(wn->terms, l, term) + { + Evas_Object *edje = termio_theme_get(term->term); + + if (!theme_apply(edje, config, "terminology/background")) + ERR("Couldn't find terminology theme!"); + colors_term_init(termio_textgrid_get(term->term), edje); + termio_config_set(term->term, config); + } +} + static void _split_free(Split *sp) { diff --git a/src/bin/main.h b/src/bin/main.h index fdb7eb73..c91dc07b 100644 --- a/src/bin/main.h +++ b/src/bin/main.h @@ -13,4 +13,6 @@ void main_media_update(const Config *config); void main_media_mute_update(const Config *config); void main_config_sync(const Config *config); +void change_theme(Evas_Object *win, Config *config); + #endif diff --git a/src/bin/options_theme.c b/src/bin/options_theme.c index dddda4ca..49ab86bc 100644 --- a/src/bin/options_theme.c +++ b/src/bin/options_theme.c @@ -6,6 +6,7 @@ #include "options.h" #include "options_theme.h" #include "utils.h" +#include "main.h" static Evas_Object *op_themelist; @@ -71,6 +72,7 @@ _cb_op_theme_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUS ERR("Couldn't find terminology theme!"); colors_term_init(termio_textgrid_get(t->term), edje); termio_config_set(t->term, config); + change_theme(termio_win_get(t->term), config); } static int