Browse Source

Merge pull request #3335 from tom-englert/Issue##3333

Fix #3333: Clicking does not select in Assemblies pane when it doesn't have focus
pull/3340/head
Siegfried Pammer 6 months ago committed by GitHub
parent
commit
53cf07cae9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      ILSpy/AssemblyTree/AssemblyListPane.xaml.cs
  2. 1
      ILSpy/AssemblyTree/AssemblyTreeModel.cs
  3. 9
      ILSpy/Controls/TreeView/SharpTreeView.cs

6
ILSpy/AssemblyTree/AssemblyListPane.xaml.cs

@ -23,6 +23,7 @@ using System.Windows.Threading; @@ -23,6 +23,7 @@ using System.Windows.Threading;
using ICSharpCode.ILSpy.ViewModels;
using ICSharpCode.ILSpyX.TreeView;
using TomsToolbox.Wpf;
using TomsToolbox.Wpf.Composition.AttributedModel;
namespace ICSharpCode.ILSpy.AssemblyTree
@ -56,7 +57,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree @@ -56,7 +57,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree
var selected = model.SelectedItem;
if (selected != null)
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Background, () => {
this.BeginInvoke(DispatcherPriority.Background, () => {
ScrollIntoView(selected);
this.SelectedItem = selected;
});
@ -69,7 +70,8 @@ namespace ICSharpCode.ILSpy.AssemblyTree @@ -69,7 +70,8 @@ namespace ICSharpCode.ILSpy.AssemblyTree
if (SelectedItem is SharpTreeNode selectedItem)
{
FocusNode(selectedItem);
// defer focusing, so it does not interfere with selection via mouse click
this.BeginInvoke(() => FocusNode(selectedItem));
}
else
{

1
ILSpy/AssemblyTree/AssemblyTreeModel.cs

@ -640,6 +640,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree @@ -640,6 +640,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree
private void JumpToReference(object? sender, NavigateToReferenceEventArgs e)
{
JumpToReferenceAsync(e.Reference, e.InNewTabPage).HandleExceptions();
IsActive = true;
}
/// <summary>

9
ILSpy/Controls/TreeView/SharpTreeView.cs

@ -30,6 +30,8 @@ using System.Windows.Threading; @@ -30,6 +30,8 @@ using System.Windows.Threading;
using ICSharpCode.ILSpyX.TreeView;
using TomsToolbox.Wpf;
namespace ICSharpCode.ILSpy.Controls.TreeView
{
public class SharpTreeView : ListView
@ -396,9 +398,10 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -396,9 +398,10 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
/// </summary>
public void FocusNode(SharpTreeNode node)
{
if (node == null)
throw new ArgumentNullException("node");
ArgumentNullException.ThrowIfNull(node);
ScrollIntoView(node);
// WPF's ScrollIntoView() uses the same if/dispatcher construct, so we call OnFocusItem() after the item was brought into view.
if (this.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
{
@ -406,7 +409,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -406,7 +409,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
else
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new DispatcherOperationCallback(this.OnFocusItem), node);
this.BeginInvoke(DispatcherPriority.Loaded, () => OnFocusItem(node));
}
}

Loading…
Cancel
Save