raster pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=617cf8859f0f1fec5ea60fefef446b4454815554
commit 617cf8859f0f1fec5ea60fefef446b4454815554 Author: Shilpa Singh <shilpa.si...@samsung.com> Date: Sat Nov 2 20:33:00 2013 +0900 Elm_Spinner: UI Concept change fix. Older UI concept: when text in spinner's entry is inputted and text is not committed yet and when inc/dec is clicked. do not commit text and reset the value to older original value. New UI concept: When Text in spinner's entry is inputted and text is not committed yet and when inc/dec buttons are clicked. Commit the entry's text and inc/dec accordingly. If entry' s text is already modified owing to min/max update, then do not inc/dec. Signed-off by: Shilpa Singh <shilpa.si...@samsung.com> --- src/lib/elm_spinner.c | 32 ++++++++++++++++---------------- src/lib/elm_widget_spinner.h | 3 ++- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/lib/elm_spinner.c b/src/lib/elm_spinner.c index fad85fa..a686abd 100644 --- a/src/lib/elm_spinner.c +++ b/src/lib/elm_spinner.c @@ -238,15 +238,6 @@ _entry_hide(Evas_Object *obj) } static void -_reset_value(Evas_Object *obj) -{ - ELM_SPINNER_DATA_GET(obj, sd); - - _entry_hide(obj); - elm_spinner_value_set(obj, sd->orig_val); -} - -static void _entry_value_apply(Evas_Object *obj) { const char *str; @@ -283,7 +274,6 @@ _entry_toggle_cb(void *data, if (sd->entry_visible) _entry_value_apply(data); else { - sd->orig_val = sd->val; elm_layout_signal_emit(data, "elm,state,active", "elm"); _entry_show(sd); elm_entry_select_all(sd->ent); @@ -358,7 +348,7 @@ _val_dec_stop(Evas_Object *obj) static void _button_inc_start_cb(void *data, - Evas_Object *obj __UNUSED__, + Evas_Object *obj, const char *emission __UNUSED__, const char *source __UNUSED__) { @@ -366,7 +356,8 @@ _button_inc_start_cb(void *data, if (sd->entry_visible) { - _reset_value(data); + _entry_value_apply(obj); + if ((sd->val_updated) && (sd->val == sd->val_min)) return; return; } _val_inc_start(data); @@ -391,8 +382,8 @@ _button_dec_start_cb(void *data, if (sd->entry_visible) { - _reset_value(data); - return; + _entry_value_apply(obj); + if ((sd->val_updated) && (sd->val == sd->val_max)) return; } _val_dec_start(data); } @@ -979,8 +970,17 @@ _elm_spinner_value_set(Eo *obj, void *_pd, va_list *list) if (sd->val == val) return; sd->val = val; - if (sd->val < sd->val_min) sd->val = sd->val_min; - if (sd->val > sd->val_max) sd->val = sd->val_max; + sd->val_updated = EINA_FALSE; + if (sd->val < sd->val_min) + { + sd->val = sd->val_min; + sd->val_updated = EINA_TRUE; + } + if (sd->val > sd->val_max) + { + sd->val = sd->val_max; + sd->val_updated = EINA_TRUE; + } _val_set(obj); _label_write(obj); } diff --git a/src/lib/elm_widget_spinner.h b/src/lib/elm_widget_spinner.h index 119771d..4c39f2c 100644 --- a/src/lib/elm_widget_spinner.h +++ b/src/lib/elm_widget_spinner.h @@ -26,7 +26,7 @@ struct _Elm_Spinner_Smart_Data { Evas_Object *ent; const char *label; - double val, val_min, val_max, orig_val, val_base; + double val, val_min, val_max, val_base; double step; // step for the value change. 1 by default. double drag_start_val; // spinner value on drag start. // this is reset to 0 when drag stops. @@ -39,6 +39,7 @@ struct _Elm_Spinner_Smart_Data Eina_Bool dragging : 1; Eina_Bool editable : 1; Eina_Bool wrap : 1; + Eina_Bool val_updated : 1; }; typedef struct _Elm_Spinner_Special_Value Elm_Spinner_Special_Value; --