elm/slider: check for interval/range state before using that functionality

Summary:
the part elm.dragable2.slider only exists when the slider is set to range
mode, so verify that this mode is active before attempting to use that part

@fix

Depends on D8968

Reviewers: cedric

Reviewed By: cedric

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8969
This commit is contained in:
Mike Blumenkrantz 2019-05-29 09:22:25 -04:00
parent 1051a1ca46
commit 695dfb650a
1 changed files with 13 additions and 9 deletions

View File

@ -549,10 +549,13 @@ _elm_slider_val_fetch(Evas_Object *obj, Elm_Slider_Data *pd, Eina_Bool user_even
if (efl_ui_layout_orientation_is_horizontal(sd->dir, EINA_TRUE)) pos = posx; if (efl_ui_layout_orientation_is_horizontal(sd->dir, EINA_TRUE)) pos = posx;
else pos = posy; else pos = posy;
if (pd->intvl_enable)
{
efl_ui_drag_value_get(efl_part(wd->resize_obj, "elm.dragable2.slider"), efl_ui_drag_value_get(efl_part(wd->resize_obj, "elm.dragable2.slider"),
&posx2, &posy2); &posx2, &posy2);
if (efl_ui_layout_orientation_is_horizontal(sd->dir, EINA_TRUE)) pos2 = posx2; if (efl_ui_layout_orientation_is_horizontal(sd->dir, EINA_TRUE)) pos2 = posx2;
else pos2 = posy2; else pos2 = posy2;
}
if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir)) if (efl_ui_mirrored_get(obj) ^ efl_ui_layout_orientation_is_inverted(sd->dir))
{ {
@ -562,10 +565,10 @@ _elm_slider_val_fetch(Evas_Object *obj, Elm_Slider_Data *pd, Eina_Bool user_even
} }
val = (pos * (sd->val_max - sd->val_min)) + sd->val_min; val = (pos * (sd->val_max - sd->val_min)) + sd->val_min;
val2 = (pos2 * (sd->val_max - sd->val_min)) + sd->val_min;
if (pd->intvl_enable) if (pd->intvl_enable)
{ {
val2 = (pos2 * (sd->val_max - sd->val_min)) + sd->val_min;
if (!inverted) if (!inverted)
{ {
if (val > id->intvl_to) if (val > id->intvl_to)
@ -606,7 +609,7 @@ _elm_slider_val_fetch(Evas_Object *obj, Elm_Slider_Data *pd, Eina_Bool user_even
} }
} }
if (fabs(val2 - id->intvl_to) > DBL_EPSILON) if (pd->intvl_enable && fabs(val2 - id->intvl_to) > DBL_EPSILON)
{ {
id->intvl_to = val2; id->intvl_to = val2;
/* avoid emitting two events and setting a timer twice */ /* avoid emitting two events and setting a timer twice */
@ -620,7 +623,7 @@ _elm_slider_val_fetch(Evas_Object *obj, Elm_Slider_Data *pd, Eina_Bool user_even
} }
void void
_elm_slider_val_set(Evas_Object *obj, Elm_Slider_Data *pd EINA_UNUSED) _elm_slider_val_set(Evas_Object *obj, Elm_Slider_Data *pd)
{ {
double pos, pos2; double pos, pos2;
@ -655,6 +658,7 @@ _elm_slider_val_set(Evas_Object *obj, Elm_Slider_Data *pd EINA_UNUSED)
efl_ui_drag_value_set(efl_part(wd->resize_obj, "elm.dragable.slider"), efl_ui_drag_value_set(efl_part(wd->resize_obj, "elm.dragable.slider"),
pos, pos); pos, pos);
if (pd->intvl_enable)
efl_ui_drag_value_set(efl_part(wd->resize_obj, "elm.dragable2.slider"), efl_ui_drag_value_set(efl_part(wd->resize_obj, "elm.dragable2.slider"),
pos2, pos2); pos2, pos2);