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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with
24 additions and
27 deletions
-
src/Avalonia.Diagnostics/Diagnostics/DevTools.cs
-
src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs
-
src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|