elm_spinner.c: fix mouse spin never stop issue with mouse wheel with spinner widget.

Do not use a timer when the wheel is used to spin the spinner.
This fixes T604.
Special thanks JP for reporting.
This commit is contained in:
Daniel Juyung Seo 2013-12-05 15:53:32 +09:00
parent 0a60e7b575
commit dd4c8afac0
1 changed files with 9 additions and 4 deletions

View File

@ -297,7 +297,10 @@ _spin_value(void *data)
}
sd->interval = sd->interval / 1.05;
ecore_timer_interval_set(sd->spin_timer, sd->interval);
// spin_timer does not exist when _spin_value() is called from wheel event
if (sd->spin_timer)
ecore_timer_interval_set(sd->spin_timer, sd->interval);
if (_value_set(data, sd->val + real_speed)) _label_write(data);
return ECORE_CALLBACK_RENEW;
@ -428,13 +431,13 @@ _elm_spinner_smart_sizing_eval(Eo *obj, void *_pd EINA_UNUSED, va_list *list EIN
static void
_elm_spinner_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
Evas_Object *src = va_arg(*list, Evas_Object *);
Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type);
void *event_info = va_arg(*list, void *);
Evas_Event_Key_Down *ev = event_info;
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Evas_Event_Mouse_Wheel *mev;
ELM_SPINNER_DATA_GET(obj, sd);
if (ret) *ret = EINA_FALSE;
(void) src;
@ -495,16 +498,18 @@ _elm_spinner_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
else if (type == EVAS_CALLBACK_MOUSE_WHEEL)
{
mev = event_info;
sd->interval = sd->first_interval;
if (mev->z < 0)
{
_val_inc_start(obj);
sd->spin_speed = sd->step;
elm_layout_signal_emit(obj, "elm,right,anim,activate", "elm");
}
else
{
_val_dec_start(obj);
sd->spin_speed = -sd->step;
elm_layout_signal_emit(obj, "elm,left,anim,activate", "elm");
}
_spin_value(obj);
}
return;