Browse Source

OnIsVisibleChanged re-runs filter cascade on visible children

When a tree node becomes visible for the first time, its already-realised
children might carry stale IsHidden state — OnChildrenChanged only fires
for newly-added children, and only when the parent was visible at the time.
The visible result: a property's accessor children read as visible the first
time the user expands the property even under ShowApiLevel=PublicOnly, until
something else (refresh / language flip) forces a cascade.

Assisted-by: Claude:claude-opus-4-7:Claude Code
pull/3755/head
Siegfried Pammer 2 months ago
parent
commit
2fa8a8fcb2
  1. 18
      ILSpy/TreeNodes/ILSpyTreeNode.cs

18
ILSpy/TreeNodes/ILSpyTreeNode.cs

@ -156,6 +156,24 @@ namespace ILSpy.TreeNodes @@ -156,6 +156,24 @@ namespace ILSpy.TreeNodes
}
}
/// <summary>
/// Re-applies the filter cascade to every realised child when this node becomes
/// visible. <see cref="OnChildrenChanged"/> only fires for newly-added children, and
/// only when the parent was visible at the time — so children added under a hidden
/// parent inherit stale <see cref="SharpTreeNode.IsHidden"/> states. Without this
/// trigger, expanding a node that ShowApiLevel had hidden leaves its accessor
/// children reading as visible even though the cascade would mark them hidden.
/// Mirrors WPF's identical override on <c>ILSpyTreeNode</c>.
/// </summary>
protected override void OnIsVisibleChanged()
{
base.OnIsVisibleChanged();
if (!IsVisible)
return;
foreach (var child in Children.OfType<ILSpyTreeNode>())
ApplyFilterToChild(child);
}
void ApplyFilterToChild(ILSpyTreeNode child)
{
var settings = CurrentLanguageSettings;

Loading…
Cancel
Save