From bac6f2348d41e91d92baa2a35c19d35097547003 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Fri, 11 Jul 2003 17:47:57 +0000 Subject: [PATCH] Associate/Disassociate now check for non-NULL pointer instead of requiring the caller to do so. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21894 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/NSButton.h | 3 ++- include/wx/cocoa/NSWindow.h | 3 ++- include/wx/cocoa/ObjcAssociate.h | 12 ++++++------ src/cocoa/NSButton.mm | 9 ++++++--- src/cocoa/NSView.mm | 16 +++++++++++----- src/cocoa/NSWindow.mm | 7 +++++-- src/cocoa/window.mm | 6 ++---- 7 files changed, 34 insertions(+), 22 deletions(-) diff --git a/include/wx/cocoa/NSButton.h b/include/wx/cocoa/NSButton.h index 7e8f8add03..687fd77655 100644 --- a/include/wx/cocoa/NSButton.h +++ b/include/wx/cocoa/NSButton.h @@ -24,7 +24,8 @@ public: void AssociateNSButton(WX_NSButton cocoaNSButton); inline void DisassociateNSButton(WX_NSButton cocoaNSButton) { - sm_cocoaHash.erase(cocoaNSButton); + if(cocoaNSButton) + sm_cocoaHash.erase(cocoaNSButton); } public: diff --git a/include/wx/cocoa/NSWindow.h b/include/wx/cocoa/NSWindow.h index 15a0ac7996..04da760edc 100644 --- a/include/wx/cocoa/NSWindow.h +++ b/include/wx/cocoa/NSWindow.h @@ -25,7 +25,8 @@ public: void AssociateNSWindow(WX_NSWindow cocoaNSWindow); inline void DisassociateNSWindow(WX_NSWindow cocoaNSWindow) { - sm_cocoaHash.erase(cocoaNSWindow); + if(cocoaNSWindow) + sm_cocoaHash.erase(cocoaNSWindow); } virtual void Cocoa_close(void) = 0; virtual bool Cocoa_windowShouldClose(void) = 0; diff --git a/include/wx/cocoa/ObjcAssociate.h b/include/wx/cocoa/ObjcAssociate.h index 4a460143e0..31b087e46c 100644 --- a/include/wx/cocoa/ObjcAssociate.h +++ b/include/wx/cocoa/ObjcAssociate.h @@ -45,11 +45,13 @@ WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \ public: \ inline void Associate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ { \ - sm_cocoaHash.insert(wxCocoa##ObjcClass##Hash::value_type(cocoaObjcClass,this)); \ + if(cocoaObjcClass) \ + sm_cocoaHash.insert(wxCocoa##ObjcClass##Hash::value_type(cocoaObjcClass,this)); \ } \ inline void Disassociate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ { \ - sm_cocoaHash.erase(cocoaObjcClass); \ + if(cocoaObjcClass) \ + sm_cocoaHash.erase(cocoaObjcClass); \ } #define WX_IMPLEMENT_OBJC_INTERFACE(ObjcClass) \ @@ -68,11 +70,9 @@ protected: \ #define WX_IMPLEMENT_COCOA_OWNER(wxClass,ObjcClass,ObjcBase,ObjcRoot) \ void wxClass::Set##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ { \ - if(m_cocoa##ObjcRoot) \ - Disassociate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ + Disassociate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ Set##ObjcBase(cocoaObjcClass); \ - if(m_cocoa##ObjcRoot) \ - Associate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ + Associate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ } #endif // __WX_COCOA_OBJC_ASSOCIATE_H__ diff --git a/src/cocoa/NSButton.mm b/src/cocoa/NSButton.mm index c228460dd4..b9923b7f7f 100644 --- a/src/cocoa/NSButton.mm +++ b/src/cocoa/NSButton.mm @@ -57,8 +57,11 @@ WX_IMPLEMENT_POSER(wxPoserNSButton); void wxCocoaNSButton::AssociateNSButton(WX_NSButton cocoaNSButton) { - sm_cocoaHash.insert(wxCocoaNSButtonHash::value_type(cocoaNSButton,this)); - [cocoaNSButton setTarget: cocoaNSButton]; - [cocoaNSButton setAction: @selector(wxNSButtonAction:)]; + if(cocoaNSButton) + { + sm_cocoaHash.insert(wxCocoaNSButtonHash::value_type(cocoaNSButton,this)); + [cocoaNSButton setTarget: cocoaNSButton]; + [cocoaNSButton setAction: @selector(wxNSButtonAction:)]; + } } diff --git a/src/cocoa/NSView.mm b/src/cocoa/NSView.mm index 280c06b91b..7f880656e6 100644 --- a/src/cocoa/NSView.mm +++ b/src/cocoa/NSView.mm @@ -36,15 +36,21 @@ WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSView) void wxCocoaNSView::AssociateNSView(WX_NSView cocoaNSView) { - sm_cocoaHash.insert(wxCocoaNSViewHash::value_type(cocoaNSView,this)); - [[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(notificationFrameChanged:) name:@"NSViewFrameDidChangeNotification" object:cocoaNSView]; - [cocoaNSView setPostsFrameChangedNotifications: YES]; + if(cocoaNSView) + { + sm_cocoaHash.insert(wxCocoaNSViewHash::value_type(cocoaNSView,this)); + [[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(notificationFrameChanged:) name:@"NSViewFrameDidChangeNotification" object:cocoaNSView]; + [cocoaNSView setPostsFrameChangedNotifications: YES]; + } } void wxCocoaNSView::DisassociateNSView(WX_NSView cocoaNSView) { - sm_cocoaHash.erase(cocoaNSView); - [[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSViewFrameDidChangeNotification" object:cocoaNSView]; + if(cocoaNSView) + { + sm_cocoaHash.erase(cocoaNSView); + [[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSViewFrameDidChangeNotification" object:cocoaNSView]; + } } // ============================================================================ diff --git a/src/cocoa/NSWindow.mm b/src/cocoa/NSWindow.mm index c0a6fdba0e..d230b1a093 100644 --- a/src/cocoa/NSWindow.mm +++ b/src/cocoa/NSWindow.mm @@ -35,8 +35,11 @@ WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSWindow) void wxCocoaNSWindow::AssociateNSWindow(WX_NSWindow cocoaNSWindow) { - [cocoaNSWindow setReleasedWhenClosed: NO]; - sm_cocoaHash.insert(wxCocoaNSWindowHash::value_type(cocoaNSWindow,this)); + if(cocoaNSWindow) + { + [cocoaNSWindow setReleasedWhenClosed: NO]; + sm_cocoaHash.insert(wxCocoaNSWindowHash::value_type(cocoaNSWindow,this)); + } } // ============================================================================ diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index 5666a121ac..9adb78257a 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -108,13 +108,11 @@ void wxWindowCocoa::SetNSView(WX_NSView cocoaNSView) { bool need_debug = cocoaNSView || m_cocoaNSView; if(need_debug) wxLogDebug("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d",this,m_cocoaNSView,[m_cocoaNSView retainCount]); - if(m_cocoaNSView) - DisassociateNSView(m_cocoaNSView); + DisassociateNSView(m_cocoaNSView); [cocoaNSView retain]; [m_cocoaNSView release]; m_cocoaNSView = cocoaNSView; - if(m_cocoaNSView) - AssociateNSView(m_cocoaNSView); + AssociateNSView(m_cocoaNSView); if(need_debug) wxLogDebug("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d",this,cocoaNSView,[cocoaNSView retainCount]); } -- 2.45.2