From 004c7da6434ec20718736c29b8611997d2645fd2 Mon Sep 17 00:00:00 2001 From: Michael Babienco Date: Wed, 29 Jul 2020 11:50:17 -0400 Subject: [PATCH 1/3] Fix native menus not being setup properly Closes #4395 --- src/Avalonia.Native/AvaloniaNativeMenuExporter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 41ad988c34..07fe2b7d72 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -11,7 +11,7 @@ namespace Avalonia.Native class AvaloniaNativeMenuExporter : ITopLevelNativeMenuExporter { private IAvaloniaNativeFactory _factory; - private bool _resetQueued; + private bool _resetQueued = true; // so initial layout resets trigger a menu reset properly private bool _exported = false; private IAvnWindow _nativeWindow; private NativeMenu _menu; @@ -39,7 +39,7 @@ namespace Avalonia.Native public void SetNativeMenu(NativeMenu menu) { _menu = menu == null ? new NativeMenu() : menu; - + _resetQueued = true; // we've reset the menu to something new, so make sure that a reset is queued DoLayoutReset(); } From 4c4199f9d560bb46de9770f902e5505af5e7e1be Mon Sep 17 00:00:00 2001 From: Michael Babienco Date: Wed, 29 Jul 2020 12:28:21 -0400 Subject: [PATCH 2/3] Use default param instead of setting _resetQueued to true on menu set --- src/Avalonia.Native/AvaloniaNativeMenuExporter.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 07fe2b7d72..5a99249fee 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -39,8 +39,7 @@ namespace Avalonia.Native public void SetNativeMenu(NativeMenu menu) { _menu = menu == null ? new NativeMenu() : menu; - _resetQueued = true; // we've reset the menu to something new, so make sure that a reset is queued - DoLayoutReset(); + DoLayoutReset(true); } internal void UpdateIfNeeded() @@ -74,9 +73,9 @@ namespace Avalonia.Native return result; } - private void DoLayoutReset() + private void DoLayoutReset(bool forceUpdate = false) { - if (_resetQueued) + if (_resetQueued || forceUpdate) { _resetQueued = false; @@ -109,7 +108,7 @@ namespace Avalonia.Native if (_resetQueued) return; _resetQueued = true; - Dispatcher.UIThread.Post(DoLayoutReset, DispatcherPriority.Background); + Dispatcher.UIThread.Post(() => DoLayoutReset(), DispatcherPriority.Background); } private void SetMenu(NativeMenu menu) From f9a6944177ce739afe190f3f85d8210e0c287cbb Mon Sep 17 00:00:00 2001 From: Michael Babienco Date: Wed, 29 Jul 2020 12:37:38 -0400 Subject: [PATCH 3/3] Remove unneeded comment --- src/Avalonia.Native/AvaloniaNativeMenuExporter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 5a99249fee..6d1b95b997 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -11,7 +11,7 @@ namespace Avalonia.Native class AvaloniaNativeMenuExporter : ITopLevelNativeMenuExporter { private IAvaloniaNativeFactory _factory; - private bool _resetQueued = true; // so initial layout resets trigger a menu reset properly + private bool _resetQueued = true; private bool _exported = false; private IAvnWindow _nativeWindow; private NativeMenu _menu;