forked from enlightenment/efl
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:
parent
679ea2d311
commit
6f6b365c84
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue