seoz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=25b72b51bc4b8b18134f14765836be622e52a27c

commit 25b72b51bc4b8b18134f14765836be622e52a27c
Author: Daniel Juyung Seo <juyung....@samsung.com>
Date:   Thu Dec 5 15:53:32 2013 +0900

    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.
---
 src/lib/elm_spinner.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/lib/elm_spinner.c b/src/lib/elm_spinner.c
index e7c881b..79b924b 100644
--- a/src/lib/elm_spinner.c
+++ b/src/lib/elm_spinner.c
@@ -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;

-- 


Reply via email to