raster pushed a commit to branch master.

commit 48e6af5d307e5de2c368114950f44fef5fe349d7
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Thu Jul 18 23:10:34 2013 +0900

    fix self-feedback loop between slider and elm player in slider.
---
 src/lib/elc_player.c        | 23 +++++++----------------
 src/lib/elm_slider.c        | 13 ++++++++++---
 src/lib/elm_widget_player.h |  1 -
 src/lib/elm_widget_slider.h |  1 +
 4 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/src/lib/elc_player.c b/src/lib/elc_player.c
index 5b60a4d..6ec001e 100644
--- a/src/lib/elc_player.c
+++ b/src/lib/elc_player.c
@@ -190,11 +190,9 @@ _update_slider(void *data,
 
    elm_object_disabled_set(sd->slider, !seekable);
    elm_slider_min_max_set(sd->slider, 0, length);
-   if (!sd->dragging)
-     {
-        sd->play_update++;
-        elm_slider_value_set(sd->slider, pos);
-     }
+   if ((elm_slider_value_get(sd->slider) != pos) &&
+       (!sd->dragging))
+     elm_slider_value_set(sd->slider, pos);
 }
 
 static void
@@ -212,14 +210,12 @@ _update_position(void *data,
                  Evas_Object *obj __UNUSED__,
                  void *event_info __UNUSED__)
 {
+   double pos;
    ELM_PLAYER_DATA_GET(data, sd);
 
-   if (sd->play_update > 0)
-     {
-        sd->play_update--;
-        if (sd->play_update >= 0) return;
-     }
-   elm_video_play_position_set(sd->video, elm_slider_value_get(sd->slider));
+   pos = elm_slider_value_get(sd->slider);
+   if (pos != elm_video_play_position_get(sd->video))
+     elm_video_play_position_set(sd->video, pos);
 }
 
 static void
@@ -228,7 +224,6 @@ _drag_start(void *data,
             void *event_info __UNUSED__)
 {
    ELM_PLAYER_DATA_GET(data, sd);
-   sd->play_update = 0;
    sd->dragging = EINA_TRUE;
 }
 
@@ -238,9 +233,7 @@ _drag_stop(void *data,
             void *event_info __UNUSED__)
 {
    ELM_PLAYER_DATA_GET(data, sd);
-   sd->play_update = 0;
    sd->dragging = EINA_FALSE;
-   elm_video_play_position_set(sd->video, elm_slider_value_get(sd->slider));
 }
 
 static void
@@ -507,7 +500,6 @@ _elm_player_smart_content_set(Eo *obj, void *_pd, va_list 
*list)
 
    elm_object_disabled_set(sd->slider, !seekable);
    elm_slider_min_max_set(sd->slider, 0, length);
-   sd->play_update++;
    elm_slider_value_set(sd->slider, pos);
 
    if (elm_video_is_playing_get(sd->video))
@@ -558,7 +550,6 @@ _elm_player_smart_add(Eo *obj, void *_pd, va_list *list 
EINA_UNUSED)
    elm_slider_units_format_function_set
      (priv->slider, _double_to_time, _str_free);
    elm_slider_min_max_set(priv->slider, 0, 0);
-   priv->play_update++;
    elm_slider_value_set(priv->slider, 0);
    elm_object_disabled_set(priv->slider, EINA_TRUE);
    evas_object_size_hint_align_set(priv->slider, EVAS_HINT_FILL, 0.5);
diff --git a/src/lib/elm_slider.c b/src/lib/elm_slider.c
index 733499e..827e342 100644
--- a/src/lib/elm_slider.c
+++ b/src/lib/elm_slider.c
@@ -79,9 +79,12 @@ _val_fetch(Evas_Object *obj)
    if (val != sd->val)
      {
         sd->val = val;
-        evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
-        if (sd->delay) ecore_timer_del(sd->delay);
-        sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, 
_delay_change, obj);
+        if ((ecore_time_get() - sd->set_time) > 0.01)
+          {
+             evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
+             if (sd->delay) ecore_timer_del(sd->delay);
+             sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, 
_delay_change, obj);
+          }
      }
 }
 
@@ -110,6 +113,7 @@ _val_set(Evas_Object *obj)
    Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS);
    edje_object_part_drag_value_set
      (wd->resize_obj, "elm.dragable.slider", pos, pos);
+   sd->set_time = ecore_time_get();
 }
 
 static void
@@ -578,6 +582,7 @@ _spacer_down_cb(void *data,
    edje_object_part_drag_value_set
      (wd->resize_obj, "elm.dragable.slider",
      button_x, button_y);
+   sd->set_time = ecore_time_get();
    _slider_update(data);
    evas_object_smart_callback_call(data, SIG_DRAG_START, NULL);
    elm_layout_signal_emit(data, "elm,state,indicator,show", "elm");
@@ -643,6 +648,7 @@ _spacer_move_cb(void *data,
         edje_object_part_drag_value_set
           (wd->resize_obj, "elm.dragable.slider",
           button_x, button_y);
+        sd->set_time = ecore_time_get();
 
         _slider_update(data);
      }
@@ -814,6 +820,7 @@ _elm_slider_smart_add(Eo *obj, void *_pd, va_list *list 
EINA_UNUSED)
    elm_layout_signal_callback_add(obj, "*", "popup,emit", _popup_emit, obj);
    edje_object_part_drag_value_set
      (wd->resize_obj, "elm.dragable.slider", 0.0, 0.0);
+   priv->set_time = ecore_time_get();
 
    priv->spacer = evas_object_rectangle_add(evas_object_evas_get(obj));
    evas_object_color_set(priv->spacer, 0, 0, 0, 0);
diff --git a/src/lib/elm_widget_player.h b/src/lib/elm_widget_player.h
index 8cb1caa..e4223b5 100644
--- a/src/lib/elm_widget_player.h
+++ b/src/lib/elm_widget_player.h
@@ -34,7 +34,6 @@ struct _Elm_Player_Smart_Data
    Evas_Object          *stop;
    Evas_Object          *slider;
    
-   int                   play_update;
    Eina_Bool             dragging : 1;
 };
 
diff --git a/src/lib/elm_widget_slider.h b/src/lib/elm_widget_slider.h
index c8ff66c..7128716 100644
--- a/src/lib/elm_widget_slider.h
+++ b/src/lib/elm_widget_slider.h
@@ -33,6 +33,7 @@ struct _Elm_Slider_Smart_Data
    void                  (*units_format_free)(char *str);
 
    double                val, val_min, val_max, val2;
+   double                set_time;
    Evas_Coord            size;
    Evas_Coord            downx, downy;
 

-- 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

Reply via email to