From 30975465984ea8be8e9d105587295fe4257b5ca1 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sun, 19 Apr 2020 16:53:29 +0300 Subject: [PATCH] What the actual duck --- native/Avalonia.Native/src/OSX/menu.h | 11 +++-- native/Avalonia.Native/src/OSX/menu.mm | 57 ++++++++++++++++++-------- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/menu.h b/native/Avalonia.Native/src/OSX/menu.h index 3c68cc222b..cb13713a54 100644 --- a/native/Avalonia.Native/src/OSX/menu.h +++ b/native/Avalonia.Native/src/OSX/menu.h @@ -14,7 +14,8 @@ class AvnAppMenuItem; class AvnAppMenu; -@interface AvnMenu : NSMenu +@interface AvnMenu : NSMenu +- (id) initWithDelegate: (NSObject*) del; @end @interface AvnMenuItem : NSMenuItem @@ -62,9 +63,7 @@ public: FORWARD_IUNKNOWN() AvnAppMenu(); - - AvnAppMenu(AvnMenu* native); - + AvnMenu* GetNative(); virtual HRESULT InsertItem (int index, IAvnAppMenuItem* item) override; @@ -77,5 +76,9 @@ public: }; +@interface AvnMenuDelegate : NSObject +- (id) initWithParent: (AvnAppMenu*) parent; +@end + #endif diff --git a/native/Avalonia.Native/src/OSX/menu.mm b/native/Avalonia.Native/src/OSX/menu.mm index 55a6f385d8..5eed5a88e4 100644 --- a/native/Avalonia.Native/src/OSX/menu.mm +++ b/native/Avalonia.Native/src/OSX/menu.mm @@ -4,20 +4,17 @@ #include "window.h" @implementation AvnMenu -- (void)menuNeedsUpdate:(NSMenu *)menu { - printf("TEST"); + NSObject* _wtf; } - -- (void)menuWillOpen:(NSMenu *)menu +- (id) initWithDelegate: (NSObject*)del { - + self = [super init]; + self.delegate = del; + _wtf = del; + return self; } -- (void)menuDidClose:(NSMenu *)menu -{ - -} @end @implementation AvnMenuItem @@ -159,15 +156,10 @@ void AvnAppMenuItem::RaiseOnClicked() AvnAppMenu::AvnAppMenu() { - _native = [AvnMenu new]; - [_native setDelegate:_native]; + id del = [[AvnMenuDelegate alloc] initWithParent: this]; + _native = [[AvnMenu alloc] initWithDelegate: del]; } -AvnAppMenu::AvnAppMenu(AvnMenu* native) -{ - _native = native; - [_native setDelegate:_native]; -} AvnMenu* AvnAppMenu::GetNative() { @@ -214,12 +206,41 @@ HRESULT AvnAppMenu::Clear() return S_OK; } +@implementation AvnMenuDelegate +{ + ComPtr _parent; +} +- (id) initWithParent:(AvnAppMenu *)parent +{ + self = [super init]; + _parent = parent; + return self; +} +- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel +{ + if(shouldCancel) + return NO; + return YES; +} + +- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu +{ + return [menu numberOfItems]; +} + +- (void)menuNeedsUpdate:(NSMenu *)menu +{ + printf("NEEDSUPDATE\n"); +} + + +@end + extern IAvnAppMenu* CreateAppMenu() { @autoreleasepool { - id menuBar = [NSMenu new]; - return new AvnAppMenu(menuBar); + return new AvnAppMenu(); } }