From 4b7377a0dedb721528e2376dc3e6144aaa825ba3 Mon Sep 17 00:00:00 2001 From: tom-englert Date: Sat, 21 Sep 2024 19:25:33 +0200 Subject: [PATCH] Fix #3281: Help -> About is broken --- ILSpy/AssemblyTree/AssemblyTreeModel.cs | 68 ++++++++++--------------- 1 file changed, 27 insertions(+), 41 deletions(-) diff --git a/ILSpy/AssemblyTree/AssemblyTreeModel.cs b/ILSpy/AssemblyTree/AssemblyTreeModel.cs index a62a0ce0f..3b4296180 100644 --- a/ILSpy/AssemblyTree/AssemblyTreeModel.cs +++ b/ILSpy/AssemblyTree/AssemblyTreeModel.cs @@ -502,36 +502,26 @@ namespace ICSharpCode.ILSpy.AssemblyTree } } - internal void SelectNodes(IEnumerable nodes, bool ignoreCompilationRequests = false) + internal void SelectNodes(IEnumerable nodes) { - this.ignoreDecompilationRequests = ignoreCompilationRequests; + // Ensure nodes exist + var nodesList = nodes.Select(n => FindNodeByPath(GetPathForNode(n), true)) + .Where(n => n != null) + .ToArray(); - try + if (!nodesList.Any() || nodesList.Any(n => n.AncestorsAndSelf().Any(a => a.IsHidden))) { - // Ensure nodes exist - var nodesList = nodes.Select(n => FindNodeByPath(GetPathForNode(n), true)) - .Where(n => n != null) - .ToArray(); - - if (!nodesList.Any() || nodesList.Any(n => n.AncestorsAndSelf().Any(a => a.IsHidden))) - { - return; - } - - if (SelectedItems.SequenceEqual(nodesList)) - { - Dispatcher.BeginInvoke(RefreshDecompiledView); - return; - } - - SelectedItems.Clear(); - SelectedItems.AddRange(nodesList); + return; } - finally + + if (SelectedItems.SequenceEqual(nodesList)) { - this.ignoreDecompilationRequests = false; + Dispatcher.BeginInvoke(RefreshDecompiledView); + return; } + SelectedItems.Clear(); + SelectedItems.AddRange(nodesList); } /// @@ -700,15 +690,18 @@ namespace ICSharpCode.ILSpy.AssemblyTree void TreeView_SelectionChanged() { - var delayDecompilationRequestDueToContextMenu = Mouse.RightButton == MouseButtonState.Pressed; - - if (!delayDecompilationRequestDueToContextMenu) - { - DecompileSelectedNodes(); - } - else + if (SelectedItems.Count > 0) { - ContextMenuProvider.ContextMenuClosed += ContextMenuClosed; + var delayDecompilationRequestDueToContextMenu = Mouse.RightButton == MouseButtonState.Pressed; + + if (!delayDecompilationRequestDueToContextMenu) + { + DecompileSelectedNodes(); + } + else + { + ContextMenuProvider.ContextMenuClosed += ContextMenuClosed; + } } MessageBus.Send(this, new AssemblyTreeSelectionChangedEventArgs()); @@ -728,13 +721,8 @@ namespace ICSharpCode.ILSpy.AssemblyTree } } - private bool ignoreDecompilationRequests; - public void DecompileSelectedNodes(DecompilerTextViewState newState = null, bool recordHistory = true) { - if (ignoreDecompilationRequests) - return; - var activeTabPage = DockWorkspace.Instance.ActiveTabPage; if (recordHistory) @@ -790,7 +778,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree DockWorkspace.Instance.ActiveTabPage = newState.TabPage; - SelectNodes(newState.TreeNodes, ignoreCompilationRequests: true); + SelectNodes(newState.TreeNodes); DecompileSelectedNodes(newState.ViewState as DecompilerTextViewState, false); } @@ -845,7 +833,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree if (currentState != null) history.UpdateCurrent(new NavigationState(tabPage, currentState)); - UnselectAll(ignoreCompilationRequests: true); + UnselectAll(); history.Record(new NavigationState(tabPage, new ViewState { ViewedUri = e.Uri })); } @@ -861,11 +849,9 @@ namespace ICSharpCode.ILSpy.AssemblyTree } } - public void UnselectAll(bool ignoreCompilationRequests = false) + private void UnselectAll() { - this.ignoreDecompilationRequests = ignoreCompilationRequests; SelectedItems.Clear(); - this.ignoreDecompilationRequests = false; } public IEnumerable GetTopLevelSelection()