浏览代码

Move topmost to WindowBase

CommonGuy 7 年之前
父节点
当前提交
42121ec2c1

+ 5 - 0
src/Avalonia.Controls/Platform/IWindowBaseImpl.cs

@@ -72,6 +72,11 @@ namespace Avalonia.Platform
         /// 
         void SetMinMaxSize(Size minSize, Size maxSize);
 
+        /// <summary>
+        /// Sets whether this window appears on top of all other windows
+        /// </summary>
+        void SetTopmost(bool value);
+
         /// <summary>
         /// Gets platform specific display information
         /// </summary>

+ 0 - 5
src/Avalonia.Controls/Platform/IWindowImpl.cs

@@ -55,11 +55,6 @@ namespace Avalonia.Platform
         /// </summary>
         void CanResize(bool value);
 
-        /// <summary>
-        /// Gets or sets whether this window appears on top of all other windows
-        /// </summary>
-        void SetTopmost(bool value);
-
         /// <summary>
         /// Gets or sets a method called before the underlying implementation is destroyed.
         /// Return true to prevent the underlying implementation from closing.

+ 0 - 14
src/Avalonia.Controls/Window.cs

@@ -104,9 +104,6 @@ namespace Avalonia.Controls
         public static readonly StyledProperty<bool> CanResizeProperty =
             AvaloniaProperty.Register<Window, bool>(nameof(CanResize), true);
 
-        public static readonly StyledProperty<bool> TopmostProperty =
-            AvaloniaProperty.Register<Window, bool>(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<Window>((w, e) => w.PlatformImpl?.CanResize((bool)e.NewValue));
 
-            TopmostProperty.Changed.AddClassHandler<Window>((w, e) => w.PlatformImpl?.SetTopmost((bool)e.NewValue));
-
             WindowStateProperty.Changed.AddClassHandler<Window>(
                 (w, e) => { if (w.PlatformImpl != null) w.PlatformImpl.WindowState = (WindowState)e.NewValue; });
         }
@@ -235,15 +230,6 @@ namespace Avalonia.Controls
             set { SetValue(CanResizeProperty, value); }
         }
 
-        /// <summary>
-        /// Gets or sets whether this window appears on top of all other windows
-        /// </summary>
-        public bool Topmost
-        {
-            get { return GetValue(TopmostProperty); }
-            set { SetValue(TopmostProperty, value); }
-        }
-
         /// <summary>
         /// Gets or sets the icon of the window.
         /// </summary>

+ 14 - 0
src/Avalonia.Controls/WindowBase.cs

@@ -38,6 +38,9 @@ namespace Avalonia.Controls
                 o => o.Owner,
                 (o, v) => o.Owner = v);
 
+        public static readonly StyledProperty<bool> TopmostProperty =
+            AvaloniaProperty.Register<WindowBase, bool>(nameof(Topmost));
+
         private bool _hasExecutedInitialLayoutPass;
         private bool _isActive;
         private bool _ignoreVisibilityChange;
@@ -52,6 +55,8 @@ namespace Avalonia.Controls
             MinHeightProperty.Changed.AddClassHandler<WindowBase>((w, e) => w.PlatformImpl?.SetMinMaxSize(new Size(w.MinWidth, (double)e.NewValue), new Size(w.MaxWidth, w.MaxHeight)));
             MaxWidthProperty.Changed.AddClassHandler<WindowBase>((w, e) => w.PlatformImpl?.SetMinMaxSize(new Size(w.MinWidth, w.MinHeight), new Size((double)e.NewValue, w.MaxHeight)));
             MaxHeightProperty.Changed.AddClassHandler<WindowBase>((w, e) => w.PlatformImpl?.SetMinMaxSize(new Size(w.MinWidth, w.MinHeight), new Size(w.MaxWidth, (double)e.NewValue)));
+            
+            TopmostProperty.Changed.AddClassHandler<WindowBase>((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); }
         }
 
+        /// <summary>
+        /// Gets or sets whether this window appears on top of all other windows
+        /// </summary>
+        public bool Topmost
+        {
+            get { return GetValue(TopmostProperty); }
+            set { SetValue(TopmostProperty, value); }
+        }
+
         /// <summary>
         /// Activates the window.
         /// </summary>

+ 2 - 0
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;

+ 0 - 2
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
         {

+ 1 - 0
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()
         {

+ 0 - 5
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