2007-09-20 Carlos Alberto Cortez <calberto.cortez@gmail.com>
authorCarlos Alberto Cortez <calberto.cortez@gmail.com>
Fri, 21 Sep 2007 00:15:09 +0000 (00:15 -0000)
committerCarlos Alberto Cortez <calberto.cortez@gmail.com>
Fri, 21 Sep 2007 00:15:09 +0000 (00:15 -0000)
* TreeNode.cs: Add an internal ArePreviousNodesExpanded, to know
whether all the parent nodes are expanded.
* TreeNodeCollection.cs: When adding a new node an calling SetupNode,
call RecalculateVisibleOrder if all previous nodes are expanded.
Before that we were doing a IsVisible check, but sometimes the node
is not in the visible area, but _should_already be ready, because of
all previous nodes are expanded. Fixes #325259.

svn path=/trunk/mcs/; revision=86119

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs

index ca8c9c8cde41c93dfe57e3ab65bf9030e897762b..1879ff1331988a772ece57bc47fc21a376419585 100644 (file)
@@ -1,3 +1,13 @@
+2007-09-20  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+
+       * TreeNode.cs: Add an internal ArePreviousNodesExpanded, to know
+       whether all the parent nodes are expanded.
+       * TreeNodeCollection.cs: When adding a new node an calling SetupNode,
+       call RecalculateVisibleOrder if all previous nodes are expanded.
+       Before that we were doing a IsVisible check, but sometimes the node
+       is not in the visible area, but _should_already be ready, because of
+       all previous nodes are expanded. Fixes #325259.
+
 2007-09-20  Jonathan Pobst  <monkey@jpobst.com>
 
        * ToolStripSplitButton.cs: Call the ButtonClick event if the button
index 730254d41e4c108b4794d11cf077cf2f6233a1bf..cf9596975a080d2efb2a40dc1f7b1c65d4729c67 100644 (file)
@@ -477,13 +477,7 @@ namespace System.Windows.Forms {
                                if (visible_order <= TreeView.skipped_nodes || visible_order - TreeView.skipped_nodes > TreeView.VisibleCount)
                                        return false;
 
-                               TreeNode parent = Parent;
-                               while (parent != null) {
-                                       if (!parent.is_expanded)
-                                               return false;
-                                       parent = parent.Parent;
-                               }
-                               return true;
+                               return ArePreviousNodesExpanded;
                        }
                }
 
@@ -833,6 +827,19 @@ namespace System.Windows.Forms {
 
                #region Internal & Private Methods and Properties
 
+               internal bool ArePreviousNodesExpanded {
+                       get {
+                               TreeNode parent = Parent;
+                               while (parent != null) {
+                                       if (!parent.is_expanded)
+                                               return false;
+                                       parent = parent.Parent;
+                               }
+
+                               return true;
+                       }
+               }
+
                internal bool IsRoot {
                        get {
                                TreeView tree_view = TreeView;
index b44439bb43e324553f97c63a5f649bfcf33589f2..47b99399b9f5e6e7157e54c861363fd94253b7d3 100644 (file)
@@ -418,7 +418,7 @@ namespace System.Windows.Forms {
                        if (tree_view != null) {
                                TreeNode prev = GetPrevNode (node);
 
-                               if (node.IsVisible)
+                               if (tree_view.IsHandleCreated && node.ArePreviousNodesExpanded)
                                        tree_view.RecalculateVisibleOrder (prev);
                                if (owner == tree_view.root_node || node.Parent.IsVisible && node.Parent.IsExpanded)
                                        tree_view.UpdateScrollBars (false);