From 806193a43daad1846b5c9a18db49a6075f7904e3 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Fri, 30 Jan 2026 09:57:39 +0000 Subject: [PATCH] Remove NativeMenuItemToggleType and NativeMenuBar.EnableMenuItemClickForwarding (#20577) * Remove NativeMenuItemToggleType * Remove NativeMenuBar.EnableMenuItemClickForwarding * Update API suppressions --- api/Avalonia.nupkg.xml | 60 +++++++++++++++++++ .../IntegrationTestApp/MainWindow.axaml.cs | 2 +- src/Avalonia.Controls/NativeMenuBar.cs | 27 --------- .../NativeMenuBarPresenter.cs | 4 +- src/Avalonia.Controls/NativeMenuItem.cs | 14 +---- src/Avalonia.FreeDesktop/DBusMenuExporter.cs | 6 +- src/Avalonia.Native/IAvnMenuItem.cs | 2 +- 7 files changed, 69 insertions(+), 46 deletions(-) diff --git a/api/Avalonia.nupkg.xml b/api/Avalonia.nupkg.xml index 3858eaa6ff..275b25e01e 100644 --- a/api/Avalonia.nupkg.xml +++ b/api/Avalonia.nupkg.xml @@ -31,6 +31,12 @@ baseline/Avalonia/lib/net10.0/Avalonia.Base.dll current/Avalonia/lib/net10.0/Avalonia.Base.dll + + CP0001 + T:Avalonia.Controls.NativeMenuItemToggleType + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + CP0001 T:Avalonia.Controls.Primitives.IScrollable @@ -73,6 +79,12 @@ baseline/Avalonia/lib/net8.0/Avalonia.Base.dll current/Avalonia/lib/net8.0/Avalonia.Base.dll + + CP0001 + T:Avalonia.Controls.NativeMenuItemToggleType + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + CP0001 T:Avalonia.Controls.Primitives.IScrollable @@ -283,6 +295,18 @@ baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + CP0002 + F:Avalonia.Controls.NativeMenuBar.EnableMenuItemClickForwardingProperty + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + + CP0002 + F:Avalonia.Controls.NativeMenuItem.ToggleTypeProperty + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + CP0002 F:Avalonia.Controls.TextBlock.LetterSpacingProperty @@ -367,6 +391,18 @@ baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + CP0002 + M:Avalonia.Controls.NativeMenuBar.SetEnableMenuItemClickForwarding(Avalonia.Controls.MenuItem,System.Boolean) + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + + + CP0002 + M:Avalonia.Controls.NativeMenuItem.get_ToggleType + baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll + current/Avalonia/lib/net10.0/Avalonia.Controls.dll + CP0002 M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control) @@ -649,6 +685,18 @@ baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + CP0002 + F:Avalonia.Controls.NativeMenuBar.EnableMenuItemClickForwardingProperty + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + + CP0002 + F:Avalonia.Controls.NativeMenuItem.ToggleTypeProperty + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + CP0002 F:Avalonia.Controls.TextBlock.LetterSpacingProperty @@ -733,6 +781,18 @@ baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + CP0002 + M:Avalonia.Controls.NativeMenuBar.SetEnableMenuItemClickForwarding(Avalonia.Controls.MenuItem,System.Boolean) + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + + + CP0002 + M:Avalonia.Controls.NativeMenuItem.get_ToggleType + baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll + current/Avalonia/lib/net8.0/Avalonia.Controls.dll + CP0002 M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control) diff --git a/samples/IntegrationTestApp/MainWindow.axaml.cs b/samples/IntegrationTestApp/MainWindow.axaml.cs index be552201c0..894c052d6c 100644 --- a/samples/IntegrationTestApp/MainWindow.axaml.cs +++ b/samples/IntegrationTestApp/MainWindow.axaml.cs @@ -37,7 +37,7 @@ namespace IntegrationTestApp { Header = (string?)page.Name, ToolTip = $"Tip:{(string?)page.Name}", - ToggleType = NativeMenuItemToggleType.Radio, + ToggleType = MenuItemToggleType.Radio }; menuItem.Click += (_, _) => diff --git a/src/Avalonia.Controls/NativeMenuBar.cs b/src/Avalonia.Controls/NativeMenuBar.cs index 118c2291cc..2f271ef34c 100644 --- a/src/Avalonia.Controls/NativeMenuBar.cs +++ b/src/Avalonia.Controls/NativeMenuBar.cs @@ -3,8 +3,6 @@ using Avalonia.Controls.Metadata; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Data; -using Avalonia.Interactivity; -using Avalonia.Metadata; using Avalonia.Reactive; using Avalonia.VisualTree; @@ -13,25 +11,11 @@ namespace Avalonia.Controls [TemplatePart("PART_NativeMenuPresenter", typeof(MenuBase))] public class NativeMenuBar : TemplatedControl { - [Unstable("To be removed in 12.0, NativeMenuBar now has a default template")] // TODO12 - public static readonly AttachedProperty EnableMenuItemClickForwardingProperty = - AvaloniaProperty.RegisterAttached( - "EnableMenuItemClickForwarding"); - private MenuBase? _menu; private IDisposable? _subscriptions; static NativeMenuBar() { - EnableMenuItemClickForwardingProperty.Changed.Subscribe(args => - { - var item = (MenuItem)args.Sender; - if (args.NewValue.GetValueOrDefault()) - item.Click += OnMenuItemClick; - else - item.Click -= OnMenuItemClick; - }); - // TODO12 Ideally we should make NativeMenuBar inherit MenuBase directly, but it would be a breaking change for 11.x. // Changing default template while keeping old StyleKeyOverride => Menu isn't a breaking change. TemplateProperty.OverrideDefaultValue(new FuncControlTemplate((_, ns) => new NativeMenuBarPresenter @@ -77,17 +61,6 @@ namespace Avalonia.Controls _subscriptions = null; } - [Unstable("To be removed in 12.0, NativeMenuBar now has a default template.")] // TODO12 - public static void SetEnableMenuItemClickForwarding(MenuItem menuItem, bool enable) - { - menuItem.SetValue(EnableMenuItemClickForwardingProperty, enable); - } - - private static void OnMenuItemClick(object? sender, RoutedEventArgs e) - { - (((MenuItem)sender!).DataContext as INativeMenuItemExporterEventsImplBridge)?.RaiseClicked(); - } - private void SubscribeToToplevel(TopLevel topLevel, MenuBase menu) { _subscriptions?.Dispose(); diff --git a/src/Avalonia.Controls/NativeMenuBarPresenter.cs b/src/Avalonia.Controls/NativeMenuBarPresenter.cs index 286f80d699..c0e790c466 100644 --- a/src/Avalonia.Controls/NativeMenuBarPresenter.cs +++ b/src/Avalonia.Controls/NativeMenuBarPresenter.cs @@ -32,9 +32,7 @@ internal class NativeMenuBarPresenter : Menu [!MenuItem.CommandParameterProperty] = nativeItem.GetObservable(NativeMenuItem.CommandParameterProperty).ToBinding(), [!MenuItem.InputGestureProperty] = nativeItem.GetObservable(NativeMenuItem.GestureProperty).ToBinding(), - [!MenuItem.ToggleTypeProperty] = nativeItem.GetObservable(NativeMenuItem.ToggleTypeProperty) - // TODO12 remove NativeMenuItemToggleType - .Select(v => (MenuItemToggleType)v).ToBinding(), + [!MenuItem.ToggleTypeProperty] = nativeItem.GetObservable(NativeMenuItem.ToggleTypeProperty).ToBinding(), [!ToolTip.TipProperty] = nativeItem.GetObservable(NativeMenuItem.ToolTipProperty).ToBinding(), }; diff --git a/src/Avalonia.Controls/NativeMenuItem.cs b/src/Avalonia.Controls/NativeMenuItem.cs index 6c093ff1f6..b0b6bb611f 100644 --- a/src/Avalonia.Controls/NativeMenuItem.cs +++ b/src/Avalonia.Controls/NativeMenuItem.cs @@ -119,11 +119,11 @@ namespace Avalonia.Controls } /// - public static readonly StyledProperty ToggleTypeProperty = - AvaloniaProperty.Register(nameof(ToggleType)); + public static readonly StyledProperty ToggleTypeProperty = + AvaloniaProperty.Register(nameof(ToggleType)); /// - public NativeMenuItemToggleType ToggleType + public MenuItemToggleType ToggleType { get => GetValue(ToggleTypeProperty); set => SetValue(ToggleTypeProperty, value); @@ -232,12 +232,4 @@ namespace Avalonia.Controls } } } - - // TODO12: remove this enum and use MenuItemToggleType only - public enum NativeMenuItemToggleType - { - None = MenuItemToggleType.None, - CheckBox = MenuItemToggleType.CheckBox, - Radio = MenuItemToggleType.Radio - } } diff --git a/src/Avalonia.FreeDesktop/DBusMenuExporter.cs b/src/Avalonia.FreeDesktop/DBusMenuExporter.cs index b020aaec34..78595d7bb0 100644 --- a/src/Avalonia.FreeDesktop/DBusMenuExporter.cs +++ b/src/Avalonia.FreeDesktop/DBusMenuExporter.cs @@ -260,13 +260,13 @@ namespace Avalonia.FreeDesktop if (name == "toggle-type") { - if (item.ToggleType == NativeMenuItemToggleType.CheckBox) + if (item.ToggleType == MenuItemToggleType.CheckBox) return VariantValue.String("checkmark"); - if (item.ToggleType == NativeMenuItemToggleType.Radio) + if (item.ToggleType == MenuItemToggleType.Radio) return VariantValue.String("radio"); } - if (name == "toggle-state" && item.ToggleType != NativeMenuItemToggleType.None) + if (name == "toggle-state" && item.ToggleType != MenuItemToggleType.None) return VariantValue.Int32(item.IsChecked ? 1 : 0); if (name == "icon-data") diff --git a/src/Avalonia.Native/IAvnMenuItem.cs b/src/Avalonia.Native/IAvnMenuItem.cs index fd851122f2..f9b3e2d2d6 100644 --- a/src/Avalonia.Native/IAvnMenuItem.cs +++ b/src/Avalonia.Native/IAvnMenuItem.cs @@ -43,7 +43,7 @@ namespace Avalonia.Native.Interop.Impl private void UpdateIsVisible(bool isVisible) => SetIsVisible(isVisible.AsComBool()); private void UpdateIsChecked(bool isChecked) => SetIsChecked(isChecked.AsComBool()); - private void UpdateToggleType(NativeMenuItemToggleType toggleType) + private void UpdateToggleType(MenuItemToggleType toggleType) { SetToggleType((AvnMenuItemToggleType)toggleType); }