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
{
private readonly RoutedEventArgs _eventArgs;
private readonly RoutedEvent? _originalEvent;
private EventChainLink? _handledBy;
public FiredEvent(RoutedEventArgs eventArgs, EventChainLink originator, DateTime triggerTime)
{
_eventArgs = eventArgs ?? throw new ArgumentNullException(nameof(eventArgs));
Originator = originator ?? throw new ArgumentNullException(nameof(originator));
_originalEvent = _eventArgs.RoutedEvent;
AddToChain(originator);
TriggerTime = triggerTime;
}
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 RoutedEvent Event => _eventArgs.RoutedEvent!;
public RoutedEvent Event => _originalEvent!;
public bool IsHandled => HandledBy?.Handled == true;

Loading…
Cancel
Save