diff --git a/src/Avalonia.Diagnostics/Diagnostics/DevTools.cs b/src/Avalonia.Diagnostics/Diagnostics/DevTools.cs index ff49d0dd87..2101ece5c0 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/DevTools.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/DevTools.cs @@ -104,7 +104,7 @@ namespace Avalonia.Diagnostics if (topLevelGroup.Items.Count == 1 && topLevelGroup.Items is not INotifyCollectionChanged) { var singleTopLevel = topLevelGroup.Items.First(); - + foreach (var group in s_open) { if (group.Key.Items.Contains(singleTopLevel)) @@ -115,7 +115,7 @@ namespace Avalonia.Diagnostics } } } - + var window = new MainWindow { Root = root, @@ -144,5 +144,23 @@ namespace Avalonia.Diagnostics window.Closed -= DevToolsClosed; s_open.Remove((IDevToolsTopLevelGroup)window.Tag!); } + + internal static bool DoesBelongToDevTool(this Visual v) + { + var topLevel = TopLevel.GetTopLevel(v); + + while (topLevel is not null && topLevel is not Views.MainWindow) + { + if (topLevel is Avalonia.Controls.Primitives.PopupRoot pr) + { + topLevel = pr.ParentTopLevel; + } + else + { + return false; + } + } + return true; + } } } diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs index 0002107ee0..b504a10695 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs @@ -66,7 +66,7 @@ namespace Avalonia.Diagnostics.ViewModels { if (!_isRegistered || IsEnabled == false) return; - if (sender is Visual v && BelongsToDevTool(v)) + if (sender is Visual v && v.DoesBelongToDevTool()) return; var s = sender!; @@ -101,7 +101,7 @@ namespace Avalonia.Diagnostics.ViewModels { if (!_isRegistered || IsEnabled == false) return; - if (e.Source is Visual v && BelongsToDevTool(v)) + if (e.Source is Visual v && v.DoesBelongToDevTool()) return; var s = e.Source; @@ -126,21 +126,6 @@ namespace Avalonia.Diagnostics.ViewModels handler(); } - private static bool BelongsToDevTool(Visual v) - { - var current = v; - - while (current != null) - { - if (current is MainView || current is MainWindow) - { - return true; - } - - current = current.VisualParent; - } - return false; - } } } diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs index 5daa480702..99baefc9e4 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs @@ -2,7 +2,6 @@ using System.ComponentModel; using System.Runtime.CompilerServices; using Avalonia.Controls; -using Avalonia.Diagnostics.Models; using Avalonia.Input; using Avalonia.Metadata; using Avalonia.Threading; @@ -10,7 +9,6 @@ using Avalonia.Reactive; using Avalonia.Rendering; using System.Collections.Generic; using Avalonia.Media; -using Avalonia.Controls.Primitives; namespace Avalonia.Diagnostics.ViewModels { @@ -269,13 +267,9 @@ namespace Avalonia.Diagnostics.ViewModels _currentFocusHighlightAdorner?.Dispose(); if (FocusHighlighter is IBrush brush && element is InputElement input - && TopLevel.GetTopLevel(input) is { } topLevel - && (topLevel is not Views.MainWindow)) + && !input.DoesBelongToDevTool() + ) { - if (topLevel is PopupRoot pr && pr.ParentTopLevel is Views.MainWindow) - { - return; - } _currentFocusHighlightAdorner = Controls.ControlHighlightAdorner.Add(input, brush); } }