bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=eed35d3c4f77f48b6bdb46611e4bba4cabb08c41

commit eed35d3c4f77f48b6bdb46611e4bba4cabb08c41
Author: Marcel Hollerbach <marcel-hollerb...@t-online.de>
Date:   Wed Sep 14 10:20:56 2016 +0200

    mixer: lock up the slider for the case a drag is in progress
    
    if you click on the slider in the gadget the slider jumps a back to the
    old volume and then to the new volume, this is because a pulseaudio
    update is sent while the last changed event was called, but not the
    drag_stop callback.
---
 src/modules/mixer/e_mod_main.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c
index db7a1d7..970c1ab 100644
--- a/src/modules/mixer/e_mod_main.c
+++ b/src/modules/mixer/e_mod_main.c
@@ -127,7 +127,8 @@ static void
 _mixer_popup_update(Instance *inst, int mute, int vol)
 {
    elm_check_state_set(inst->check, !!mute);
-   elm_slider_value_set(inst->slider, vol);
+   if (!evas_object_data_del(inst->slider, "__lock"))
+     elm_slider_value_set(inst->slider, vol);
 }
 
 static void _popup_del(Instance *inst);
@@ -399,6 +400,14 @@ _slider_drag_stop_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
    Emix_Sink *s = (Emix_Sink *)mixer_context->sink_default;
    int val = s->volume.volumes[0];
    elm_slider_value_set(obj, val);
+   evas_object_data_del(obj, "__lock");
+}
+
+static void
+_slider_drag_start_cb(void *data EINA_UNUSED, Evas_Object *obj,
+                     void *event EINA_UNUSED)
+{
+   evas_object_data_set(obj, "__lock", (void*)1);
 }
 
 static void
@@ -466,6 +475,7 @@ _popup_new(Instance *inst)
    elm_slider_min_max_set(slider, 0.0, emix_max_volume_get());
    evas_object_smart_callback_add(slider, "changed", _slider_changed_cb, NULL);
    evas_object_smart_callback_add(slider, "slider,drag,stop", 
_slider_drag_stop_cb, NULL);
+   evas_object_smart_callback_add(slider, "slider,drag,start", 
_slider_drag_start_cb, NULL);
    elm_slider_value_set(slider, volume);
    elm_box_pack_end(bx, slider);
    evas_object_show(slider);

-- 


Reply via email to