elm_spinner.c: fix mouse spin never stop issue with mouse wheel with spinner widget.
authorDaniel Juyung Seo <juyung.seo@samsung.com>
Thu, 5 Dec 2013 06:53:32 +0000 (15:53 +0900)
committerDaniel Juyung Seo <juyung.seo@samsung.com>
Thu, 5 Dec 2013 06:53:32 +0000 (15:53 +0900)
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

index e7c881b4abe2204f135f7562602eac3174d4cd0c..79b924b3ebca0fb8eccd94e448f3c167673d3ccf 100644 (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;