Browse Source

Fix DevTools FiredEvent failing on reused RoutedEventArgs (#15489)

pull/15498/head
Max Katz 2 years ago
committed by GitHub
parent
commit
acdabef81a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 8
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs

8
src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs

@ -8,24 +8,28 @@ namespace Avalonia.Diagnostics.ViewModels
internal class FiredEvent : ViewModelBase internal class FiredEvent : ViewModelBase
{ {
private readonly RoutedEventArgs _eventArgs; private readonly RoutedEventArgs _eventArgs;
private readonly RoutedEvent? _originalEvent;
private EventChainLink? _handledBy; private EventChainLink? _handledBy;
public FiredEvent(RoutedEventArgs eventArgs, EventChainLink originator, DateTime triggerTime) public FiredEvent(RoutedEventArgs eventArgs, EventChainLink originator, DateTime triggerTime)
{ {
_eventArgs = eventArgs ?? throw new ArgumentNullException(nameof(eventArgs)); _eventArgs = eventArgs ?? throw new ArgumentNullException(nameof(eventArgs));
Originator = originator ?? throw new ArgumentNullException(nameof(originator)); Originator = originator ?? throw new ArgumentNullException(nameof(originator));
_originalEvent = _eventArgs.RoutedEvent;
AddToChain(originator); AddToChain(originator);
TriggerTime = triggerTime; TriggerTime = triggerTime;
} }
public bool IsPartOfSameEventChain(RoutedEventArgs e) public bool IsPartOfSameEventChain(RoutedEventArgs e)
{ {
return e == _eventArgs; // Note, Avalonia might reuse RoutedEventArgs for different events to avoid extra allocations.
// Like, PointerEntered and PointerExited will use the same instance of RoutedEventArgs.
return e == _eventArgs && e.RoutedEvent == _originalEvent;
} }
public DateTime TriggerTime { get; } public DateTime TriggerTime { get; }
public RoutedEvent Event => _eventArgs.RoutedEvent!; public RoutedEvent Event => _originalEvent!;
public bool IsHandled => HandledBy?.Handled == true; public bool IsHandled => HandledBy?.Handled == true;

Loading…
Cancel
Save