From 3bcb50c61b969f3c7abe008a09128928b0d7832f Mon Sep 17 00:00:00 2001 From: Daniel Juyung Seo Date: Thu, 24 Jan 2013 12:22:02 +0000 Subject: [PATCH] elm diskselector: Refactoring. Use ecore_idle_enterer properly. 1. Idle enterer is deleted when ECORE_CALLBACK_CANCEL is returned. So calling the idle enterer callback directly from the code needs more considerations. 2. Used better variable names and added more comment. 3. Diskselector needs much more love. SVN revision: 83298 --- legacy/elementary/src/lib/elm_diskselector.c | 43 ++++++++++++++----- .../src/lib/elm_widget_diskselector.h | 2 +- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/legacy/elementary/src/lib/elm_diskselector.c b/legacy/elementary/src/lib/elm_diskselector.c index 32f5afcfcd..d5fa0ebe22 100644 --- a/legacy/elementary/src/lib/elm_diskselector.c +++ b/legacy/elementary/src/lib/elm_diskselector.c @@ -112,7 +112,7 @@ _item_signal_emit(Elm_Diskselector_Item *item) } static Eina_Bool -_string_check(void *data) +_string_check_idle_enterer_cb(void *data) { Evas_Object *obj = data; ELM_DISKSELECTOR_DATA_GET(obj, sd); @@ -126,10 +126,16 @@ _string_check(void *data) evas_object_geometry_get(obj, &ox, NULL, &ow, NULL); if (ow <= 0) - return EINA_FALSE; + { + sd->string_check_idle_enterer = NULL; + return ECORE_CALLBACK_CANCEL; + } if (!sd->init) - return EINA_FALSE; + { + sd->string_check_idle_enterer = NULL; + return ECORE_CALLBACK_CANCEL; + } if (!sd->round) list = sd->items; @@ -188,12 +194,25 @@ _string_check(void *data) edje_object_part_text_escaped_set(VIEW(it), "elm.text", buf); } - if (sd->check_idler) - ecore_idle_enterer_del(sd->check_idler); + sd->string_check_idle_enterer = NULL; - sd->check_idler = NULL; + return ECORE_CALLBACK_CANCEL; +} - return EINA_FALSE; +static void +_string_check(void *data) +{ + Evas_Object *obj = data; + ELM_DISKSELECTOR_DATA_GET(obj, sd); + + if (sd->string_check_idle_enterer) + { + ecore_idle_enterer_del(sd->string_check_idle_enterer); + sd->string_check_idle_enterer = NULL; + } + + // call string check idle enterer directly + _string_check_idle_enterer_cb(data); } static Eina_Bool @@ -403,7 +422,9 @@ _item_del_pre_hook(Elm_Object_Item *it) } } - sd->check_idler = ecore_idle_enterer_before_add(_string_check, obj); + sd->string_check_idle_enterer = + ecore_idle_enterer_before_add(_string_check_idle_enterer_cb, + obj); _sizing_eval(obj); @@ -1384,10 +1405,10 @@ _elm_diskselector_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) sd->scroller_move_idle_enterer = NULL; } - if (sd->check_idler) + if (sd->string_check_idle_enterer) { - ecore_idle_enterer_del(sd->check_idler); - sd->check_idler = NULL; + ecore_idle_enterer_del(sd->string_check_idle_enterer); + sd->string_check_idle_enterer = NULL; } eo_do_super(obj, evas_obj_smart_del()); diff --git a/legacy/elementary/src/lib/elm_widget_diskselector.h b/legacy/elementary/src/lib/elm_widget_diskselector.h index 273ca199ee..c5a9efcb42 100644 --- a/legacy/elementary/src/lib/elm_widget_diskselector.h +++ b/legacy/elementary/src/lib/elm_widget_diskselector.h @@ -37,7 +37,7 @@ struct _Elm_Diskselector_Smart_Data Eina_List *left_blanks; Eina_List *right_blanks; Ecore_Idle_Enterer *scroller_move_idle_enterer; // idle enterer for scroller move - Ecore_Idle_Enterer *check_idler; + Ecore_Idle_Enterer *string_check_idle_enterer; // idle enterer for string check int item_count, len_threshold, len_side, display_item_num;