diff --git a/src/Avalonia.Controls/IMenu.cs b/src/Avalonia.Controls/IMenu.cs
index 937f135e90..426955b682 100644
--- a/src/Avalonia.Controls/IMenu.cs
+++ b/src/Avalonia.Controls/IMenu.cs
@@ -23,6 +23,6 @@ namespace Avalonia.Controls
///
/// Gets the root of the visual tree, if the control is attached to a visual tree.
///
- TopLevel? VisualRoot { get; }
+ TopLevel? TopLevel { get; }
}
}
diff --git a/src/Avalonia.Controls/MenuBase.cs b/src/Avalonia.Controls/MenuBase.cs
index 337128fcd1..bde5bb17de 100644
--- a/src/Avalonia.Controls/MenuBase.cs
+++ b/src/Avalonia.Controls/MenuBase.cs
@@ -75,7 +75,7 @@ namespace Avalonia.Controls
///
IMenuInteractionHandler IMenu.InteractionHandler => InteractionHandler;
- TopLevel? IMenu.VisualRoot => TopLevel.GetTopLevel(this);
+ TopLevel? IMenu.TopLevel => TopLevel.GetTopLevel(this);
///
IMenuItem? IMenuElement.SelectedItem
diff --git a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
index a15a9e2df1..f8d8c43d3c 100644
--- a/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
+++ b/src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
@@ -300,7 +300,7 @@ namespace Avalonia.Controls.Platform
Menu.AddHandler(MenuItem.PointerExitedItemEvent, PointerExited);
Menu.AddHandler(InputElement.PointerMovedEvent, PointerMoved);
- _root = Menu.VisualRoot;
+ _root = Menu.TopLevel;
if (_root is not null)
{
diff --git a/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs b/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs
index f2fef55d28..b7d6ab4ce5 100644
--- a/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs
+++ b/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs
@@ -265,7 +265,7 @@ namespace Avalonia.Controls.Remote.Server
protected virtual Size Measure(Size constraint)
{
- var l = (Layoutable) InputRoot!;
+ var l = (Layoutable)InputRoot!.RootElement!;
l.Measure(constraint);
return l.DesiredSize;
}
diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs
index c931b1a6fb..602381d7c9 100644
--- a/src/Avalonia.X11/X11Window.cs
+++ b/src/Avalonia.X11/X11Window.cs
@@ -267,7 +267,9 @@ namespace Avalonia.X11
? DBusSystemDialog.TryCreateAsync(Handle)
: Task.FromResult(null),
() => GtkSystemDialog.TryCreate(this),
- () => Task.FromResult(InputRoot is TopLevel tl
+ // TODO: This will be incompatible with "root element is not a TopLevel" scenarios,
+ // we should probably have a separate API for this
+ () => Task.FromResult(InputRoot.RootElement is TopLevel tl
? (IStorageProvider?)new ManagedStorageProvider(tl)
: null)
});
diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs
index 52caba2a6f..122f867db8 100644
--- a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs
@@ -1170,7 +1170,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var ev = new PointerPressedEventArgs(
popupContent,
pointer,
- (PopupRoot)popupContent.VisualRoot!,
+ (PopupRoot)TopLevel.GetTopLevel(popupContent)!,
new Point(50 , 50),
0,
new PointerPointProperties(RawInputModifiers.None, PointerUpdateKind.LeftButtonPressed),
diff --git a/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs b/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs
index 0e4a75f521..721876312c 100644
--- a/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ToolTipTests.cs
@@ -38,7 +38,7 @@ namespace Avalonia.Controls.UnitTests
{
_toolTipOpenSubscription = ToolTip.IsOpenProperty.Changed.Subscribe(new AnonymousObserver>(e =>
{
- if (e.Sender is Visual { VisualRoot: TopLevel {} root } visual)
+ if (e.Sender is Visual visual && TopLevel.GetTopLevel(visual) is {} root)
OverlayLayer.GetOverlayLayer(visual)?.Measure(root.ClientSize);
}));
}
@@ -577,7 +577,7 @@ namespace Avalonia.Controls.UnitTests
hitTesterMock.Setup(m => m.HitTestFirst(point, window, It.IsAny>()))
.Returns(control);
- var root = (IInputRoot?)control?.VisualRoot?.PresentationSource ?? window.InputRoot;
+ var root = control?.GetInputRoot() ?? window.InputRoot;
var timestamp = (ulong)DateTime.Now.Ticks;
windowImpl.Object.Input!(new RawPointerEventArgs(s_mouseDevice, timestamp, root,