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)
      {

-- 


Reply via email to