X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48580976469f7c46b730f96effacfa680e55e3cd..84f6927eca931441abec9b6d21c0e412841eaab9:/src/cocoa/window.mm diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index 2bcdeb8c73..91e48b8579 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -267,8 +267,8 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID winid, { m_parent->AddChild(this); m_parent->CocoaAddChild(this); + SetInitialFrameRect(pos,size); } - SetInitialFrameRect(pos,size); return TRUE; } @@ -279,7 +279,10 @@ wxWindow::~wxWindow() wxAutoNSAutoreleasePool pool; DestroyChildren(); - CocoaRemoveFromParent(); + // Make sure our parent (in the wxWindows sense) is our superview + // before we go removing from it. + if(m_parent && m_parent->GetNSView()==[GetNSViewForSuperview() superview]) + CocoaRemoveFromParent(); delete m_cocoaHider; delete m_cocoaScroller; SetNSView(NULL); @@ -301,6 +304,10 @@ void wxWindowCocoa::CocoaRemoveFromParent(void) void wxWindowCocoa::SetNSView(WX_NSView cocoaNSView) { + // Assume setting the NSView to NULL means this wxWindow is being destroyed + if(m_cocoaNSView && !cocoaNSView) + SendDestroyEvent(); + bool need_debug = cocoaNSView || m_cocoaNSView; if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d"),this,m_cocoaNSView,[m_cocoaNSView retainCount]); DisassociateNSView(m_cocoaNSView); @@ -411,17 +418,27 @@ bool wxWindowCocoa::Cocoa_mouseUp(WX_NSEvent theEvent) bool wxWindowCocoa::Cocoa_rightMouseDown(WX_NSEvent theEvent) { - return false; + wxMouseEvent event([theEvent clickCount]<2?wxEVT_RIGHT_DOWN:wxEVT_RIGHT_DCLICK); + InitMouseEvent(event,theEvent); + wxLogDebug(wxT("Mouse Down @%d,%d num clicks=%d"),event.m_x,event.m_y,[theEvent clickCount]); + return GetEventHandler()->ProcessEvent(event); } bool wxWindowCocoa::Cocoa_rightMouseDragged(WX_NSEvent theEvent) { - return false; + wxMouseEvent event(wxEVT_MOTION); + InitMouseEvent(event,theEvent); + event.m_rightDown = true; + wxLogDebug(wxT("Mouse Drag @%d,%d"),event.m_x,event.m_y); + return GetEventHandler()->ProcessEvent(event); } bool wxWindowCocoa::Cocoa_rightMouseUp(WX_NSEvent theEvent) { - return false; + wxMouseEvent event(wxEVT_RIGHT_UP); + InitMouseEvent(event,theEvent); + wxLogDebug(wxT("Mouse Up @%d,%d"),event.m_x,event.m_y); + return GetEventHandler()->ProcessEvent(event); } bool wxWindowCocoa::Cocoa_otherMouseDown(WX_NSEvent theEvent)