From dc871e70d90a25f503bda2aeaef6ef5c01406965 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 20 Jul 2022 11:59:17 +0100 Subject: [PATCH] Merge pull request #8544 from AvaloniaUI/fixes/trayicon-interaction Fix multiple enumeration of TrayIcon menu items on win32 causing broken tray icon menus --- .../Win32NativeToManagedMenuExporter.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Win32NativeToManagedMenuExporter.cs b/src/Windows/Avalonia.Win32/Win32NativeToManagedMenuExporter.cs index fa6f9927b5..da8357a6f1 100644 --- a/src/Windows/Avalonia.Win32/Win32NativeToManagedMenuExporter.cs +++ b/src/Windows/Avalonia.Win32/Win32NativeToManagedMenuExporter.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Avalonia.Collections; using Avalonia.Controls; using Avalonia.Controls.Platform; @@ -15,13 +16,15 @@ namespace Avalonia.Win32 _nativeMenu = nativeMenu; } - private IEnumerable Populate(NativeMenu nativeMenu) + private AvaloniaList Populate(NativeMenu nativeMenu) { + var result = new AvaloniaList(); + foreach (var menuItem in nativeMenu.Items) { if (menuItem is NativeMenuItemSeparator) { - yield return new MenuItem { Header = "-" }; + result.Add(new MenuItem { Header = "-" }); } else if (menuItem is NativeMenuItem item) { @@ -36,12 +39,14 @@ namespace Avalonia.Win32 newItem.Click += (_, __) => bridge.RaiseClicked(); } - yield return newItem; + result.Add(newItem); } } + + return result; } - public IEnumerable? GetMenu() + public AvaloniaList? GetMenu() { if (_nativeMenu != null) {