}
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;
if (!sd->editable) return;
if (sd->entry_visible) _entry_value_apply(data);
else
- {
- sd->orig_val = sd->val;
- elm_layout_signal_emit(data, "elm,state,active", "elm");
- }
+ elm_layout_signal_emit(data, "elm,state,active", "elm");
}
static void
{
ELM_SPINNER_DATA_GET(data, sd);
+ /* FIXME: When entry is still visible and inc button is clicked
+ * commit entry text and then increment the committed text */
if (sd->entry_visible)
{
- _reset_value(data);
- return;
+ _entry_value_apply(obj);
+ if ((sd->val_updated) && (sd->val == sd->val_min)) return;
}
_val_inc_start(data);
}
const char *source __UNUSED__)
{
ELM_SPINNER_DATA_GET(data, sd);
-
+ /* FIXME: When entry is still visible and inc button is clicked
+ * commit entry text and then increment the committed text */
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);
}
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);
evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
Evas_Object *ent;
const char *label;
- double val, val_min, val_max, orig_val, step, val_base;
+ double val, val_min, val_max, step, val_base;
double drag_start_pos, spin_speed, interval, first_interval;
int round;
Ecore_Timer *delay, *spin;
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;