bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=6f6b365c8431a88b178772cd735659e680f9aa02
commit 6f6b365c8431a88b178772cd735659e680f9aa02 Author: Jean-Philippe Andre <[email protected]> Date: Thu Jun 21 18:51:43 2018 -0400 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 <[email protected]> Differential Revision: https://phab.enlightenment.org/D6317 --- src/lib/elementary/elm_interface_scrollable.c | 75 +++++++++++++++++++++------ 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c index b7ffad275c..dfdfefc122 100644 --- a/src/lib/elementary/elm_interface_scrollable.c +++ b/src/lib/elementary/elm_interface_scrollable.c @@ -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) { --
