From a01fb157e400befa2e477549867d22a0cabec3e3 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Mon, 21 Dec 2020 12:53:31 +0200 Subject: [PATCH 1/4] add some tests for contextmenu open without params --- .../ContextMenuTests.cs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs b/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs index 39a32506862..f3a1316c7d2 100644 --- a/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs @@ -44,6 +44,55 @@ public void Opening_Raises_Single_Opened_Event() } } + [Fact] + public void Open_Should_Use_Default_Control() + { + using (Application()) + { + var sut = new ContextMenu(); + var target = new Panel + { + ContextMenu = sut + }; + + var window = new Window { Content = target }; + window.ApplyTemplate(); + window.Presenter.ApplyTemplate(); + + bool opened = false; + + sut.MenuOpened += (sender, args) => + { + opened = true; + }; + + sut.Open(); + + Assert.True(opened); + } + } + + [Fact] + public void Open_Should_Raise_Exception_If_AlreadyDetached() + { + using (Application()) + { + var sut = new ContextMenu(); + var target = new Panel + { + ContextMenu = sut + }; + + var window = new Window { Content = target }; + window.ApplyTemplate(); + window.Presenter.ApplyTemplate(); + + target.ContextMenu = null; + + Assert.ThrowsAny(()=> sut.Open()); + } + } + [Fact] public void Closing_Raises_Single_Closed_Event() { From a045e963ac2a6def331ace62b977b52bc89636b6 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Mon, 21 Dec 2020 12:54:23 +0200 Subject: [PATCH 2/4] ContextMenu.Open should call Open(null) so it doesn't break working scenarios --- src/Avalonia.Controls/ContextMenu.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/ContextMenu.cs b/src/Avalonia.Controls/ContextMenu.cs index 5e17182f3e3..fb8080f0d4f 100644 --- a/src/Avalonia.Controls/ContextMenu.cs +++ b/src/Avalonia.Controls/ContextMenu.cs @@ -246,7 +246,7 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs /// /// Opens the menu. /// - public override void Open() => throw new NotSupportedException(); + public override void Open() => Open(null); /// /// Opens a context menu on the specified control. From 90344d4c03fd0b983fd0de59f9a4c4905dfc5057 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Mon, 4 Jan 2021 11:39:11 +0200 Subject: [PATCH 3/4] fix #5217 native immediate crash on 0,0 rendering popup/window macos --- native/Avalonia.Native/src/OSX/rendertarget.mm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/native/Avalonia.Native/src/OSX/rendertarget.mm b/native/Avalonia.Native/src/OSX/rendertarget.mm index 00b6dab2193..9ec08853e19 100644 --- a/native/Avalonia.Native/src/OSX/rendertarget.mm +++ b/native/Avalonia.Native/src/OSX/rendertarget.mm @@ -111,7 +111,11 @@ -(void) dealloc if(_renderbuffer != 0) glDeleteRenderbuffers(1, &_renderbuffer); } - CFRelease(surface); + + if(surface != nullptr) + { + CFRelease(surface); + } } @end From 78c2415462c98ae4c3fbef100a005e067fe13920 Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Mon, 4 Jan 2021 11:39:11 +0200 Subject: [PATCH 4/4] ensure we have valid surface with min size (1,1) --- native/Avalonia.Native/src/OSX/rendertarget.mm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/native/Avalonia.Native/src/OSX/rendertarget.mm b/native/Avalonia.Native/src/OSX/rendertarget.mm index 9ec08853e19..b2d4341bb9d 100644 --- a/native/Avalonia.Native/src/OSX/rendertarget.mm +++ b/native/Avalonia.Native/src/OSX/rendertarget.mm @@ -149,6 +149,12 @@ - (CALayer *)layer { } - (void)resize:(AvnPixelSize)size withScale: (float) scale{ + + if(size.Height <= 0) + size.Height = 1; + if(size.Width <= 0) + size.Width = 1; + @synchronized (lock) { if(surface == nil || surface->size.Width != size.Width