diff --git a/src/bin/e_int_config_fonts.c b/src/bin/e_int_config_fonts.c index 489dd1cfb..3237c24fa 100644 --- a/src/bin/e_int_config_fonts.c +++ b/src/bin/e_int_config_fonts.c @@ -3,6 +3,9 @@ */ #include "e.h" +#define ILIST_ICON_WITH_DEFINED_FONT "enlightenment/e" +#define ILIST_ICON_WITHOUT_DEFINED_FONT "" + typedef struct _E_Text_Class_Pair E_Text_Class_Pair; typedef struct _CFText_Class CFText_Class; @@ -13,9 +16,44 @@ static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Co static void _ilist_font_cb_change(void *data, Evas_Object *obj); static void _enabled_font_cb_change(void *data, Evas_Object *obj); +static void _update_font_class_ilist_icon(void *data); static void _enabled_fallback_cb_change(void *data, Evas_Object *obj); +typedef struct _E_Smart_Item E_Smart_Item; +typedef struct _E_Smart_Data E_Smart_Data; +typedef struct _E_Widget_IList_Data E_Widget_IList_Data; + +struct _E_Widget_IList_Data +{ + Evas_Object *o_widget, *o_scrollframe, *o_ilist; + Evas_List *callbacks; + char **value; +}; + +struct _E_Smart_Data +{ + Evas_Coord x, y, w, h; + + Evas_Object *smart_obj; + Evas_Object *box_obj; + Evas_List *items; + int selected; + Evas_Coord icon_w, icon_h; + unsigned char selector : 1; +}; + +struct _E_Smart_Item +{ + E_Smart_Data *sd; + Evas_Object *base_obj; + Evas_Object *icon_obj; + void (*func) (void *data, void *data2); + void (*func_hilight) (void *data, void *data2); + void *data; + void *data2; +}; + struct _E_Text_Class_Pair { const char *class_name; @@ -282,7 +320,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf { ic = edje_object_add(evas); if (tc->enabled) - e_util_edje_icon_set(ic, "enlightenment/e"); + e_util_edje_icon_set(ic, ILIST_ICON_WITH_DEFINED_FONT); else e_util_edje_icon_set(ic, ""); e_widget_ilist_append(cfdata->gui.class_list, ic, tc->class_description, NULL, NULL, NULL); @@ -442,6 +480,8 @@ _enabled_font_cb_change(void *data, Evas_Object *obj) e_widget_disabled_set(cfdata->gui.font, 1); e_widget_disabled_set(cfdata->gui.size, 1); } + + _update_font_class_ilist_icon(cfdata); } /* Private Font Fallback Functions */ @@ -455,3 +495,50 @@ static void _enabled_fallback_cb_change(void *data, Evas_Object *obj) e_widget_disabled_set(cfdata->gui.fallback_list, !cfdata->cur_fallbacks_enabled); } +/* Just to have nice icon change in fontclass list */ +static void _update_font_class_ilist_icon(void *data) +{ + E_Smart_Item *si; + E_Smart_Data *sd; + E_Widget_IList_Data *wd; + Evas_Object *obj; + + E_Config_Dialog_Data *cfdata; + + if (!(cfdata = data)) + return; + + if (!(wd = e_widget_data_get(cfdata->gui.class_list))) + return; + + obj = wd->o_ilist; + + sd = evas_object_smart_data_get(obj); + + if ((!obj) || (!sd) || + (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), "e_ilist"))) + return; + + si = evas_list_nth(sd->items, sd->selected); + if (si) + { + edje_object_part_unswallow(si->base_obj, si->icon_obj); + evas_object_hide(si->icon_obj); + if (cfdata->cur_enabled) + { + if (si->icon_obj == NULL) + si->icon_obj = edje_object_add(evas_object_evas_get(sd->smart_obj)); + e_util_edje_icon_set(si->icon_obj, ILIST_ICON_WITH_DEFINED_FONT); + } + else + si->icon_obj = NULL; + + if (si->icon_obj) + { + edje_extern_object_min_size_set(si->icon_obj, sd->icon_w, sd->icon_h); + edje_object_part_swallow(si->base_obj, "icon_swallow", si->icon_obj); + evas_object_show(si->icon_obj); + } + } +} +