<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -20,6 +20,7 @@ package fb.util {
   import mx.core.UIComponent;
   import mx.skins.ProgrammaticSkin;
 
+  import flash.display.DisplayObject;
   import flash.display.InteractiveObject;
 
   public class FlexUtil {
@@ -50,5 +51,14 @@ package fb.util {
       if (obj is InteractiveObject &amp;&amp; !(obj is TextArea))
         (obj as InteractiveObject).tabEnabled = false;
     }
+
+    public static function isVisible(obj:DisplayObject):Boolean {
+      if (!obj.stage) return false;
+      var elder:DisplayObject = obj.parent;
+      do {
+        if (!elder.visible) return false;
+      } while (elder = elder.parent);
+      return true;
+    }
   }
 }</diff>
      <filename>fb/util/FlexUtil.as</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,7 @@
 // Animating Canvas
 package fbair.util.display {
   import fb.util.Output;
+  import fb.util.FlexUtil;
 
   import flash.display.DisplayObject;
   import flash.events.Event;
@@ -58,6 +59,7 @@ package fbair.util.display {
     //   in case we accelerate past our target, we still know when to stop
     private var isGrowing:Boolean;
 
+    private var isAnimating:Boolean = false;
     private var velocity:Number = 0;
     private var _visible:Boolean = true;
     private var managedHeight:Number = 0;
@@ -69,7 +71,7 @@ package fbair.util.display {
     }
 
     private function addedToStage(event:Event):void {
-      animate = animateIn &amp;&amp; Animate;
+      animate = animateIn &amp;&amp; Animate &amp;&amp; FlexUtil.isVisible(this);
       if (animate) {
         managedHeight = 0;
         measuredHeight = super.measuredHeight;
@@ -77,7 +79,8 @@ package fbair.util.display {
     }
 
     public function remove(immediately:Boolean = false):void {
-      if (animateOut &amp;&amp; hasBeenVisible &amp;&amp; !immediately) {
+      if (animateOut &amp;&amp; hasBeenVisible &amp;&amp;
+          !immediately &amp;&amp; FlexUtil.isVisible(this)) {
         animate = true;
         measuredHeight = 0;
         allowSetHeight = false;
@@ -110,7 +113,7 @@ package fbair.util.display {
 
       if (to &amp;&amp; measuredHeight) hasBeenVisible = true;
 
-      if (!Animate) {
+      if (!Animate || !FlexUtil.isVisible(this)) {
         immediateVisible = to;
         return;
       }
@@ -146,7 +149,7 @@ package fbair.util.display {
 
       if (!allowSetHeight) return;
 
-      if (!Animate) {
+      if (!Animate || !FlexUtil.isVisible(this)) {
         managedHeight = super.measuredHeight = to;
         return;
       }
@@ -159,6 +162,8 @@ package fbair.util.display {
     }
 
     public function startAnimation():void {
+      if (isAnimating) return;
+      isAnimating = true;
       addEventListener(Event.ENTER_FRAME, tweenFrame);
       clipContent = true;
       frameNum = 0;
@@ -166,6 +171,8 @@ package fbair.util.display {
     }
 
     public function endAnimation():void {
+      if (!isAnimating) return;
+      isAnimating = false;
       removeEventListener(Event.ENTER_FRAME, tweenFrame);
       clipContent = false;
       managedHeight = super.measuredHeight;</diff>
      <filename>fbair/util/display/AnimatedCanvas.as</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>5f9177e6d12614e61995d07d213b9991b3ef1ac1</id>
    </parent>
  </parents>
  <author>
    <name>Lee Byron</name>
    <email>leebyron@lbyron.local</email>
  </author>
  <url>http://github.com/jubishop/Facebook-for-Adobe-AIR/commit/1e8c866cc4d22f1748b0b3017bc772465475a051</url>
  <id>1e8c866cc4d22f1748b0b3017bc772465475a051</id>
  <committed-date>2009-05-13T02:31:34-07:00</committed-date>
  <authored-date>2009-05-13T02:31:34-07:00</authored-date>
  <message>saves resources by not animating in non visible states (usually a nile we cant see) and solves a race condition</message>
  <tree>07ada75b31fdea937dc361c3aaa426868186b15d</tree>
  <committer>
    <name>Lee Byron</name>
    <email>leebyron@lbyron.local</email>
  </committer>
</commit>
