elm_scroll: Avoid calls to non-existing part

In case of Bryce's style, there are no scroll bars.

this avoids errors for non-existent objects

ref T7030

Signed-off-by: Mike Blumenkrantz <zmike@samsung.com>

Differential Revision: https://phab.enlightenment.org/D6317
This commit is contained in:
Jean-Philippe Andre 2018-06-21 18:51:43 -04:00 committed by Marcel Hollerbach
parent 679ea2d311
commit 6f6b365c84
1 changed files with 58 additions and 17 deletions

View File

@ -788,6 +788,25 @@ _elm_scroll_scroll_bar_visibility_adjust(
_elm_scroll_scroll_bar_auto_visibility_adjust(sid);
}
static inline EINA_PURE Eina_Bool
_elm_scroll_has_bars(const Elm_Scrollable_Smart_Interface_Data *sid)
{
const char *iface_scr_dragable_hbar = NULL;
const char *iface_scr_dragable_vbar = NULL;
if (elm_widget_is_legacy(sid->obj))
{
iface_scr_dragable_hbar = iface_scr_legacy_dragable_hbar;
iface_scr_dragable_vbar = iface_scr_legacy_dragable_vbar;
}
else
{
iface_scr_dragable_hbar = iface_scr_efl_ui_dragable_hbar;
iface_scr_dragable_vbar = iface_scr_efl_ui_dragable_vbar;
}
return edje_object_part_exists(sid->edje_obj, iface_scr_dragable_hbar) ||
edje_object_part_exists(sid->edje_obj, iface_scr_dragable_vbar);
}
static void
_elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
{
@ -832,6 +851,10 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
edje_object_part_geometry_get
(sid->edje_obj, "efl.content", NULL, NULL, &vw, &vh);
}
if (!_elm_scroll_has_bars(sid))
goto skip_bars;
w = sid->content_info.w;
if (w < 1) w = 1;
size = (double)vw / (double)w;
@ -918,16 +941,21 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
{
Evas_Coord px = 0, py = 0, minx = 0, miny = 0;
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_vbar, 1.0, 1.0);
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_hbar, 1.0, 1.0);
if (_elm_scroll_has_bars(sid))
{
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_vbar, 1.0, 1.0);
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_hbar, 1.0, 1.0);
}
elm_obj_pan_pos_min_get(sid->pan_obj, &minx, &miny);
elm_obj_pan_pos_get(sid->pan_obj, &px, &py);
elm_obj_pan_pos_set(sid->pan_obj, minx, miny);
if ((px != minx) || (py != miny))
edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm");
}
skip_bars:
_elm_scroll_scroll_bar_visibility_adjust(sid);
sid->size_adjust_recurse--;
if (sid->size_adjust_recurse <= 0)
@ -950,6 +978,7 @@ _elm_scroll_scroll_bar_read_and_update(
|| (sid->down.bounce_y_animator) || (sid->down.momentum_animator)
|| (sid->scrollto.x.animator) || (sid->scrollto.y.animator))
return;
if (!_elm_scroll_has_bars(sid)) return;
const char *iface_scr_dragable_hbar = NULL;
const char *iface_scr_dragable_vbar = NULL;
@ -1634,10 +1663,13 @@ _elm_interface_scrollable_content_pos_set(Eo *obj, Elm_Scrollable_Smart_Interfac
iface_scr_dragable_vbar = iface_scr_efl_ui_dragable_vbar;
}
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_vbar, 0.0, vy);
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_hbar, vx, 0.0);
if (_elm_scroll_has_bars(sid))
{
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_vbar, 0.0, vy);
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_hbar, vx, 0.0);
}
if (!sid->loop_h && !sid->down.bounce_x_animator)
{
@ -3739,6 +3771,9 @@ _scroll_edje_object_attach(Evas_Object *obj)
edje_object_signal_callback_add
(sid->edje_obj, "reload", "elm", _elm_scroll_reload_cb, sid);
if (!_elm_scroll_has_bars(sid))
return;
const char *iface_scr_dragable_vbar = NULL;
if (elm_widget_is_legacy(sid->obj))
iface_scr_dragable_vbar = iface_scr_legacy_dragable_vbar;
@ -3831,6 +3866,9 @@ _scroll_edje_object_detach(Evas_Object *obj)
evas_object_event_callback_del_full
(sid->edje_obj, EVAS_CALLBACK_MOVE, _on_edje_move, sid);
if (!_elm_scroll_has_bars(sid))
return;
const char *iface_scr_dragable_vbar = NULL;
if (elm_widget_is_legacy(sid->obj))
iface_scr_dragable_vbar = iface_scr_legacy_dragable_vbar;
@ -4001,16 +4039,19 @@ _elm_scroll_scroll_bar_reset(Elm_Scrollable_Smart_Interface_Data *sid)
iface_scr_dragable_vbar = iface_scr_efl_ui_dragable_vbar;
}
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_vbar, 0.0, 0.0);
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_hbar, 0.0, 0.0);
if ((!sid->content) && (!sid->extern_pan))
if (_elm_scroll_has_bars(sid))
{
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_vbar, 1.0, 1.0);
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_hbar, 1.0, 1.0);
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_vbar, 0.0, 0.0);
edje_object_part_drag_value_set
(sid->edje_obj, iface_scr_dragable_hbar, 0.0, 0.0);
if ((!sid->content) && (!sid->extern_pan))
{
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_vbar, 1.0, 1.0);
edje_object_part_drag_size_set
(sid->edje_obj, iface_scr_dragable_hbar, 1.0, 1.0);
}
}
if (sid->pan_obj)
{