Browse Source

Merge pull request #3837 from AvaloniaUI/dbus-checkmark

Checkmark support for dbus exporter
pull/3840/head
danwalmsley 6 years ago
committed by GitHub
parent
commit
a45ba41db0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      samples/ControlCatalog/MainWindow.xaml
  2. 20
      src/Avalonia.Controls/NativeMenuItem.cs
  3. 21
      src/Avalonia.FreeDesktop/DBusMenuExporter.cs

1
samples/ControlCatalog/MainWindow.xaml

@ -41,6 +41,7 @@
<NativeMenu>
<NativeMenuItem Header="Check Me Out"
Command="{Binding ToggleMenuItemCheckedCommand}"
ToggleType="CheckBox"
IsChecked="{Binding IsMenuItemChecked}" />
</NativeMenu>
</NativeMenuItem.Menu>

20
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<NativeMenuItem, NativeMenuItemToggleType> ToggleTypeProperty =
AvaloniaProperty.RegisterDirect<NativeMenuItem, NativeMenuItemToggleType>(
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<NativeMenuItem, ICommand> CommandProperty =
Button.CommandProperty.AddOwner<NativeMenuItem>(
@ -169,4 +182,11 @@ namespace Avalonia.Controls
}
}
}
public enum NativeMenuItemToggleType
{
None,
CheckBox,
Radio
}
}

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

Loading…
Cancel
Save