Browse Source

feat(DevTools): Avoid events reporting coming from the DevTools popup. (#14826)

* feat(DevTools): Avoid events reporting coming from the DevTools popup.

* fix: Address review
pull/14856/head
workgroupengineering 3 years ago
committed by GitHub
parent
commit
1d785863b9
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 22
      src/Avalonia.Diagnostics/Diagnostics/DevTools.cs
  2. 19
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs
  3. 10
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs

22
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;
}
}
}

19
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;
}
}
}

10
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);
}
}

Loading…
Cancel
Save