Browse Source

Remove NativeMenuItemToggleType and NativeMenuBar.EnableMenuItemClickForwarding (#20577)

* Remove NativeMenuItemToggleType

* Remove NativeMenuBar.EnableMenuItemClickForwarding

* Update API suppressions
pull/18827/merge
Julien Lebosquain 1 week ago
committed by GitHub
parent
commit
806193a43d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 60
      api/Avalonia.nupkg.xml
  2. 2
      samples/IntegrationTestApp/MainWindow.axaml.cs
  3. 27
      src/Avalonia.Controls/NativeMenuBar.cs
  4. 4
      src/Avalonia.Controls/NativeMenuBarPresenter.cs
  5. 14
      src/Avalonia.Controls/NativeMenuItem.cs
  6. 6
      src/Avalonia.FreeDesktop/DBusMenuExporter.cs
  7. 2
      src/Avalonia.Native/IAvnMenuItem.cs

60
api/Avalonia.nupkg.xml

@ -31,6 +31,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.NativeMenuItemToggleType</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0001</DiagnosticId> <DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.Primitives.IScrollable</Target> <Target>T:Avalonia.Controls.Primitives.IScrollable</Target>
@ -73,6 +79,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.NativeMenuItemToggleType</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0001</DiagnosticId> <DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.Primitives.IScrollable</Target> <Target>T:Avalonia.Controls.Primitives.IScrollable</Target>
@ -283,6 +295,18 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.NativeMenuBar.EnableMenuItemClickForwardingProperty</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.NativeMenuItem.ToggleTypeProperty</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.TextBlock.LetterSpacingProperty</Target> <Target>F:Avalonia.Controls.TextBlock.LetterSpacingProperty</Target>
@ -367,6 +391,18 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.NativeMenuBar.SetEnableMenuItemClickForwarding(Avalonia.Controls.MenuItem,System.Boolean)</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.NativeMenuItem.get_ToggleType</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control)</Target> <Target>M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control)</Target>
@ -649,6 +685,18 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.NativeMenuBar.EnableMenuItemClickForwardingProperty</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.NativeMenuItem.ToggleTypeProperty</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Controls.TextBlock.LetterSpacingProperty</Target> <Target>F:Avalonia.Controls.TextBlock.LetterSpacingProperty</Target>
@ -733,6 +781,18 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left> <Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right> <Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.NativeMenuBar.SetEnableMenuItemClickForwarding(Avalonia.Controls.MenuItem,System.Boolean)</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.NativeMenuItem.get_ToggleType</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0002</DiagnosticId> <DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control)</Target> <Target>M:Avalonia.Controls.Primitives.TextSearch.GetText(Avalonia.Controls.Control)</Target>

2
samples/IntegrationTestApp/MainWindow.axaml.cs

@ -37,7 +37,7 @@ namespace IntegrationTestApp
{ {
Header = (string?)page.Name, Header = (string?)page.Name,
ToolTip = $"Tip:{(string?)page.Name}", ToolTip = $"Tip:{(string?)page.Name}",
ToggleType = NativeMenuItemToggleType.Radio, ToggleType = MenuItemToggleType.Radio
}; };
menuItem.Click += (_, _) => menuItem.Click += (_, _) =>

27
src/Avalonia.Controls/NativeMenuBar.cs

@ -3,8 +3,6 @@ using Avalonia.Controls.Metadata;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates; using Avalonia.Controls.Templates;
using Avalonia.Data; using Avalonia.Data;
using Avalonia.Interactivity;
using Avalonia.Metadata;
using Avalonia.Reactive; using Avalonia.Reactive;
using Avalonia.VisualTree; using Avalonia.VisualTree;
@ -13,25 +11,11 @@ namespace Avalonia.Controls
[TemplatePart("PART_NativeMenuPresenter", typeof(MenuBase))] [TemplatePart("PART_NativeMenuPresenter", typeof(MenuBase))]
public class NativeMenuBar : TemplatedControl public class NativeMenuBar : TemplatedControl
{ {
[Unstable("To be removed in 12.0, NativeMenuBar now has a default template")] // TODO12
public static readonly AttachedProperty<bool> EnableMenuItemClickForwardingProperty =
AvaloniaProperty.RegisterAttached<NativeMenuBar, MenuItem, bool>(
"EnableMenuItemClickForwarding");
private MenuBase? _menu; private MenuBase? _menu;
private IDisposable? _subscriptions; private IDisposable? _subscriptions;
static NativeMenuBar() static NativeMenuBar()
{ {
EnableMenuItemClickForwardingProperty.Changed.Subscribe(args =>
{
var item = (MenuItem)args.Sender;
if (args.NewValue.GetValueOrDefault<bool>())
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. // 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. // Changing default template while keeping old StyleKeyOverride => Menu isn't a breaking change.
TemplateProperty.OverrideDefaultValue<NativeMenuBar>(new FuncControlTemplate((_, ns) => new NativeMenuBarPresenter TemplateProperty.OverrideDefaultValue<NativeMenuBar>(new FuncControlTemplate((_, ns) => new NativeMenuBarPresenter
@ -77,17 +61,6 @@ namespace Avalonia.Controls
_subscriptions = null; _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) private void SubscribeToToplevel(TopLevel topLevel, MenuBase menu)
{ {
_subscriptions?.Dispose(); _subscriptions?.Dispose();

4
src/Avalonia.Controls/NativeMenuBarPresenter.cs

@ -32,9 +32,7 @@ internal class NativeMenuBarPresenter : Menu
[!MenuItem.CommandParameterProperty] = [!MenuItem.CommandParameterProperty] =
nativeItem.GetObservable(NativeMenuItem.CommandParameterProperty).ToBinding(), nativeItem.GetObservable(NativeMenuItem.CommandParameterProperty).ToBinding(),
[!MenuItem.InputGestureProperty] = nativeItem.GetObservable(NativeMenuItem.GestureProperty).ToBinding(), [!MenuItem.InputGestureProperty] = nativeItem.GetObservable(NativeMenuItem.GestureProperty).ToBinding(),
[!MenuItem.ToggleTypeProperty] = nativeItem.GetObservable(NativeMenuItem.ToggleTypeProperty) [!MenuItem.ToggleTypeProperty] = nativeItem.GetObservable(NativeMenuItem.ToggleTypeProperty).ToBinding(),
// TODO12 remove NativeMenuItemToggleType
.Select(v => (MenuItemToggleType)v).ToBinding(),
[!ToolTip.TipProperty] = [!ToolTip.TipProperty] =
nativeItem.GetObservable(NativeMenuItem.ToolTipProperty).ToBinding(), nativeItem.GetObservable(NativeMenuItem.ToolTipProperty).ToBinding(),
}; };

14
src/Avalonia.Controls/NativeMenuItem.cs

@ -119,11 +119,11 @@ namespace Avalonia.Controls
} }
/// <inheritdoc cref="MenuItem.ToggleTypeProperty"/> /// <inheritdoc cref="MenuItem.ToggleTypeProperty"/>
public static readonly StyledProperty<NativeMenuItemToggleType> ToggleTypeProperty = public static readonly StyledProperty<MenuItemToggleType> ToggleTypeProperty =
AvaloniaProperty.Register<NativeMenuItem, NativeMenuItemToggleType>(nameof(ToggleType)); AvaloniaProperty.Register<NativeMenuItem, MenuItemToggleType>(nameof(ToggleType));
/// <inheritdoc cref="MenuItem.ToggleType"/> /// <inheritdoc cref="MenuItem.ToggleType"/>
public NativeMenuItemToggleType ToggleType public MenuItemToggleType ToggleType
{ {
get => GetValue(ToggleTypeProperty); get => GetValue(ToggleTypeProperty);
set => SetValue(ToggleTypeProperty, value); 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
}
} }

6
src/Avalonia.FreeDesktop/DBusMenuExporter.cs

@ -260,13 +260,13 @@ namespace Avalonia.FreeDesktop
if (name == "toggle-type") if (name == "toggle-type")
{ {
if (item.ToggleType == NativeMenuItemToggleType.CheckBox) if (item.ToggleType == MenuItemToggleType.CheckBox)
return VariantValue.String("checkmark"); return VariantValue.String("checkmark");
if (item.ToggleType == NativeMenuItemToggleType.Radio) if (item.ToggleType == MenuItemToggleType.Radio)
return VariantValue.String("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); return VariantValue.Int32(item.IsChecked ? 1 : 0);
if (name == "icon-data") if (name == "icon-data")

2
src/Avalonia.Native/IAvnMenuItem.cs

@ -43,7 +43,7 @@ namespace Avalonia.Native.Interop.Impl
private void UpdateIsVisible(bool isVisible) => SetIsVisible(isVisible.AsComBool()); private void UpdateIsVisible(bool isVisible) => SetIsVisible(isVisible.AsComBool());
private void UpdateIsChecked(bool isChecked) => SetIsChecked(isChecked.AsComBool()); private void UpdateIsChecked(bool isChecked) => SetIsChecked(isChecked.AsComBool());
private void UpdateToggleType(NativeMenuItemToggleType toggleType) private void UpdateToggleType(MenuItemToggleType toggleType)
{ {
SetToggleType((AvnMenuItemToggleType)toggleType); SetToggleType((AvnMenuItemToggleType)toggleType);
} }

Loading…
Cancel
Save