From 6426a206667ddf17efcc6d9bd747b0ad3f9c55a7 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 28 Apr 2020 17:12:49 -0300 Subject: [PATCH] Implement Radio Toggle type on OSX. --- native/Avalonia.Native/src/OSX/menu.h | 1 - native/Avalonia.Native/src/OSX/menu.mm | 9 +++------ src/Avalonia.Native/IAvnMenuItem.cs | 7 ++++++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/menu.h b/native/Avalonia.Native/src/OSX/menu.h index cd464d2169..2d211e8643 100644 --- a/native/Avalonia.Native/src/OSX/menu.h +++ b/native/Avalonia.Native/src/OSX/menu.h @@ -32,7 +32,6 @@ private: IAvnActionCallback* _callback; IAvnPredicateCallback* _predicate; bool _isSeperator; - bool _isCheckable; public: FORWARD_IUNKNOWN() diff --git a/native/Avalonia.Native/src/OSX/menu.mm b/native/Avalonia.Native/src/OSX/menu.mm index 6ea7797fa8..62eaffa5b8 100644 --- a/native/Avalonia.Native/src/OSX/menu.mm +++ b/native/Avalonia.Native/src/OSX/menu.mm @@ -70,7 +70,6 @@ AvnAppMenuItem::AvnAppMenuItem(bool isSeperator) { - _isCheckable = false; _isSeperator = isSeperator; if(isSeperator) @@ -158,7 +157,7 @@ HRESULT AvnAppMenuItem::SetIsChecked (bool isChecked) { @autoreleasepool { - [_native setState:(isChecked && _isCheckable ? NSOnState : NSOffState)]; + [_native setState:(isChecked ? NSOnState : NSOffState)]; return S_OK; } } @@ -171,16 +170,14 @@ HRESULT AvnAppMenuItem::SetToggleType(AvnMenuItemToggleType toggleType) { case AvnMenuItemToggleType::None: [_native setOnStateImage:nullptr]; - _isCheckable = false; break; case AvnMenuItemToggleType::CheckMark: - [_native setOnStateImage:nullptr]; - _isCheckable = true; + [_native setOnStateImage: [NSImage imageNamed:@"NSMenuCheckmark"]]; break; case AvnMenuItemToggleType::Radio: - [_native setOnStateImage: [NSImage imageNamed:@"NSMenuRadio"]]; + [_native setOnStateImage: [NSImage imageNamed:@"NSMenuItemBullet"]]; break; } diff --git a/src/Avalonia.Native/IAvnMenuItem.cs b/src/Avalonia.Native/IAvnMenuItem.cs index 2e829832bf..df82f3955a 100644 --- a/src/Avalonia.Native/IAvnMenuItem.cs +++ b/src/Avalonia.Native/IAvnMenuItem.cs @@ -28,7 +28,7 @@ namespace Avalonia.Native.Interop private void UpdateToggleType(NativeMenuItemToggleType toggleType) { - + ToggleType = (AvnMenuItemToggleType)toggleType; } private void UpdateGesture(Input.KeyGesture gesture) @@ -78,6 +78,8 @@ namespace Avalonia.Native.Interop UpdateAction(ManagedMenuItem as NativeMenuItem); + UpdateToggleType(item.ToggleType); + UpdateIsChecked(item.IsChecked); _propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.HeaderProperty) @@ -89,6 +91,9 @@ namespace Avalonia.Native.Interop _propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.CommandProperty) .Subscribe(x => UpdateAction(ManagedMenuItem as NativeMenuItem))); + _propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.ToggleTypeProperty) + .Subscribe(x => UpdateToggleType(x))); + _propertyDisposables.Add(ManagedMenuItem.GetObservable(NativeMenuItem.IsCheckedProperty) .Subscribe(x => UpdateIsChecked(x))); }