datetime: Enhance launching time of test_datetime by avoiding _reload_format() in...
authorRyuan Choi <ryuan.choi@gmail.com>
Wed, 5 Feb 2014 16:02:39 +0000 (01:02 +0900)
committerRyuan Choi <ryuan.choi@gmail.com>
Wed, 5 Feb 2014 16:14:39 +0000 (01:14 +0900)
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().

src/lib/elm_datetime.c

index e47188b..6100b1c 100644 (file)
@@ -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