forked from enlightenment/efl
fix self-feedback loop between slider and elm player in slider.
This commit is contained in:
parent
2ae7a8cffb
commit
cc3a575f95
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -34,7 +34,6 @@ struct _Elm_Player_Smart_Data
|
|||
Evas_Object *stop;
|
||||
Evas_Object *slider;
|
||||
|
||||
int play_update;
|
||||
Eina_Bool dragging : 1;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue