Fix for SizeNegotiation. 17/42317/1
authorVictor Cebollada <v.cebollada@samsung.com>
Thu, 25 Jun 2015 09:33:09 +0000 (10:33 +0100)
committerVictor Cebollada <v.cebollada@samsung.com>
Thu, 25 Jun 2015 14:47:52 +0000 (15:47 +0100)
  The RelayoutController::RequestRelayout() does not add a dirty Actor to the
  request list if it has a child which is not dependant on it.

Change-Id: I7f4131d58dfe4a7135cf7e3e8077c86e83b44133
Signed-off-by: Victor Cebollada <v.cebollada@samsung.com>
dali/internal/event/size-negotiation/relayout-controller-impl.cpp

index 66a707a..9c2120a 100644 (file)
@@ -162,20 +162,25 @@ void RelayoutController::RequestRelayout( Dali::Actor& actor, Dimension::Type di
     }
   }
 
-  // Request this actor as head of sub-tree if it is not dependent on a parent that is dirty
-  Dali::Actor subTreeActor = topOfSubTreeStack.back();
-  Dali::Actor parent = subTreeActor.GetParent();
-  if( !parent || !( GetImplementation( subTreeActor ).RelayoutDependentOnParent() && GetImplementation( parent ).RelayoutRequired() ) )
+  while( !topOfSubTreeStack.empty() )
   {
-    // Add sub tree root to relayout list
-    AddRequest( subTreeActor );
+    // Request this actor as head of sub-tree if it is not dependent on a parent that is dirty
+    Dali::Actor subTreeActor = topOfSubTreeStack.back();
+    topOfSubTreeStack.pop_back();
 
-    // Flag request for end of frame
-    Request();
-  }
-  else
-  {
-    potentialRedundantSubRoots.push_back( subTreeActor );
+    Dali::Actor parent = subTreeActor.GetParent();
+    if( !parent || !( GetImplementation( subTreeActor ).RelayoutDependentOnParent() && GetImplementation( parent ).RelayoutRequired() ) )
+    {
+      // Add sub tree root to relayout list
+      AddRequest( subTreeActor );
+
+      // Flag request for end of frame
+      Request();
+    }
+    else
+    {
+      potentialRedundantSubRoots.push_back( subTreeActor );
+    }
   }
 
   // Remove any redundant sub-tree heads