From 8af76b608996b62e5cdfb5f4383606646b029a54 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 26 Nov 2013 19:32:35 +0900 Subject: [PATCH] elm scroller - fix infinite recursion in scroller adjust there is an infinite recursion in the scroller adjust code that can happen some times. this fixes T434. --- src/lib/elm_interface_scrollable.c | 13 +++++++++++++ src/lib/elm_interface_scrollable.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/src/lib/elm_interface_scrollable.c b/src/lib/elm_interface_scrollable.c index e677b89..6252556 100644 --- a/src/lib/elm_interface_scrollable.c +++ b/src/lib/elm_interface_scrollable.c @@ -840,6 +840,13 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid) { if (!sid->pan_obj || !sid->edje_obj) return; + if (sid->size_adjust_recurse_abort) return; + if (sid->size_adjust_recurse > 20) + { + sid->size_adjust_recurse_abort = EINA_TRUE; + return; + } + sid->size_adjust_recurse++; if ((sid->content) || (sid->extern_pan)) { Evas_Coord x, y, w, h, mx = 0, my = 0, vw = 0, vh = 0, px, py, @@ -926,6 +933,12 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid) edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm"); } _elm_scroll_scroll_bar_visibility_adjust(sid); + sid->size_adjust_recurse--; + if (sid->size_adjust_recurse <= 0) + { + sid->size_adjust_recurse = 0; + sid->size_adjust_recurse_abort = EINA_FALSE; + } } static void diff --git a/src/lib/elm_interface_scrollable.h b/src/lib/elm_interface_scrollable.h index da1b21a..b36deb2 100644 --- a/src/lib/elm_interface_scrollable.h +++ b/src/lib/elm_interface_scrollable.h @@ -1194,6 +1194,9 @@ struct _Elm_Scrollable_Smart_Interface_Data Evas_Coord pagesize_h, pagesize_v; int page_limit_h, page_limit_v; + unsigned char size_adjust_recurse; + Eina_Bool size_adjust_recurse_abort : 1; + Eina_Bool momentum_animator_disabled : 1; Eina_Bool bounce_animator_disabled : 1; Eina_Bool page_snap_horiz : 1; -- 2.7.4