From 0b881c34786b166dd225de19e75b9ebd9f58a709 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 18 Jul 2013 17:19:13 +0900 Subject: [PATCH] elm_player: now really dont self-event-feed on user drag + chg slider. --- legacy/elementary/src/lib/elc_player.c | 54 ++++++++++--------- legacy/elementary/src/lib/elm_widget_player.h | 3 +- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/legacy/elementary/src/lib/elc_player.c b/legacy/elementary/src/lib/elc_player.c index 52e5a6ea08..57457618f5 100644 --- a/legacy/elementary/src/lib/elc_player.c +++ b/legacy/elementary/src/lib/elc_player.c @@ -25,6 +25,18 @@ static const char SIG_PLAY_CLICKED[] = "play,clicked"; static const char SIG_PREV_CLICKED[] = "prev,clicked"; static const char SIG_REWIND_CLICKED[] = "rewind,clicked"; static const char SIG_STOP_CLICKED[] = "stop,clicked"; +/* XXX: other things player SHOULD support +static const char SIG_STOP_CLICKED[] = "repeat,clicked"; +static const char SIG_STOP_CLICKED[] = "shuffle,clicked"; +static const char SIG_STOP_CLICKED[] = "eject,clicked"; +static const char SIG_STOP_CLICKED[] = "record,clicked"; +static const char SIG_STOP_CLICKED[] = "eject,clicked"; +static const char SIG_STOP_CLICKED[] = "replay,clicked"; +static const char SIG_STOP_CLICKED[] = "power,clicked"; +static const char SIG_STOP_CLICKED[] = "volume,clicked"; +static const char SIG_STOP_CLICKED[] = "eject,clicked"; +static const char SIG_STOP_CLICKED[] = "mute,clicked"; + */ static const Evas_Smart_Cb_Description _smart_callbacks[] = { { SIG_FORWARD_CLICKED, "" }, @@ -71,6 +83,7 @@ _elm_player_smart_event(Eo *obj, void *_pd, va_list *list) if (current < last) { current -= last / 100; + printf("SET0: %3.3f\n", current); elm_video_play_position_set(sd->video, current); } @@ -176,19 +189,11 @@ _update_slider(void *data, elm_object_disabled_set(sd->slider, !seekable); elm_slider_min_max_set(sd->slider, 0, length); - if (!sd->dragging) elm_slider_value_set(sd->slider, pos); - sd->last_update_time = ecore_loop_time_get(); - ELM_SAFE_FREE(sd->delay_update, ecore_timer_del); -} - -static Eina_Bool -_update_delay(void *data) -{ - ELM_PLAYER_DATA_GET(data, sd); - if (!sd) return EINA_FALSE; - sd->delay_update = NULL; - _update_slider(data, NULL, NULL); - return EINA_FALSE; + if (!sd->dragging) + { + sd->play_update++; + elm_slider_value_set(sd->slider, pos); + } } static void @@ -198,13 +203,6 @@ _update_frame(void *data, { ELM_PLAYER_DATA_GET(data, sd); if (!sd) return; - - if ((ecore_loop_time_get() - sd->last_update_time) < 0.1) - { - if (sd->delay_update) ecore_timer_del(sd->delay_update); - sd->delay_update = ecore_timer_add(0.15, _update_delay, data); - return; - } _update_slider(data, obj, event_info); } @@ -215,7 +213,11 @@ _update_position(void *data, { ELM_PLAYER_DATA_GET(data, sd); - if ((ecore_loop_time_get() - sd->last_update_time) < 0.1) return; + 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)); } @@ -225,6 +227,7 @@ _drag_start(void *data, void *event_info __UNUSED__) { ELM_PLAYER_DATA_GET(data, sd); + sd->play_update = 0; sd->dragging = EINA_TRUE; } @@ -234,7 +237,9 @@ _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 @@ -505,6 +510,7 @@ _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)) @@ -554,6 +560,7 @@ _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); @@ -573,11 +580,8 @@ _elm_player_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) } static void -_elm_player_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +_elm_player_smart_del(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) { - Elm_Player_Smart_Data *sd = _pd; - - if (sd->delay_update) ecore_timer_del(sd->delay_update); eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); } diff --git a/legacy/elementary/src/lib/elm_widget_player.h b/legacy/elementary/src/lib/elm_widget_player.h index b722a310e8..8cb1caab2e 100644 --- a/legacy/elementary/src/lib/elm_widget_player.h +++ b/legacy/elementary/src/lib/elm_widget_player.h @@ -34,8 +34,7 @@ struct _Elm_Player_Smart_Data Evas_Object *stop; Evas_Object *slider; - Ecore_Timer *delay_update; - double last_update_time; + int play_update; Eina_Bool dragging : 1; };