X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48580976469f7c46b730f96effacfa680e55e3cd..98773c1c8b43567f385ac4e010579dff17740a51:/src/cocoa/window.mm diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index 2bcdeb8c73..b74cc3ca5e 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -147,6 +147,7 @@ bool wxWindowCocoaHider::Cocoa_drawRect(const NSRect& rect) wxWindowCocoaScroller::wxWindowCocoaScroller(wxWindow *owner) : m_owner(owner) { + wxAutoNSAutoreleasePool pool; wxASSERT(owner); wxASSERT(owner->GetNSView()); m_cocoaNSScrollView = [[NSScrollView alloc] @@ -267,8 +268,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 +280,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 +305,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 +419,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) @@ -528,7 +546,7 @@ bool wxWindow::Show(bool show) void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags) { - wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoSetSizeWindow(%d,%d,%d,%d,Auto: %s%s)",this,x,y,width,height,(sizeFlags&wxSIZE_AUTO_WIDTH)?"W":".",sizeFlags&wxSIZE_AUTO_HEIGHT?"H":"."); + wxLogTrace(wxTRACE_COCOA_Window_Size,wxT("wxWindow=%p::DoSetSizeWindow(%d,%d,%d,%d,Auto: %s%s)"),this,x,y,width,height,(sizeFlags&wxSIZE_AUTO_WIDTH)?"W":".",sizeFlags&wxSIZE_AUTO_HEIGHT?"H":"."); int currentX, currentY; int currentW, currentH; DoGetPosition(¤tX, ¤tY); @@ -569,7 +587,7 @@ void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags void wxWindowCocoa::DoMoveWindow(int x, int y, int width, int height) { wxAutoNSAutoreleasePool pool; - wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); + wxLogTrace(wxTRACE_COCOA_Window_Size,wxT("wxWindow=%p::DoMoveWindow(%d,%d,%d,%d)"),this,x,y,width,height); NSView *nsview = GetNSViewForSuperview(); NSView *superview = [nsview superview]; @@ -614,7 +632,7 @@ void wxWindow::DoGetSize(int *w, int *h) const *w=(int)cocoaRect.size.width; if(h) *h=(int)cocoaRect.size.height; - wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); + wxLogTrace(wxTRACE_COCOA_Window_Size,wxT("wxWindow=%p::DoGetSize = (%d,%d)"),this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); } void wxWindow::DoGetPosition(int *x, int *y) const @@ -629,7 +647,7 @@ void wxWindow::DoGetPosition(int *x, int *y) const *x=(int)cocoaRect.origin.x; if(y) *y=(int)(parentRect.size.height-(cocoaRect.origin.y+cocoaRect.size.height)); - wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); + wxLogTrace(wxTRACE_COCOA_Window_Size,wxT("wxWindow=%p::DoGetPosition = (%d,%d)"),this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); } WXWidget wxWindow::GetHandle() const