summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyuan Choi <ryuan.choi@gmail.com>2014-03-05 23:52:53 +0900
committerRyuan Choi <ryuan.choi@gmail.com>2014-03-06 00:23:37 +0900
commitea9a029ca3bba2c3bcadfaaa98ff6a36fdeb0ec1 (patch)
treefe1d020e137548fdbac2cb329bceb18ce273b540
parent8e20785b6b3a52e4654d8de98dbb46141a857ff3 (diff)
downloadelementary-ea9a029ca3bba2c3bcadfaaa98ff6a36fdeb0ec1.tar.gz
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.
-rw-r--r--src/lib/elm_datetime.c10
-rw-r--r--src/lib/elm_widget_datetime.h2
2 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/elm_datetime.c b/src/lib/elm_datetime.c
index f5df6bd21..38a68aea0 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 58e25ff67..12bdd6d65 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