Skip to content

Commit

Permalink
Fix #3281: Help -> About is broken
Browse files Browse the repository at this point in the history
  • Loading branch information
tom-englert committed Sep 21, 2024
1 parent bf2cf93 commit 4b7377a
Showing 1 changed file with 27 additions and 41 deletions.
68 changes: 27 additions & 41 deletions ILSpy/AssemblyTree/AssemblyTreeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -502,36 +502,26 @@ public void SelectNode(SharpTreeNode node, bool inNewTabPage = false)
}
}

internal void SelectNodes(IEnumerable<SharpTreeNode> nodes, bool ignoreCompilationRequests = false)
internal void SelectNodes(IEnumerable<SharpTreeNode> 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);
}

/// <summary>
Expand Down Expand Up @@ -700,15 +690,18 @@ public void LoadAssemblies(IEnumerable<string> fileNames, List<LoadedAssembly> l

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());
Expand All @@ -728,13 +721,8 @@ void ContextMenuClosed(object sender, EventArgs e)
}
}

private bool ignoreDecompilationRequests;

public void DecompileSelectedNodes(DecompilerTextViewState newState = null, bool recordHistory = true)
{
if (ignoreDecompilationRequests)
return;

var activeTabPage = DockWorkspace.Instance.ActiveTabPage;

if (recordHistory)
Expand Down Expand Up @@ -790,7 +778,7 @@ public void NavigateHistory(bool forward)

DockWorkspace.Instance.ActiveTabPage = newState.TabPage;

SelectNodes(newState.TreeNodes, ignoreCompilationRequests: true);
SelectNodes(newState.TreeNodes);
DecompileSelectedNodes(newState.ViewState as DecompilerTextViewState, false);
}

Expand Down Expand Up @@ -845,7 +833,7 @@ void RecordHistory()
if (currentState != null)
history.UpdateCurrent(new NavigationState(tabPage, currentState));

UnselectAll(ignoreCompilationRequests: true);
UnselectAll();

history.Record(new NavigationState(tabPage, new ViewState { ViewedUri = e.Uri }));
}
Expand All @@ -861,11 +849,9 @@ public void Refresh()
}
}

public void UnselectAll(bool ignoreCompilationRequests = false)
private void UnselectAll()
{
this.ignoreDecompilationRequests = ignoreCompilationRequests;
SelectedItems.Clear();
this.ignoreDecompilationRequests = false;
}

public IEnumerable<SharpTreeNode> GetTopLevelSelection()
Expand Down

0 comments on commit 4b7377a

Please sign in to comment.