X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bcf014878689fa97b8c67372ad616a398b245807..f2049b683752950d1fe91aec07318e7f2122ff16:/src/cocoa/NSMenu.mm diff --git a/src/cocoa/NSMenu.mm b/src/cocoa/NSMenu.mm index ca226efa44..4060f544a5 100644 --- a/src/cocoa/NSMenu.mm +++ b/src/cocoa/NSMenu.mm @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/NSMenu.mm +// Name: src/cocoa/NSMenu.mm // Purpose: wxCocoaNSMenu implementation // Author: David Elliott // Modified by: @@ -15,27 +15,28 @@ #include "wx/log.h" #endif // WX_PRECOMP +#include "wx/cocoa/ObjcRef.h" #include "wx/cocoa/NSMenu.h" -//#include "wx/cocoa/ObjcPose.h" #import -#import +#include "wx/cocoa/objc/NSMenu.h" -#if 0 // There is no reason to pose for NSMenu at this time. // ============================================================================ -// @class wxPoserNSMenu +// @class WXNSMenu // ============================================================================ -@interface wxPoserNSMenu : NSMenu -{ -} -@end // wxPoserNSMenu +@implementation WXNSMenu : NSMenu -WX_IMPLEMENT_POSER(wxPoserNSMenu); -@implementation wxPoserNSMenu : NSMenu +- (void)dealloc +{ + wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa(self); + if(menu) + menu->Cocoa_dealloc(); + [super dealloc]; +} -@end // wxPoserNSMenu -#endif // 0 +@end // WXNSMenu +WX_IMPLEMENT_GET_OBJC_CLASS(WXNSMenu,NSMenu) // ============================================================================ // @class wxNSMenuNotificationObserver @@ -44,57 +45,64 @@ WX_IMPLEMENT_POSER(wxPoserNSMenu); { } -struct objc_object *wxCocoaNSMenu::sm_cocoaObserver = [[wxNSMenuNotificationObserver alloc] init]; - - (void)menuDidAddItem: (NSNotification *)notification; - (void)menuDidChangeItem: (NSNotification *)notification; - (void)menuDidRemoveItem: (NSNotification *)notification; - (void)menuDidSendAction: (NSNotification *)notification; - (void)menuWillSendAction: (NSNotification *)notification; @end // interface wxNSMenuNotificationObserver +WX_DECLARE_GET_OBJC_CLASS(wxNSMenuNotificationObserver,NSObject) @implementation wxNSMenuNotificationObserver : NSObject - (void)menuDidAddItem: (NSNotification *)notification { wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]); - wxCHECK_RET(menu,"menuDidAddItem received but no wxMenu exists"); + wxCHECK_RET(menu,wxT("menuDidAddItem received but no wxMenu exists")); menu->CocoaNotification_menuDidAddItem(notification); } - (void)menuDidChangeItem: (NSNotification *)notification { wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]); - wxCHECK_RET(menu,"menuDidChangeItem received but no wxMenu exists"); + wxCHECK_RET(menu,wxT("menuDidChangeItem received but no wxMenu exists")); menu->CocoaNotification_menuDidChangeItem(notification); } - (void)menuDidRemoveItem: (NSNotification *)notification { wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]); - wxCHECK_RET(menu,"menuDidRemoveItem received but no wxMenu exists"); + wxCHECK_RET(menu,wxT("menuDidRemoveItem received but no wxMenu exists")); menu->CocoaNotification_menuDidRemoveItem(notification); } - (void)menuDidSendAction: (NSNotification *)notification { wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]); - wxCHECK_RET(menu,"menuDidSendAction received but no wxMenu exists"); + wxCHECK_RET(menu,wxT("menuDidSendAction received but no wxMenu exists")); menu->CocoaNotification_menuDidSendAction(notification); } - (void)menuWillSendAction: (NSNotification *)notification { wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]); - wxCHECK_RET(menu,"menuWillSendAction received but no wxMenu exists"); + wxCHECK_RET(menu,wxT("menuWillSendAction received but no wxMenu exists")); menu->CocoaNotification_menuWillSendAction(notification); } @end // implementation wxNSMenuNotificationObserver +WX_IMPLEMENT_GET_OBJC_CLASS(wxNSMenuNotificationObserver,NSObject) // ======================================================================== // wxCocoaNSMenu // ======================================================================== +WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSMenu) + +// New CF-retained observer (this should have been using wxObjcAutoRefFromAlloc to begin with) +static wxObjcAutoRefFromAlloc s_cocoaNSMenuObserver([[WX_GET_OBJC_CLASS(wxNSMenuNotificationObserver) alloc] init]); +// For compatibility with old code +struct objc_object *wxCocoaNSMenu::sm_cocoaObserver = s_cocoaNSMenuObserver; + void wxCocoaNSMenu::AssociateNSMenu(WX_NSMenu cocoaNSMenu, unsigned int flags) { if(cocoaNSMenu)