Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Voronchev <nikita.voronchev@ru.axxonsoft.com>2019-08-30 19:29:18 +0300
committerAlexander Köplinger <alex.koeplinger@outlook.com>2019-08-30 19:29:18 +0300
commit94797b95d6b3c3f1b601831395dbeb3b5dd8e802 (patch)
tree664439157e23c16dac904570334945379b5184b2 /mcs/class/System.Windows.Forms
parent9db00e74950a5b9572dbcfb3c6403503ae5b236d (diff)
[WinForms] Fix UIA event on node insertions into a `TreeView` object (#16559)
The UIA event doesn't emited by means of insertion a new `TreeNode` to a `TreeNodeCollection` of the respective `TreeNode`.
Diffstat (limited to 'mcs/class/System.Windows.Forms')
-rw-r--r--mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs63
1 files changed, 31 insertions, 32 deletions
diff --git a/mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs b/mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs
index bd5557091ec..020eaac5d0f 100644
--- a/mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs
+++ b/mcs/class/System.Windows.Forms/System.Windows.Forms/TreeNodeCollection.cs
@@ -90,8 +90,12 @@ namespace System.Windows.Forms {
set {
if (index < 0 || index >= Count)
throw new ArgumentOutOfRangeException ("index");
- SetupNode (value);
+
+ var removedNode = nodes [index];
nodes [index] = value;
+
+ OnUIACollectionChanged (CollectionChangeAction.Remove, removedNode);
+ SetupNode (value);
}
}
@@ -107,7 +111,7 @@ namespace System.Windows.Forms {
bool UsingSorting {
get {
- TreeView tv = owner == null ? null : owner.TreeView;
+ TreeView tv = TreeView;
return tv != null && (tv.Sorted || tv.TreeViewNodeSorter != null);
}
}
@@ -125,11 +129,7 @@ namespace System.Windows.Forms {
throw new ArgumentNullException("node");
int index;
- TreeView tree_view = null;
-
- if (owner != null)
- tree_view = owner.TreeView;
-
+ TreeView tree_view = TreeView;
if (tree_view != null && UsingSorting) {
index = AddSorted (node);
} else {
@@ -142,9 +142,6 @@ namespace System.Windows.Forms {
SetupNode (node);
- // UIA Framework Event: Collection Changed
- if (tree_view != null)
- tree_view.OnUIACollectionChanged (owner, new CollectionChangeEventArgs (CollectionChangeAction.Add, node));
return index;
}
@@ -206,14 +203,11 @@ namespace System.Windows.Forms {
Array.Clear (nodes, 0, count);
count = 0;
- TreeView tree_view = null;
- if (owner != null) {
- tree_view = owner.TreeView;
- if (tree_view != null) {
- tree_view.UpdateBelow (owner);
- tree_view.RecalculateVisibleOrder (owner);
- tree_view.UpdateScrollBars (false);
- }
+ TreeView tree_view = TreeView;
+ if (tree_view != null) {
+ tree_view.UpdateBelow (owner);
+ tree_view.RecalculateVisibleOrder (owner);
+ tree_view.UpdateScrollBars (false);
}
}
@@ -273,7 +267,7 @@ namespace System.Windows.Forms {
// If we can use sorting, it means we have an owner *and* a TreeView
if (UsingSorting)
- Sort (owner.TreeView.TreeViewNodeSorter);
+ Sort (TreeView.TreeViewNodeSorter);
SetupNode (node);
}
@@ -345,10 +339,7 @@ namespace System.Windows.Forms {
bool re_set_selected = false;
bool visible = removed.IsVisible;
- TreeView tree_view = null;
- if (owner != null)
- tree_view = owner.TreeView;
-
+ TreeView tree_view = TreeView;
if (tree_view != null) {
tree_view.RecalculateVisibleOrder (prev);
@@ -388,9 +379,7 @@ namespace System.Windows.Forms {
tree_view.UpdateBelow (parent);
}
- // UIA Framework Event: Collection Changed
- if (tree_view != null)
- tree_view.OnUIACollectionChanged (owner, new CollectionChangeEventArgs (CollectionChangeAction.Remove, removed));
+ OnUIACollectionChanged (CollectionChangeAction.Remove, removed);
}
public virtual void RemoveByKey (string key)
@@ -418,10 +407,7 @@ namespace System.Windows.Forms {
node.parent = owner;
- TreeView tree_view = null;
- if (owner != null)
- tree_view = owner.TreeView;
-
+ TreeView tree_view = TreeView;
if (tree_view != null) {
// We may need to invalidate this entire node collection if sorted.
TreeNode prev = UsingSorting ? owner : GetPrevNode (node);
@@ -433,6 +419,8 @@ namespace System.Windows.Forms {
tree_view.UpdateBelow (owner);
}
+
+ OnUIACollectionChanged (CollectionChangeAction.Add, node);
}
int IList.Add (object node)
@@ -465,7 +453,7 @@ namespace System.Windows.Forms {
if (count >= nodes.Length)
Grow ();
- TreeView tree_view = owner.TreeView;
+ TreeView tree_view = TreeView;
if (tree_view.TreeViewNodeSorter != null) { // Custom sorting
nodes [count++] = node;
Sort (tree_view.TreeViewNodeSorter);
@@ -507,7 +495,7 @@ namespace System.Windows.Forms {
}
// Sorted may have been set to false even if TreeViewNodeSorter is being used.
- TreeView tv = owner == null ? null : owner.TreeView;
+ TreeView tv = TreeView;
if (tv != null)
tv.sorted = true;
}
@@ -556,6 +544,17 @@ namespace System.Windows.Forms {
}
}
+ // UIA Framework Event: Collection Changed
+ private void OnUIACollectionChanged (CollectionChangeAction action, TreeNode node)
+ {
+ TreeView?.OnUIACollectionChanged (owner, new CollectionChangeEventArgs (action, node));
+ }
+
+ private TreeView TreeView
+ {
+ get { return owner?.TreeView; }
+ }
+
internal class TreeNodeEnumerator : IEnumerator {
private TreeNodeCollection collection;