diff --git a/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs b/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs
index 4f7ac82df7..9ba68f584e 100644
--- a/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs
+++ b/src/Avalonia.Controls/Platform/IWindowBaseImpl.cs
@@ -72,6 +72,11 @@ namespace Avalonia.Platform
///
void SetMinMaxSize(Size minSize, Size maxSize);
+ ///
+ /// Sets whether this window appears on top of all other windows
+ ///
+ void SetTopmost(bool value);
+
///
/// Gets platform specific display information
///
diff --git a/src/Avalonia.Controls/Platform/IWindowImpl.cs b/src/Avalonia.Controls/Platform/IWindowImpl.cs
index 093e9bc57c..f1f3925133 100644
--- a/src/Avalonia.Controls/Platform/IWindowImpl.cs
+++ b/src/Avalonia.Controls/Platform/IWindowImpl.cs
@@ -55,11 +55,6 @@ namespace Avalonia.Platform
///
void CanResize(bool value);
- ///
- /// Gets or sets whether this window appears on top of all other windows
- ///
- void SetTopmost(bool value);
-
///
/// Gets or sets a method called before the underlying implementation is destroyed.
/// Return true to prevent the underlying implementation from closing.
diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs
index 1943225b00..3cbfdbd657 100644
--- a/src/Avalonia.Controls/Window.cs
+++ b/src/Avalonia.Controls/Window.cs
@@ -104,9 +104,6 @@ namespace Avalonia.Controls
public static readonly StyledProperty CanResizeProperty =
AvaloniaProperty.Register(nameof(CanResize), true);
- public static readonly StyledProperty TopmostProperty =
- AvaloniaProperty.Register(nameof(Topmost));
-
private readonly NameScope _nameScope = new NameScope();
private object _dialogResult;
private readonly Size _maxPlatformClientSize;
@@ -128,8 +125,6 @@ namespace Avalonia.Controls
CanResizeProperty.Changed.AddClassHandler((w, e) => w.PlatformImpl?.CanResize((bool)e.NewValue));
- TopmostProperty.Changed.AddClassHandler((w, e) => w.PlatformImpl?.SetTopmost((bool)e.NewValue));
-
WindowStateProperty.Changed.AddClassHandler(
(w, e) => { if (w.PlatformImpl != null) w.PlatformImpl.WindowState = (WindowState)e.NewValue; });
}
@@ -235,15 +230,6 @@ namespace Avalonia.Controls
set { SetValue(CanResizeProperty, value); }
}
- ///
- /// Gets or sets whether this window appears on top of all other windows
- ///
- public bool Topmost
- {
- get { return GetValue(TopmostProperty); }
- set { SetValue(TopmostProperty, value); }
- }
-
///
/// Gets or sets the icon of the window.
///
diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs
index c427df1c26..5d66bee2f8 100644
--- a/src/Avalonia.Controls/WindowBase.cs
+++ b/src/Avalonia.Controls/WindowBase.cs
@@ -38,6 +38,9 @@ namespace Avalonia.Controls
o => o.Owner,
(o, v) => o.Owner = v);
+ public static readonly StyledProperty TopmostProperty =
+ AvaloniaProperty.Register(nameof(Topmost));
+
private bool _hasExecutedInitialLayoutPass;
private bool _isActive;
private bool _ignoreVisibilityChange;
@@ -52,6 +55,8 @@ namespace Avalonia.Controls
MinHeightProperty.Changed.AddClassHandler((w, e) => w.PlatformImpl?.SetMinMaxSize(new Size(w.MinWidth, (double)e.NewValue), new Size(w.MaxWidth, w.MaxHeight)));
MaxWidthProperty.Changed.AddClassHandler((w, e) => w.PlatformImpl?.SetMinMaxSize(new Size(w.MinWidth, w.MinHeight), new Size((double)e.NewValue, w.MaxHeight)));
MaxHeightProperty.Changed.AddClassHandler((w, e) => w.PlatformImpl?.SetMinMaxSize(new Size(w.MinWidth, w.MinHeight), new Size(w.MaxWidth, (double)e.NewValue)));
+
+ TopmostProperty.Changed.AddClassHandler((w, e) => w.PlatformImpl?.SetTopmost((bool)e.NewValue));
}
public WindowBase(IWindowBaseImpl impl) : this(impl, AvaloniaLocator.Current)
@@ -124,6 +129,15 @@ namespace Avalonia.Controls
set { SetAndRaise(OwnerProperty, ref _owner, value); }
}
+ ///
+ /// Gets or sets whether this window appears on top of all other windows
+ ///
+ public bool Topmost
+ {
+ get { return GetValue(TopmostProperty); }
+ set { SetValue(TopmostProperty, value); }
+ }
+
///
/// Activates the window.
///
diff --git a/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs
index 94537d3475..8a880fd306 100644
--- a/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs
+++ b/src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs
@@ -416,6 +416,8 @@ namespace Avalonia.Gtk3
public void Hide() => Native.GtkWidgetHide(GtkWidget);
+ public void SetTopmost(bool value) => Native.GtkWindowSetKeepAbove(GtkWidget, value);
+
void GetGlobalPointer(out int x, out int y)
{
int mask;
diff --git a/src/Gtk/Avalonia.Gtk3/WindowImpl.cs b/src/Gtk/Avalonia.Gtk3/WindowImpl.cs
index 4756d33e0f..a0b754c229 100644
--- a/src/Gtk/Avalonia.Gtk3/WindowImpl.cs
+++ b/src/Gtk/Avalonia.Gtk3/WindowImpl.cs
@@ -82,8 +82,6 @@ namespace Avalonia.Gtk3
public void CanResize(bool value) => Native.GtkWindowSetResizable(GtkWidget, value);
- public void SetTopmost(bool value) => Native.GtkWindowSetKeepAbove(GtkWidget, value);
-
class EmptyDisposable : IDisposable
{
diff --git a/src/OSX/Avalonia.MonoMac/WindowBaseImpl.cs b/src/OSX/Avalonia.MonoMac/WindowBaseImpl.cs
index 8cbc6cbdd8..89cef59b53 100644
--- a/src/OSX/Avalonia.MonoMac/WindowBaseImpl.cs
+++ b/src/OSX/Avalonia.MonoMac/WindowBaseImpl.cs
@@ -123,6 +123,7 @@ namespace Avalonia.MonoMac
public void Hide() => Window?.OrderOut(Window);
+ public void SetTopmost(bool value) => Window.Level = value ? NSWindowLevel.Floating : NSWindowLevel.Normal;
public void BeginMoveDrag()
{
diff --git a/src/OSX/Avalonia.MonoMac/WindowImpl.cs b/src/OSX/Avalonia.MonoMac/WindowImpl.cs
index 34a0702f8c..a2f8df6791 100644
--- a/src/OSX/Avalonia.MonoMac/WindowImpl.cs
+++ b/src/OSX/Avalonia.MonoMac/WindowImpl.cs
@@ -116,11 +116,6 @@ namespace Avalonia.MonoMac
UpdateStyle();
}
- public void SetTopmost(bool value)
- {
- Window.Level = value ? NSWindowLevel.Floating : NSWindowLevel.Normal;
- }
-
public void SetTitle(string title) => Window.Title = title;
class ModalDisposable : IDisposable