void AssociateNSButton(WX_NSButton cocoaNSButton);
inline void DisassociateNSButton(WX_NSButton cocoaNSButton)
{
- sm_cocoaHash.erase(cocoaNSButton);
+ if(cocoaNSButton)
+ sm_cocoaHash.erase(cocoaNSButton);
}
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;
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) \
#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__
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:)];
+ }
}
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];
+ }
}
// ============================================================================
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));
+ }
}
// ============================================================================
{
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]);
}