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;
}