spinner: Create an internal entry when it is really needed.

Do not create the internal entry on smart add. Create that when it is
needed with editable mode.
This commit is contained in:
Daniel Juyung Seo 2014-01-21 22:12:53 +09:00
parent 8253767035
commit 5d45fc195f
1 changed files with 30 additions and 27 deletions

View File

@ -258,24 +258,46 @@ _entry_value_apply(Evas_Object *obj)
}
static void
_entry_toggle_cb(void *data,
Evas_Object *obj EINA_UNUSED,
_entry_activated_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
ELM_SPINNER_DATA_GET(data, sd);
_entry_value_apply(data);
evas_object_smart_callback_call(data, SIG_CHANGED, NULL);
if (sd->delay_timer) ecore_timer_del(sd->delay_timer);
sd->delay_timer = ecore_timer_add(0.2, _delay_change, data);
}
static void
_entry_toggle_cb(void *data EINA_UNUSED,
Evas_Object *obj,
const char *emission EINA_UNUSED,
const char *source EINA_UNUSED)
{
ELM_SPINNER_DATA_GET(data, sd);
ELM_SPINNER_DATA_GET(obj, sd);
if (sd->dragging)
{
sd->dragging = 0;
return;
}
if (elm_widget_disabled_get(data)) return;
if (elm_widget_disabled_get(obj)) return;
if (!sd->editable) return;
if (sd->entry_visible) _entry_value_apply(data);
if (sd->entry_visible) _entry_value_apply(obj);
else
{
elm_layout_signal_emit(data, "elm,state,active", "elm");
if (!sd->ent)
{
sd->ent = elm_entry_add(obj);
elm_entry_single_line_set(sd->ent, EINA_TRUE);
evas_object_smart_callback_add
(sd->ent, "activated", _entry_activated_cb, obj);
elm_layout_content_set(obj, "elm.swallow.entry", sd->ent);
}
elm_layout_signal_emit(obj, "elm,state,active", "elm");
_entry_show(sd);
elm_entry_select_all(sd->ent);
elm_widget_focus_set(sd->ent, EINA_TRUE);
@ -401,19 +423,6 @@ _button_dec_stop_cb(void *data,
_val_dec_stop(data);
}
static void
_entry_activated_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
ELM_SPINNER_DATA_GET(data, sd);
_entry_value_apply(data);
evas_object_smart_callback_call(data, SIG_CHANGED, NULL);
if (sd->delay_timer) ecore_timer_del(sd->delay_timer);
sd->delay_timer = ecore_timer_add(0.2, _delay_change, data);
}
static void
_elm_spinner_smart_sizing_eval(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
{
@ -482,7 +491,7 @@ _elm_spinner_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
(!strcmp(ev->key, "KP_Enter")) ||
(!strcmp(ev->key, "space")))
{
_entry_toggle_cb(obj, NULL, NULL, NULL);
_entry_toggle_cb(NULL, obj, NULL, NULL);
}
}
else if (type == EVAS_CALLBACK_KEY_UP)
@ -710,14 +719,8 @@ _elm_spinner_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
edje_object_part_drag_value_set
(wd->resize_obj, "elm.dragable.slider", 0.0, 0.0);
priv->ent = elm_entry_add(obj);
elm_entry_single_line_set(priv->ent, EINA_TRUE);
evas_object_smart_callback_add
(priv->ent, "activated", _entry_activated_cb, obj);
elm_layout_content_set(obj, "elm.swallow.entry", priv->ent);
elm_layout_signal_callback_add
(obj, "elm,action,entry,toggle", "*", _entry_toggle_cb, obj);
(obj, "elm,action,entry,toggle", "*", _entry_toggle_cb, NULL);
_label_write(obj);
elm_widget_can_focus_set(obj, EINA_TRUE);