diff --git a/src/bin/options_font.c b/src/bin/options_font.c index 05fc932a..1b19af11 100644 --- a/src/bin/options_font.c +++ b/src/bin/options_font.c @@ -26,6 +26,7 @@ typedef struct _Font_Ctx Evas_Object *term; Evas_Object *filter; const char *filter_data; + const char *filter_new_data; Eina_List *fonts; Eina_Hash *fonthash; Config *config; @@ -396,16 +397,41 @@ _cb_font_filter_get(void *data, return EINA_FALSE; } -void +static void _entry_change_cb(void *data, Evas_Object *obj, void *event EINA_UNUSED) { Font_Ctx *ctx = data; + if (ctx->filter_new_data) + eina_stringshare_del(ctx->filter_new_data); + ctx->filter_new_data = NULL; + + ctx->filter_new_data = eina_stringshare_add(elm_object_text_get(obj)); + if (ctx->filter_new_data) + { + ctx->filter_data = ctx->filter_new_data; + ctx->filter_new_data = NULL; + elm_genlist_filter_set(ctx->op_fontlist, (void *)(ctx->filter_data)); + } +} + +static void +_cb_filter_finished(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Font_Ctx *ctx = data; + if (ctx->filter_data) eina_stringshare_del(ctx->filter_data); + ctx->filter_data = NULL; - ctx->filter_data = eina_stringshare_add(elm_object_text_get(obj)); - elm_genlist_filter_set(ctx->op_fontlist, (void *)(ctx->filter_data)); + if (ctx->filter_new_data) + { + ctx->filter_data = ctx->filter_new_data; + ctx->filter_new_data = NULL; + elm_genlist_filter_set(ctx->op_fontlist, (void *)(ctx->filter_data)); + } } static void @@ -433,6 +459,7 @@ _parent_del_cb(void *data, _cb_op_fontsize_sel, ctx); eina_stringshare_del(ctx->filter_data); + eina_stringshare_del(ctx->filter_new_data); free(ctx); } @@ -528,6 +555,7 @@ options_font(Evas_Object *opbox, Evas_Object *term) evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_genlist_mode_set(o, ELM_LIST_COMPRESS); elm_genlist_homogeneous_set(o, EINA_TRUE); + evas_object_smart_callback_add(o, "filter,done", _cb_filter_finished, ctx); /* Bitmaps */ snprintf(buf, sizeof(buf), "%s/fonts", elm_app_data_dir_get());