From 22c5a5e6a1b0443488e5bddb037f1dece754e277 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 16 May 2019 17:43:43 +0200 Subject: [PATCH 1/2] Fix usage of AddClassHandler in non-static ctor. Property `AddClassHandler`s should only be added in static constructors. In this case it's not so important because `FocusManager` is a singleton, but best to fix the usage anyway. Fixes #2315. --- src/Avalonia.Input/FocusManager.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Input/FocusManager.cs b/src/Avalonia.Input/FocusManager.cs index 102da6efc4..28fb26dca4 100644 --- a/src/Avalonia.Input/FocusManager.cs +++ b/src/Avalonia.Input/FocusManager.cs @@ -23,7 +23,7 @@ namespace Avalonia.Input /// /// Initializes a new instance of the class. /// - public FocusManager() + static FocusManager() { InputElement.PointerPressedEvent.AddClassHandler( typeof(IInputElement), @@ -174,7 +174,7 @@ namespace Avalonia.Input /// /// The event sender. /// The event args. - private void OnPreviewPointerPressed(object sender, RoutedEventArgs e) + private static void OnPreviewPointerPressed(object sender, RoutedEventArgs e) { var ev = (PointerPressedEventArgs)e; @@ -191,7 +191,7 @@ namespace Avalonia.Input if (element != null) { - Focus(element, NavigationMethod.Pointer, ev.InputModifiers); + Instance?.Focus(element, NavigationMethod.Pointer, ev.InputModifiers); } } } From fb08f031094c8904855c1b474bf64a2dd9c3ac34 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 16 May 2019 17:44:26 +0200 Subject: [PATCH 2/2] Add a note to fix usage of AddClassHandler. I plan on replacing DevTools with something newer soon, so just add a FIXME comment for now. --- src/Avalonia.Diagnostics/ViewModels/EventTreeNode.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Avalonia.Diagnostics/ViewModels/EventTreeNode.cs b/src/Avalonia.Diagnostics/ViewModels/EventTreeNode.cs index 59c0f82414..7ece790310 100644 --- a/src/Avalonia.Diagnostics/ViewModels/EventTreeNode.cs +++ b/src/Avalonia.Diagnostics/ViewModels/EventTreeNode.cs @@ -56,6 +56,7 @@ namespace Avalonia.Diagnostics.ViewModels { if (IsEnabled.GetValueOrDefault() && !_isRegistered) { + // FIXME: This leaks event handlers. _event.AddClassHandler(typeof(object), HandleEvent, (RoutingStrategies)7, handledEventsToo: true); _isRegistered = true; }