-// ============================================================================
-// wxCocoaNSMenu implementation
-// ============================================================================
-bool wxCocoaNSMenu::CocoaCreate(const wxString &title)
+- (void)menuDidChangeItem: (NSNotification *)notification
+{
+ wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
+ 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,wxT("menuDidRemoveItem received but no wxMenu exists"));
+ menu->CocoaNotification_menuDidRemoveItem(notification);
+}
+
+- (void)menuDidSendAction: (NSNotification *)notification
+{
+ wxCocoaNSMenu *menu = wxCocoaNSMenu::GetFromCocoa([notification object]);
+ 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,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)
+
+struct objc_object *wxCocoaNSMenu::sm_cocoaObserver = [[WX_GET_OBJC_CLASS(wxNSMenuNotificationObserver) alloc] init];
+
+void wxCocoaNSMenu::AssociateNSMenu(WX_NSMenu cocoaNSMenu, unsigned int flags)