From cb6ea9f747be869612fe7915f5380d9300cc5d83 Mon Sep 17 00:00:00 2001 From: Michael Bouchaud Date: Thu, 23 Feb 2017 00:36:17 +0100 Subject: [PATCH] e_client_volume: check volume setted after a slider drag --- src/bin/e_client_volume.c | 15 +++++++++++++++ src/modules/mixer/e_mod_main.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/bin/e_client_volume.c b/src/bin/e_client_volume.c index 3c417656b..187da949d 100644 --- a/src/bin/e_client_volume.c +++ b/src/bin/e_client_volume.c @@ -11,6 +11,7 @@ static void _e_client_volume_event_simple_free(void *d, E_Event_Client *ev); static void _e_client_volume_event_simple(E_Client *ec, int type); static void _e_client_volume_object_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_client_volume_object_volume_changed(void *data, Evas_Object *obj, void *event_info); +static void _e_client_volume_object_volume_drag_stop(void *data, Evas_Object *obj, void *event_info); static Eina_Bool _e_client_volume_object_changed(void *data, int type, void *event); static void _e_client_volume_object_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info); @@ -77,6 +78,16 @@ _e_client_volume_object_volume_changed(void *data, Evas_Object *obj, void *event e_client_volume_set(ec, elm_slider_value_get(obj)); } +static void +_e_client_volume_object_volume_drag_stop(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + E_Client *ec; + + ec = data; + + e_client_volume_set(ec, elm_slider_value_get(obj)); +} + static Eina_Bool _e_client_volume_object_changed(void *data, int type EINA_UNUSED, void *event) { @@ -353,6 +364,7 @@ e_client_volume_set(E_Client *ec, int volume) e_client_volume_sink_set(sink, ec->volume, ec->mute); } + _e_client_volume_update(ec); _e_client_volume_event_simple(ec, E_EVENT_CLIENT_VOLUME); } @@ -423,6 +435,9 @@ e_client_volume_object_add(E_Client *ec, Evas *evas) evas_object_smart_callback_add(o, "changed", _e_client_volume_object_volume_changed, ec); + evas_object_smart_callback_add(o, "slider,drag,stop", + _e_client_volume_object_volume_drag_stop, + ec); elm_slider_value_set(o, ec->volume); edje_object_part_swallow(bx, "e.swallow.volume", o); evas_object_show(o); diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c index d10bfb6af..ac805cce8 100644 --- a/src/modules/mixer/e_mod_main.c +++ b/src/modules/mixer/e_mod_main.c @@ -1049,6 +1049,17 @@ _bd_hook_volume_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUS e_client_volume_set(ec, elm_slider_value_get(obj)); } +static void +_bd_hook_volume_drag_stop(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Client *ec; + + ec = data; + + elm_slider_value_set(obj, ec->volume); +} + + static void _bd_hook_mute_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { @@ -1074,6 +1085,24 @@ _bd_hook_sink_volume_changed(void *data, Evas_Object *obj, void *event_info EINA elm_check_state_get(check)); } +static void +_bd_hook_sink_volume_drag_stop(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + E_Client_Volume_Sink *sink; + Evas_Object *check; + Eina_Bool mute; + int vol; + + sink = data; + + check = evas_object_data_get(obj, "e_sink_check"); + + e_client_volume_sink_get(sink, &vol, &mute); + elm_slider_value_set(obj, vol); + elm_check_state_set(check, mute); +} + + static void _bd_hook_sink_mute_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { @@ -1187,6 +1216,8 @@ _e_client_mixer_sink_append(E_Client_Volume_Sink *sink, Client_Mixer *cm) elm_slider_value_set(slider, volume); evas_object_smart_callback_add(slider, "changed", _bd_hook_sink_volume_changed, sink); + evas_object_smart_callback_add(slider, "slider,drag,stop", + _bd_hook_sink_volume_drag_stop, sink); elm_box_pack_end(cm->bx, slider); evas_object_show(slider); @@ -1379,6 +1410,8 @@ _bd_hook_cb(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *it EINA_UNUSED) evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_slider_value_set(o, ec->volume); evas_object_smart_callback_add(o, "changed", _bd_hook_volume_changed, ec); + evas_object_smart_callback_add(o, "slider,drag,stop", + _bd_hook_volume_drag_stop, ec); elm_box_pack_end(bx, o); evas_object_show(o); cm->volume = o;