raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=104dadb2ed0d36523a320ea0fed947bf5be656e5

commit 104dadb2ed0d36523a320ea0fed947bf5be656e5
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Fri Feb 14 17:29:11 2014 +0900

    elm scroller - fix self feeding reconfigure to bail out on many loops
---
 data/themes/edc/elm/scroller.edc   | 75 ++++++++++++++++++++++++++++++++------
 src/lib/elm_interface_scrollable.c | 19 ++++++++--
 src/lib/elm_interface_scrollable.h |  2 +
 3 files changed, 81 insertions(+), 15 deletions(-)

diff --git a/data/themes/edc/elm/scroller.edc b/data/themes/edc/elm/scroller.edc
index a1a02f3..e36abd6 100644
--- a/data/themes/edc/elm/scroller.edc
+++ b/data/themes/edc/elm/scroller.edc
@@ -41,10 +41,7 @@ group { name: "elm/scroller/base/default";
       }
 // vert bar ////////////////////////////////////////////////////////////////
       part { name: "sb_vbar_show"; type: RECT;
-         scale: 1;
          description { state: "default" 0.0;
-//            rel1.offset: -11 -11;
-//            rel2.offset: 10 10;
          }
          description { state: "hidden" 0.0;
             inherit: "default" 0.0;
@@ -54,8 +51,8 @@ group { name: "elm/scroller/base/default";
       part { name: "sb_vbar"; type: RECT;
          scale: 1;
          description { state: "default" 0.0;
-            fixed: 1 0;
-            min: 15 15;
+            fixed: 1 1;
+            min: 15 1;
             align: 1.0 0.0;
             rel1.relative: 1.0 0.0;
             rel1.offset: -1 0;
@@ -76,6 +73,7 @@ group { name: "elm/scroller/base/default";
             rel1.to: "sb_vbar_a1";
             rel2.relative: 1.0 0.0;
             rel2.to: "sb_vbar_a2";
+            fixed: 1 1;
          }
       }
       part { name: "sb_vbar_p1"; type: RECT;
@@ -86,6 +84,7 @@ group { name: "elm/scroller/base/default";
             rel1.to: "sb_vbar_a1";
             rel2.relative: 1.0 0.0;
             rel2.to: "elm.dragable.vbar";
+            fixed: 1 1;
          }
       }
       part { name: "sb_vbar_p2"; type: RECT;
@@ -96,6 +95,7 @@ group { name: "elm/scroller/base/default";
             rel1.to: "elm.dragable.vbar";
             rel2.relative: 1.0 0.0;
             rel2.to: "sb_vbar_a2";
+            fixed: 1 1;
          }
       }
       part { name: "elm.dragable.vbar"; type: RECT;
@@ -106,13 +106,17 @@ group { name: "elm/scroller/base/default";
          dragable.confine: "sb_vbar_base";
          description { state: "default" 0.0;
             fixed: 1 1;
-            min: 15 15;
+            min: 15 1;
             rel1.relative: 0.5  0.5;
             rel1.to: "sb_vbar_base";
             rel2.relative: 0.5  0.5;
             rel2.to: "sb_vbar_base";
             color: 0 0 0 0;
          }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            min: 0 0;
+         }
       }
       part { name: "sb_vbar_a1"; type: RECT;
          clip_to: "sb_vbar";
@@ -127,6 +131,10 @@ group { name: "elm/scroller/base/default";
             rel2.relative: 1.0 0.0;
             rel2.offset: -1 0;
          }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            min: 0 0;
+         }
       }
       part { name: "sb_vbar_a2"; type: RECT;
          clip_to: "sb_vbar";
@@ -141,18 +149,28 @@ group { name: "elm/scroller/base/default";
             rel1.relative: 0.0 1.0;
             rel2.to: "sb_vbar";
          }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            min: 0 0;
+         }
       }
       program {
          signal: "elm,action,show,vbar"; source: "elm";
          action: STATE_SET "default" 0.0;
          target: "sb_vbar";
          target: "sb_vbar_show";
+         target: "elm.dragable.vbar";
+         target: "sb_vbar_a1";
+         target: "sb_vbar_a2";
       }
       program {
          signal: "elm,action,hide,vbar"; source: "elm";
          action: STATE_SET "hidden" 0.0;
          target: "sb_vbar";
          target: "sb_vbar_show";
+         target: "elm.dragable.vbar";
+         target: "sb_vbar_a1";
+         target: "sb_vbar_a2";
       }
       program {
          signal: "mouse,down,1*"; source: "sb_vbar_a1";
@@ -201,10 +219,7 @@ group { name: "elm/scroller/base/default";
 
 // horiz bar /////////////////////////////////////////////////////////////
       part { name: "sb_hbar_show"; type: RECT;
-         scale: 1;
          description { state: "default" 0.0;
-//            rel1.offset: -11 -11;
-//            rel2.offset: 10 10;
          }
          description { state: "hidden" 0.0;
             inherit: "default" 0.0;
@@ -214,8 +229,8 @@ group { name: "elm/scroller/base/default";
       part { name: "sb_hbar"; type: RECT; mouse_events: 0;
          scale: 1;
          description { state: "default" 0.0;
-            fixed: 0 1;
-            min: 15 15;
+            fixed: 1 1;
+            min: 1 15;
             align: 0.0 1.0;
             rel1.relative: 0.0 1.0;
             rel1.offset: 0 -1;
@@ -236,6 +251,7 @@ group { name: "elm/scroller/base/default";
             rel1.to: "sb_hbar_a1";
             rel2.relative: 0.0 1.0;
             rel2.to: "sb_hbar_a2";
+            fixed: 1 1;
          }
       }
       part { name: "sb_hbar_p1"; type: RECT;
@@ -246,6 +262,7 @@ group { name: "elm/scroller/base/default";
             rel1.to: "sb_hbar_a1";
             rel2.relative: 0.0 1.0;
             rel2.to: "elm.dragable.hbar";
+            fixed: 1 1;
          }
       }
       part { name: "sb_hbar_p2"; type: RECT;
@@ -256,6 +273,7 @@ group { name: "elm/scroller/base/default";
             rel1.to: "elm.dragable.hbar";
             rel2.relative: 0.0 1.0;
             rel2.to: "sb_hbar_a2";
+            fixed: 1 1;
          }
       }
       part { name: "elm.dragable.hbar"; type: RECT;
@@ -266,13 +284,17 @@ group { name: "elm/scroller/base/default";
          dragable.confine: "sb_hbar_base";
          description { state: "default" 0.0;
             fixed: 1 1;
-            min: 15 15;
+            min: 1 15;
             rel1.relative: 0.5  0.5;
             rel1.to: "sb_hbar_base";
             rel2.relative: 0.5  0.5;
             rel2.to: "sb_hbar_base";
             color: 0 0 0 0;
          }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            min: 0 0;
+         }
       }
       part { name: "sb_hbar_a1"; type: RECT;
          clip_to: "sb_hbar";
@@ -287,6 +309,10 @@ group { name: "elm/scroller/base/default";
             rel2.relative: 0.0 1.0;
             rel2.offset: 0 -1;
          }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            min: 0 0;
+         }
       }
       part { name: "sb_hbar_a2"; type: RECT;
          clip_to: "sb_hbar";
@@ -301,18 +327,28 @@ group { name: "elm/scroller/base/default";
             rel1.relative: 1.0 0.0;
             rel2.to: "sb_hbar";
          }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            min: 0 0;
+         }
       }
       program {
          signal: "elm,action,show,hbar"; source: "elm";
          action: STATE_SET "default" 0.0;
          target: "sb_hbar";
          target: "sb_hbar_show";
+         target: "elm.dragable.hbar";
+         target: "sb_hbar_a1";
+         target: "sb_hbar_a2";
       }
       program {
          signal: "elm,action,hide,hbar"; source: "elm";
          action: STATE_SET "hidden" 0.0;
          target: "sb_hbar";
          target: "sb_hbar_show";
+         target: "elm.dragable.hbar";
+         target: "sb_hbar_a1";
+         target: "sb_hbar_a2";
       }
       program {
          signal: "mouse,down,1*"; source: "sb_hbar_a1";
@@ -424,6 +460,7 @@ group { name: "elm/scroller/base/default";
             rel2.to: "elm.swallow.content";
          }
       }
+      
       part { name: "runner_vbar"; mouse_events: 0;
          clip_to: "sb_vbar_show";
          description { state: "default" 0.0;
@@ -434,6 +471,7 @@ group { name: "elm/scroller/base/default";
             fill.smooth: 0;
             min: 3 4;
             max: 3 99999;
+            fixed: 1 1;
          }
       }
       part { name: "runner_hbar"; mouse_events: 0;
@@ -446,6 +484,7 @@ group { name: "elm/scroller/base/default";
             fill.smooth: 0;
             min: 4 3;
             max: 99999 3;
+            fixed: 1 1;
          }
       }
       part { name: "runner_vbar_clip"; type: RECT;
@@ -457,6 +496,7 @@ group { name: "elm/scroller/base/default";
             rel1.offset: 0 1;
             rel2.to: "runner_vbar";
             rel2.offset: -1 -2;
+            fixed: 1 1;
          }
       }
       part { name: "runner_hbar_clip"; type: RECT;
@@ -468,6 +508,7 @@ group { name: "elm/scroller/base/default";
             rel1.offset: 1 0;
             rel2.to: "runner_hbar";
             rel2.offset: -2 -1;
+            fixed: 1 1;
          }
       }
 
@@ -507,6 +548,7 @@ group { name: "elm/scroller/base/default";
             image.normal: "shadow_square_tiny.png";
             image.border: 6 6 6 6;
             fill.smooth: 0;
+            fixed: 1 1;
          }
          description { state: "clicked" 0.0;
             inherit: "default" 0.0;
@@ -526,6 +568,7 @@ group { name: "elm/scroller/base/default";
             image.border: 7 7 7 7;
             fill.smooth: 0;
             visible: 0;
+            fixed: 1 1;
          }
          description { state: "clicked" 0.0;
             inherit: "default" 0.0;
@@ -543,6 +586,7 @@ group { name: "elm/scroller/base/default";
             rel2.to_y: "base_vbar";
             image.normal: "runner_glow_vert.png";
             image.border: 0 0 33 33;
+            fixed: 1 1;
          }
       }
       part { name: "base_vbar"; mouse_events: 0;
@@ -557,6 +601,7 @@ group { name: "elm/scroller/base/default";
             fill.smooth: 0;
             min: 3 13;
             TILED_HORIZ(120)
+            fixed: 1 1;
          }
       }
       part { name: "bevel_vbar"; mouse_events: 0;
@@ -569,6 +614,7 @@ group { name: "elm/scroller/base/default";
             image.middle: 0;
             fill.smooth: 0;
             min: 3 3;
+            fixed: 1 1;
          }
       }
       part { name: "center_vbar"; mouse_events: 0;
@@ -631,6 +677,7 @@ group { name: "elm/scroller/base/default";
             image.normal: "shadow_square_tiny.png";
             image.border: 6 6 6 6;
             fill.smooth: 0;
+            fixed: 1 1;
          }
          description { state: "clicked" 0.0;
             inherit: "default" 0.0;
@@ -650,6 +697,7 @@ group { name: "elm/scroller/base/default";
             image.border: 7 7 7 7;
             fill.smooth: 0;
             visible: 0;
+            fixed: 1 1;
          }
          description { state: "clicked" 0.0;
             inherit: "default" 0.0;
@@ -667,6 +715,7 @@ group { name: "elm/scroller/base/default";
             rel2.to_y: "runner_hbar_clip";
             image.normal: "runner_glow_horiz.png";
             image.border: 33 33 0 0;
+            fixed: 1 1;
          }
       }
       part { name: "base_hbar"; mouse_events: 0;
@@ -693,6 +742,7 @@ group { name: "elm/scroller/base/default";
             image.middle: 0;
             fill.smooth: 0;
             min: 3 3;
+            fixed: 1 1;
          }
       }
       part { name: "center_hbar"; mouse_events: 0;
@@ -702,6 +752,7 @@ group { name: "elm/scroller/base/default";
             rel2.to: "base_hbar";
             image.normal: "holes_tiny_horiz.png";
             FIXED_SIZE(11, 3)
+            fixed: 1 1;
          }
       }
       part { name: "center_glow_hbar"; mouse_events: 0;
diff --git a/src/lib/elm_interface_scrollable.c 
b/src/lib/elm_interface_scrollable.c
index d6c0fc0..06290c6 100644
--- a/src/lib/elm_interface_scrollable.c
+++ b/src/lib/elm_interface_scrollable.c
@@ -3470,19 +3470,32 @@ _on_edje_move(void *data,
 
 static void
 _on_edje_resize(void *data,
-                Evas *e EINA_UNUSED,
+                Evas *e,
                 Evas_Object *edje_obj,
                 void *event_info EINA_UNUSED)
 {
    Elm_Scrollable_Smart_Interface_Data *sid = data;
-   int w, h;
+   Evas_Coord w, h;
+   int current_calc;
+   Eina_Bool reconf_ok = EINA_TRUE;
 
    evas_object_geometry_get(edje_obj, NULL, NULL, &w, &h);
 
    sid->w = w;
    sid->h = h;
 
-   _elm_scroll_reconfigure(sid);
+   current_calc = evas_smart_objects_calculate_count_get(e);
+   if (current_calc == sid->current_calc)
+     {
+        sid->size_count++;
+        if (sid->size_count > 3) reconf_ok = EINA_FALSE;
+     }
+   else
+     {
+        sid->current_calc = current_calc;
+        sid->size_count = 0;
+     }
+   if (reconf_ok) _elm_scroll_reconfigure(sid);
    _elm_scroll_wanted_region_set(sid->obj);
 }
 
diff --git a/src/lib/elm_interface_scrollable.h 
b/src/lib/elm_interface_scrollable.h
index b771613..3ae2699 100644
--- a/src/lib/elm_interface_scrollable.h
+++ b/src/lib/elm_interface_scrollable.h
@@ -1193,8 +1193,10 @@ struct _Elm_Scrollable_Smart_Interface_Data
    double     pagerel_h, pagerel_v;
    Evas_Coord pagesize_h, pagesize_v;
    int        page_limit_h, page_limit_v;
+   int        current_calc;
 
    unsigned char size_adjust_recurse;
+   unsigned char size_count;
    Eina_Bool  size_adjust_recurse_abort : 1;
 
    Eina_Bool  momentum_animator_disabled : 1;

-- 


Reply via email to