ryuan pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=ea9a029ca3bba2c3bcadfaaa98ff6a36fdeb0ec1

commit ea9a029ca3bba2c3bcadfaaa98ff6a36fdeb0ec1
Author: Ryuan Choi <[email protected]>
Date:   Wed Mar 5 23:52:53 2014 +0900

    datetime : Enhance launching time more by reducing calls of sizing_eval()
    
    elm_layout_content_set() calls elm_layout_sizing_eval() internally.
    So, there are many calls in _field_list_arrange() and it takes long time.
---
 src/lib/elm_datetime.c        | 10 ++++++++++
 src/lib/elm_widget_datetime.h |  2 ++
 2 files changed, 12 insertions(+)

diff --git a/src/lib/elm_datetime.c b/src/lib/elm_datetime.c
index f5df6bd..38a68ae 100644
--- a/src/lib/elm_datetime.c
+++ b/src/lib/elm_datetime.c
@@ -217,9 +217,12 @@ _field_list_arrange(Evas_Object *obj)
    Datetime_Field *field;
    char buf[BUFFER_SIZE];
    int idx;
+   Eina_Bool freeze;
 
    ELM_DATETIME_DATA_GET(obj, sd);
 
+   freeze = sd->freeze_sizing;
+   sd->freeze_sizing = EINA_TRUE;
    for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
      {
         field = sd->field_list + idx;
@@ -233,6 +236,7 @@ _field_list_arrange(Evas_Object *obj)
         else
           evas_object_hide(elm_layout_content_unset(obj, buf));
      }
+   sd->freeze_sizing = freeze;
 
    elm_layout_sizing_eval(obj);
    _field_list_display(obj);
@@ -502,6 +506,8 @@ _elm_datetime_smart_sizing_eval(Eo *obj, void *_pd, va_list 
*list EINA_UNUSED)
    Evas_Coord minw = -1, minh = -1;
 
    Elm_Datetime_Smart_Data *sd = _pd;
+   if (sd->freeze_sizing) return;
+
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
 
    if (sd->enabled_field_count)
@@ -829,6 +835,7 @@ _elm_datetime_smart_add(Eo *obj, void *_pd, va_list *list 
EINA_UNUSED)
           }
      }
 
+   priv->freeze_sizing = EINA_TRUE;
    if (!elm_layout_theme_set(obj, "datetime", "base",
                              elm_widget_style_get(obj)))
      CRI("Failed to set layout!");
@@ -838,6 +845,7 @@ _elm_datetime_smart_add(Eo *obj, void *_pd, va_list *list 
EINA_UNUSED)
 
    elm_widget_can_focus_set(obj, EINA_TRUE);
 
+   priv->freeze_sizing = EINA_FALSE;
    elm_layout_sizing_eval(obj);
 
    // ACCESS
@@ -992,6 +1000,7 @@ _field_visible_set(Eo *obj, void *_pd, va_list *list)
 
    field->visible = visible;
 
+   sd->freeze_sizing = EINA_TRUE;
    if (visible)
      {
         sd->enabled_field_count++;
@@ -1025,6 +1034,7 @@ _field_visible_set(Eo *obj, void *_pd, va_list *list)
         snprintf(buf, sizeof(buf), EDC_PART_FIELD_STR, field->location);
         evas_object_hide(elm_layout_content_unset(obj, buf));
      }
+   sd->freeze_sizing = EINA_FALSE;
 
    elm_layout_sizing_eval(obj);
 
diff --git a/src/lib/elm_widget_datetime.h b/src/lib/elm_widget_datetime.h
index 58e25ff..12bdd6d 100644
--- a/src/lib/elm_widget_datetime.h
+++ b/src/lib/elm_widget_datetime.h
@@ -65,6 +65,8 @@ struct _Elm_Datetime_Smart_Data
    Eina_Bool                 user_format : 1;  /* whether user set
                                                 * format or default
                                                 * format. */
+   Eina_Bool                 freeze_sizing : 1; /* freeze sizing_eval to
+                                                 * reduce unnecessary sizing */
 };
 
 struct _Format_Map

-- 


Reply via email to