From ce7d37ad90faf67181fe96b7fc1f9e807df15787 Mon Sep 17 00:00:00 2001 From: Ryuan Choi Date: Thu, 6 Feb 2014 01:02:39 +0900 Subject: [PATCH] datetime: Enhance launching time of test_datetime by avoiding _reload_format() in visible_set() visible_set() only changes the visibility of one field while _reload_format() changes everything. This patch makes visible_set() just change only related field when only it's state is really changd(enabled <-> disabled) instead of calling _reload_format(). --- legacy/elementary/src/lib/elm_datetime.c | 44 +++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/legacy/elementary/src/lib/elm_datetime.c b/legacy/elementary/src/lib/elm_datetime.c index e47188bd82..6100b1cccf 100644 --- a/legacy/elementary/src/lib/elm_datetime.c +++ b/legacy/elementary/src/lib/elm_datetime.c @@ -982,6 +982,7 @@ _field_visible_set(Eo *obj, void *_pd, va_list *list) { Elm_Datetime_Field_Type fieldtype = va_arg(*list, Elm_Datetime_Field_Type); Eina_Bool visible = va_arg(*list, int); + char buf[BUFFER_SIZE]; Datetime_Field *field; Elm_Datetime_Smart_Data *sd = _pd; @@ -989,10 +990,51 @@ _field_visible_set(Eo *obj, void *_pd, va_list *list) if (fieldtype > ELM_DATETIME_AMPM) return; field = sd->field_list + fieldtype; + visible = !!visible; if (field->visible == visible) return; field->visible = visible; - _reload_format(obj); + + if (visible) + { + sd->enabled_field_count++; + + if (!field->fmt_exist) return; + + snprintf(buf, sizeof(buf), EDC_PART_FIELD_ENABLE_SIG_STR, + field->location); + elm_layout_signal_emit(obj, buf, "elm"); + + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + edje_object_message_signal_process(wd->resize_obj); + + snprintf(buf, sizeof(buf), EDC_PART_FIELD_STR, field->location); + elm_layout_content_unset(obj, buf); + elm_layout_content_set(obj, buf, field->item_obj); + } + else + { + sd->enabled_field_count--; + + if (!field->fmt_exist) return; + + snprintf(buf, sizeof(buf), EDC_PART_FIELD_DISABLE_SIG_STR, + field->location); + elm_layout_signal_emit(obj, buf, "elm"); + + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + edje_object_message_signal_process(wd->resize_obj); + + snprintf(buf, sizeof(buf), EDC_PART_FIELD_STR, field->location); + evas_object_hide(elm_layout_content_unset(obj, buf)); + } + + elm_layout_sizing_eval(obj); + + if (!visible) return; + if (!dt_mod || !dt_mod->field_value_display) return; + + dt_mod->field_value_display(sd->mod_data, field->item_obj); } EAPI void