Browse Source

Merge pull request #6702 from YohDeadfall/fix-dev-tools-events

Fixed handled event misses in dev tools
release/0.10.9
Tako 5 years ago
committed by Dan Walmsley
parent
commit
df77f18bae
  1. 2
      src/Avalonia.Diagnostics/Diagnostics/Models/EventChainLink.cs
  2. 26
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs
  3. 5
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/FiredEvent.cs

2
src/Avalonia.Diagnostics/Diagnostics/Models/EventChainLink.cs

@ -29,7 +29,7 @@ namespace Avalonia.Diagnostics.Models
} }
} }
public bool Handled { get; } public bool Handled { get; set; }
public RoutingStrategies Route { get; } public RoutingStrategies Route { get; }
} }

26
src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventTreeNode.cs

@ -55,6 +55,8 @@ namespace Avalonia.Diagnostics.ViewModels
// FIXME: This leaks event handlers. // FIXME: This leaks event handlers.
Event.AddClassHandler(typeof(object), HandleEvent, allRoutes, handledEventsToo: true); Event.AddClassHandler(typeof(object), HandleEvent, allRoutes, handledEventsToo: true);
Event.RouteFinished.Subscribe(HandleRouteFinished);
_isRegistered = true; _isRegistered = true;
} }
} }
@ -92,6 +94,30 @@ namespace Avalonia.Diagnostics.ViewModels
else else
handler(); handler();
} }
private void HandleRouteFinished(RoutedEventArgs e)
{
if (!_isRegistered || IsEnabled == false)
return;
if (e.Source is IVisual v && BelongsToDevTool(v))
return;
var s = e.Source;
var handled = e.Handled;
var route = e.Route;
void handler()
{
if (_currentEvent != null && handled)
{
var linkIndex = _currentEvent.EventChain.Count - 1;
var link = _currentEvent.EventChain[linkIndex];
link.Handled = true;
_currentEvent.HandledBy = link;
}
}
}
private static bool BelongsToDevTool(IVisual v) private static bool BelongsToDevTool(IVisual v)
{ {

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

@ -63,8 +63,8 @@ namespace Avalonia.Diagnostics.ViewModels
{ {
if (EventChain.Count > 0) if (EventChain.Count > 0)
{ {
var prevLink = EventChain[EventChain.Count-1]; var prevLink = EventChain[EventChain.Count - 1];
if (prevLink.Route != link.Route) if (prevLink.Route != link.Route)
{ {
link.BeginsNewRoute = true; link.BeginsNewRoute = true;
@ -72,6 +72,7 @@ namespace Avalonia.Diagnostics.ViewModels
} }
EventChain.Add(link); EventChain.Add(link);
if (HandledBy == null && link.Handled) if (HandledBy == null && link.Handled)
HandledBy = link; HandledBy = link;
} }

Loading…
Cancel
Save