Skip to content

Commit b4a44f8

Browse files
author
tom-englert
committed
Fix navigation history
1 parent 4b7377a commit b4a44f8

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

ILSpy/AssemblyTree/AssemblyTreeModel.cs

+19-15
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ private void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
9494
case nameof(SessionSettings.Theme):
9595
// update syntax highlighting and force reload (AvalonEdit does not automatically refresh on highlighting change)
9696
DecompilerTextView.RegisterHighlighting();
97-
DecompileSelectedNodes(
98-
DockWorkspace.Instance.ActiveTabPage.GetState() as DecompilerTextViewState);
97+
DecompileSelectedNodes(DockWorkspace.Instance.ActiveTabPage.GetState() as DecompilerTextViewState);
9998
break;
10099
case nameof(SessionSettings.CurrentCulture):
101100
MessageBox.Show(Properties.Resources.SettingsChangeRestartRequired, "ILSpy");
@@ -107,7 +106,7 @@ private void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
107106
switch (e.PropertyName)
108107
{
109108
case nameof(LanguageSettings.Language) or nameof(LanguageSettings.LanguageVersion):
110-
DecompileSelectedNodes(recordHistory: false);
109+
DecompileSelectedNodes();
111110
break;
112111
}
113112
}
@@ -692,7 +691,20 @@ void TreeView_SelectionChanged()
692691
{
693692
if (SelectedItems.Count > 0)
694693
{
695-
var delayDecompilationRequestDueToContextMenu = Mouse.RightButton == MouseButtonState.Pressed;
694+
bool isRightButtonPressed = Mouse.RightButton == MouseButtonState.Pressed;
695+
bool isLeftButtonPressed = Mouse.LeftButton == MouseButtonState.Pressed;
696+
697+
if (isLeftButtonPressed || isRightButtonPressed)
698+
{
699+
// record history only if change is initiated by user
700+
var activeTabPage = DockWorkspace.Instance.ActiveTabPage;
701+
var currentState = activeTabPage.GetState();
702+
if (currentState != null)
703+
history.UpdateCurrent(new NavigationState(activeTabPage, currentState));
704+
history.Record(new NavigationState(activeTabPage, SelectedItems));
705+
}
706+
707+
var delayDecompilationRequestDueToContextMenu = isRightButtonPressed;
696708

697709
if (!delayDecompilationRequestDueToContextMenu)
698710
{
@@ -721,18 +733,10 @@ void ContextMenuClosed(object sender, EventArgs e)
721733
}
722734
}
723735

724-
public void DecompileSelectedNodes(DecompilerTextViewState newState = null, bool recordHistory = true)
736+
private void DecompileSelectedNodes(DecompilerTextViewState newState = null)
725737
{
726738
var activeTabPage = DockWorkspace.Instance.ActiveTabPage;
727739

728-
if (recordHistory)
729-
{
730-
var currentState = activeTabPage.GetState();
731-
if (currentState != null)
732-
history.UpdateCurrent(new NavigationState(activeTabPage, currentState));
733-
history.Record(new NavigationState(activeTabPage, SelectedItems));
734-
}
735-
736740
activeTabPage.SupportsLanguageSwitching = true;
737741

738742
if (SelectedItems.Count == 1)
@@ -742,7 +746,7 @@ public void DecompileSelectedNodes(DecompilerTextViewState newState = null, bool
742746
}
743747
if (newState?.ViewedUri != null)
744748
{
745-
MainWindow.Instance.AssemblyTreeModel.NavigateTo(new(newState.ViewedUri, null), recordHistory: false);
749+
NavigateTo(new(newState.ViewedUri, null), recordHistory: false);
746750
return;
747751
}
748752

@@ -779,7 +783,6 @@ public void NavigateHistory(bool forward)
779783
DockWorkspace.Instance.ActiveTabPage = newState.TabPage;
780784

781785
SelectNodes(newState.TreeNodes);
782-
DecompileSelectedNodes(newState.ViewState as DecompilerTextViewState, false);
783786
}
784787

785788
public bool CanNavigateBack => history.CanNavigateBack;
@@ -802,6 +805,7 @@ internal void NavigateTo(RequestNavigateEventArgs e, bool recordHistory = true,
802805
e.Handled = true;
803806
return;
804807
}
808+
805809
AvalonEditTextOutput output = new AvalonEditTextOutput {
806810
Address = e.Uri,
807811
Title = e.Uri.AbsolutePath,

0 commit comments

Comments
 (0)