Browse Source

Single menu context menus working. (#1808)

WojciechKrysiak 7 years ago
parent
commit
dbe8f748c9

+ 13 - 1
src/OSX/Avalonia.MonoMac/PopupImpl.cs

@@ -8,11 +8,23 @@ namespace Avalonia.MonoMac
         public PopupImpl()
         public PopupImpl()
         {
         {
             UpdateStyle();
             UpdateStyle();
+            Window.Level = NSWindowLevel.PopUpMenu;
         }
         }
 
 
         protected override NSWindowStyle GetStyle()
         protected override NSWindowStyle GetStyle()
         {
         {
             return NSWindowStyle.Borderless;
             return NSWindowStyle.Borderless;
         }
         }
+
+        protected override CustomWindow CreateCustomWindow() => new CustomPopupWindow(this);
+
+        private class CustomPopupWindow : CustomWindow
+        {
+            public CustomPopupWindow(WindowBaseImpl impl)
+                : base(impl)
+            { }
+
+            public override bool WorksWhenModal() => true;
+        }
     }
     }
-}
+}

+ 8 - 8
src/OSX/Avalonia.MonoMac/WindowBaseImpl.cs

@@ -19,14 +19,13 @@ namespace Avalonia.MonoMac
         public WindowBaseImpl()
         public WindowBaseImpl()
         {
         {
             _managedDrag = new ManagedWindowResizeDragHelper(this, _ => { }, ResizeForManagedDrag);
             _managedDrag = new ManagedWindowResizeDragHelper(this, _ => { }, ResizeForManagedDrag);
-            Window = new CustomWindow(this)
-            {
-                StyleMask = NSWindowStyle.Titled,
-                BackingType = NSBackingStore.Buffered,
-                ContentView = View,
-                // ReSharper disable once VirtualMemberCallInConstructor
-                Delegate = CreateWindowDelegate()
-            };
+            // ReSharper disable once VirtualMemberCallInConstructor
+            Window = CreateCustomWindow();
+            Window.StyleMask = NSWindowStyle.Titled;
+            Window.BackingType = NSBackingStore.Buffered;
+            Window.ContentView = View;
+            // ReSharper disable once VirtualMemberCallInConstructor
+            Window.Delegate = CreateWindowDelegate();
         }
         }
 
 
         public class CustomWindow : NSWindow
         public class CustomWindow : NSWindow
@@ -57,6 +56,7 @@ namespace Avalonia.MonoMac
             public void SetCanBecomeKeyAndMain() => _canBecomeKeyAndMain = true;
             public void SetCanBecomeKeyAndMain() => _canBecomeKeyAndMain = true;
         }
         }
 
 
+        protected virtual CustomWindow CreateCustomWindow() => new CustomWindow(this);
         protected virtual NSWindowDelegate CreateWindowDelegate() => new WindowBaseDelegate(this);
         protected virtual NSWindowDelegate CreateWindowDelegate() => new WindowBaseDelegate(this);
 
 
         public class WindowBaseDelegate : NSWindowDelegate
         public class WindowBaseDelegate : NSWindowDelegate