Skip to content

Commit 3b01f68

Browse files
Fix Sentry interfering with MAUI's focus events (#1891)
1 parent e646fa2 commit 3b01f68

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
- Null check HttpContext in SystemWebVersionLocator ([#1881](https://github.com/getsentry/sentry-dotnet/pull/1881))
2929
- Fix detection of .NET Framework 4.8.1 ([#1885](https://github.com/getsentry/sentry-dotnet/pull/1885))
3030
- Flush caching transport with main flush ([#1890](https://github.com/getsentry/sentry-dotnet/pull/1890))
31+
- Fix Sentry interfering with MAUI's focus events ([#1891](https://github.com/getsentry/sentry-dotnet/pull/1891))
3132

3233
## 3.20.1
3334

src/Sentry.Maui/Internal/MauiEventsBinder.cs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.ComponentModel;
12
using System.Globalization;
23
using System.Reflection;
34
using Microsoft.Extensions.Options;
@@ -27,6 +28,7 @@ internal class MauiEventsBinder : IMauiEventsBinder
2728
private static readonly HashSet<Type> ExplicitlyHandledTypes = new()
2829
{
2930
typeof(Element),
31+
typeof(VisualElement),
3032
typeof(BindableObject),
3133
typeof(Application),
3234
typeof(Window),
@@ -61,6 +63,11 @@ private void BindApplicationEvents(Application application)
6163
// All elements have a set of common events we can hook
6264
BindElementEvents(e.Element);
6365

66+
if (e.Element is VisualElement visualElement)
67+
{
68+
BindVisualElementEvents(visualElement);
69+
}
70+
6471
// We'll use reflection to attach to other events
6572
// This allows us to attach to events from custom controls
6673
BindReflectedEvents(e.Element);
@@ -125,6 +132,13 @@ private void BindReflectedEvents(Element element)
125132
var events = elementType.GetEvents(BindingFlags.Instance | BindingFlags.Public);
126133
foreach (var eventInfo in events.Where(e => !ExplicitlyHandledTypes.Contains(e.DeclaringType!)))
127134
{
135+
var browsable = eventInfo.GetCustomAttribute<EditorBrowsableAttribute>();
136+
if (browsable != null && browsable.State != EditorBrowsableState.Always)
137+
{
138+
// These events are not meant for typical consumption.
139+
continue;
140+
}
141+
128142
Action<object, object> handler = (sender, _) =>
129143
{
130144
_hub.AddBreadcrumbForEvent(_options, sender, eventInfo.Name);
@@ -255,6 +269,30 @@ private void BindElementEvents(Element element)
255269
// element.PropertyChanged
256270
}
257271

272+
private void BindVisualElementEvents(VisualElement element)
273+
{
274+
element.Focused += (sender, e) =>
275+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.Focused), SystemType, RenderingCategory);
276+
277+
element.Unfocused += (sender, e) =>
278+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.Unfocused), SystemType, RenderingCategory);
279+
280+
element.Loaded += (sender, e) =>
281+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.Loaded), SystemType, RenderingCategory);
282+
283+
element.Unloaded += (sender, e) =>
284+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.Unloaded), SystemType, RenderingCategory);
285+
286+
element.ChildrenReordered += (sender, e) =>
287+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.ChildrenReordered), SystemType, RenderingCategory);
288+
289+
element.MeasureInvalidated += (sender, e) =>
290+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.MeasureInvalidated), SystemType, RenderingCategory);
291+
292+
element.SizeChanged += (sender, e) =>
293+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(VisualElement.SizeChanged), SystemType, RenderingCategory);
294+
}
295+
258296
private void BindShellEvents(Shell shell)
259297
{
260298
// Navigation events
@@ -309,8 +347,8 @@ private void BindButtonEvents(Button button)
309347
button.Clicked += (sender, _) =>
310348
_hub.AddBreadcrumbForEvent(_options, sender, nameof(Button.Clicked), UserType, UserActionCategory);
311349
button.Pressed += (sender, _) =>
312-
_hub.AddBreadcrumbForEvent(_options, sender, nameof(Button.Pressed), UserType,UserActionCategory);
350+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(Button.Pressed), UserType, UserActionCategory);
313351
button.Released += (sender, _) =>
314-
_hub.AddBreadcrumbForEvent(_options, sender, nameof(Button.Released), UserType,UserActionCategory);
352+
_hub.AddBreadcrumbForEvent(_options, sender, nameof(Button.Released), UserType, UserActionCategory);
315353
}
316354
}

0 commit comments

Comments
 (0)