From 5036685c3cd1145dfd521d490658d5c9732ad3f7 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Tue, 28 Apr 2020 17:50:39 +0300 Subject: [PATCH] Checkmark support for dbus exporter --- samples/ControlCatalog/MainWindow.xaml | 1 + src/Avalonia.Controls/NativeMenuItem.cs | 20 +++++++++++++++++++ src/Avalonia.FreeDesktop/DBusMenuExporter.cs | 21 +++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/samples/ControlCatalog/MainWindow.xaml b/samples/ControlCatalog/MainWindow.xaml index 1f48350448..e75506624a 100644 --- a/samples/ControlCatalog/MainWindow.xaml +++ b/samples/ControlCatalog/MainWindow.xaml @@ -41,6 +41,7 @@ diff --git a/src/Avalonia.Controls/NativeMenuItem.cs b/src/Avalonia.Controls/NativeMenuItem.cs index 6bcf676ddb..702bd8c90a 100644 --- a/src/Avalonia.Controls/NativeMenuItem.cs +++ b/src/Avalonia.Controls/NativeMenuItem.cs @@ -12,6 +12,7 @@ namespace Avalonia.Controls private bool _isEnabled = true; private ICommand _command; private bool _isChecked = false; + private NativeMenuItemToggleType _toggleType; private NativeMenu _menu; @@ -99,6 +100,18 @@ namespace Avalonia.Controls get => _isChecked; set => SetAndRaise(IsCheckedProperty, ref _isChecked, value); } + + public static readonly DirectProperty ToggleTypeProperty = + AvaloniaProperty.RegisterDirect( + nameof(ToggleType), + o => o.ToggleType, + (o, v) => o.ToggleType = v); + + public NativeMenuItemToggleType ToggleType + { + get => _toggleType; + set => SetAndRaise(ToggleTypeProperty, ref _toggleType, value); + } public static readonly DirectProperty CommandProperty = Button.CommandProperty.AddOwner( @@ -169,4 +182,11 @@ namespace Avalonia.Controls } } } + + public enum NativeMenuItemToggleType + { + None, + CheckBox, + Radio + } } diff --git a/src/Avalonia.FreeDesktop/DBusMenuExporter.cs b/src/Avalonia.FreeDesktop/DBusMenuExporter.cs index cd56342059..c60c1d396f 100644 --- a/src/Avalonia.FreeDesktop/DBusMenuExporter.cs +++ b/src/Avalonia.FreeDesktop/DBusMenuExporter.cs @@ -184,7 +184,7 @@ namespace Avalonia.FreeDesktop private static string[] AllProperties = new[] { - "type", "label", "enabled", "visible", "shortcut", "toggle-type", "children-display" + "type", "label", "enabled", "visible", "shortcut", "toggle-type", "children-display", "toggle-state" }; object GetProperty((NativeMenuItemBase item, NativeMenu menu) i, string name) @@ -234,6 +234,25 @@ namespace Avalonia.FreeDesktop return new[] { lst.ToArray() }; } + if (name == "toggle-type") + { + if (item.ToggleType == NativeMenuItemToggleType.CheckBox) + return "checkmark"; + if (item.ToggleType == NativeMenuItemToggleType.Radio) + return "radio"; + // Someone has forgot to set the style + if (item.IsChecked) + return "checkmark"; + } + + if (name == "toggle-state") + { + if (item.IsChecked) + return 1; + if (item.ToggleType != NativeMenuItemToggleType.None) + return 0; + } + if (name == "children-display") return menu != null ? "submenu" : null; }