X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b030203c5926bd6af8bc310469c911f2143f7e1..d5e64615977c6839abe565919e8da50ffda40604:/src/cocoa/window.mm diff --git a/src/cocoa/window.mm b/src/cocoa/window.mm index 8fdd67223a..91e48b8579 100644 --- a/src/cocoa/window.mm +++ b/src/cocoa/window.mm @@ -201,22 +201,22 @@ void wxWindowCocoaScroller::ClientSizeToSize(int &width, int &height) hasHorizontalScroller: [m_cocoaNSScrollView hasHorizontalScroller] hasVerticalScroller: [m_cocoaNSScrollView hasVerticalScroller] borderType: [m_cocoaNSScrollView borderType]]; - width = frameSize.width; - height = frameSize.height; + width = (int)frameSize.width; + height = (int)frameSize.height; } void wxWindowCocoaScroller::DoGetClientSize(int *x, int *y) const { NSSize nssize = [m_cocoaNSScrollView contentSize]; if(x) - *x = nssize.width; + *x = (int)nssize.width; if(y) - *y = nssize.height; + *y = (int)nssize.height; } void wxWindowCocoaScroller::Cocoa_FrameChanged(void) { - wxLogDebug(wxT("Cocoa_FrameChanged")); + wxLogTrace(wxTRACE_COCOA,wxT("Cocoa_FrameChanged")); wxSizeEvent event(m_owner->GetSize(), m_owner->GetId()); event.SetEventObject(m_owner); m_owner->GetEventHandler()->ProcessEvent(event); @@ -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,14 +304,18 @@ 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) wxLogDebug(wxT("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d"),this,m_cocoaNSView,[m_cocoaNSView retainCount]); + 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); [cocoaNSView retain]; [m_cocoaNSView release]; m_cocoaNSView = cocoaNSView; AssociateNSView(m_cocoaNSView); - if(need_debug) wxLogDebug(wxT("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d"),this,cocoaNSView,[cocoaNSView retainCount]); + if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d"),this,cocoaNSView,[cocoaNSView retainCount]); } WX_NSView wxWindowCocoa::GetNSViewForSuperview() const @@ -329,7 +336,7 @@ WX_NSView wxWindowCocoa::GetNSViewForHiding() const bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect) { - wxLogDebug(wxT("Cocoa_drawRect")); + wxLogTrace(wxTRACE_COCOA,wxT("Cocoa_drawRect")); // Recursion can happen if the event loop runs from within the paint // handler. For instance, if an assertion dialog is shown. // FIXME: This seems less than ideal. @@ -370,7 +377,7 @@ bool wxWindowCocoa::Cocoa_mouseMoved(WX_NSEvent theEvent) { wxMouseEvent event(wxEVT_MOTION); InitMouseEvent(event,theEvent); - wxLogDebug(wxT("Mouse Drag @%d,%d"),event.m_x,event.m_y); + wxLogTrace(wxTRACE_COCOA,wxT("Mouse Drag @%d,%d"),event.m_x,event.m_y); return GetEventHandler()->ProcessEvent(event); } @@ -388,7 +395,7 @@ bool wxWindowCocoa::Cocoa_mouseDown(WX_NSEvent theEvent) { wxMouseEvent event([theEvent clickCount]<2?wxEVT_LEFT_DOWN:wxEVT_LEFT_DCLICK); InitMouseEvent(event,theEvent); - wxLogDebug(wxT("Mouse Down @%d,%d num clicks=%d"),event.m_x,event.m_y,[theEvent clickCount]); + wxLogTrace(wxTRACE_COCOA,wxT("Mouse Down @%d,%d num clicks=%d"),event.m_x,event.m_y,[theEvent clickCount]); return GetEventHandler()->ProcessEvent(event); } @@ -397,7 +404,7 @@ bool wxWindowCocoa::Cocoa_mouseDragged(WX_NSEvent theEvent) wxMouseEvent event(wxEVT_MOTION); InitMouseEvent(event,theEvent); event.m_leftDown = true; - wxLogDebug(wxT("Mouse Drag @%d,%d"),event.m_x,event.m_y); + wxLogTrace(wxTRACE_COCOA,wxT("Mouse Drag @%d,%d"),event.m_x,event.m_y); return GetEventHandler()->ProcessEvent(event); } @@ -405,23 +412,33 @@ bool wxWindowCocoa::Cocoa_mouseUp(WX_NSEvent theEvent) { wxMouseEvent event(wxEVT_LEFT_UP); InitMouseEvent(event,theEvent); - wxLogDebug(wxT("Mouse Up @%d,%d"),event.m_x,event.m_y); + wxLogTrace(wxTRACE_COCOA,wxT("Mouse Up @%d,%d"),event.m_x,event.m_y); return GetEventHandler()->ProcessEvent(event); } 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) @@ -441,7 +458,7 @@ bool wxWindowCocoa::Cocoa_otherMouseUp(WX_NSEvent theEvent) void wxWindowCocoa::Cocoa_FrameChanged(void) { - wxLogDebug(wxT("Cocoa_FrameChanged")); + wxLogTrace(wxTRACE_COCOA,wxT("Cocoa_FrameChanged")); wxSizeEvent event(GetSize(), m_windowId); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); @@ -528,7 +545,7 @@ bool wxWindow::Show(bool show) void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags) { -// wxLogDebug("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,"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 +586,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; -// wxLogDebug("wxWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); + wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); NSView *nsview = GetNSViewForSuperview(); NSView *superview = [nsview superview]; @@ -614,7 +631,7 @@ void wxWindow::DoGetSize(int *w, int *h) const *w=(int)cocoaRect.size.width; if(h) *h=(int)cocoaRect.size.height; -// wxLogDebug("wxWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); + wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); } void wxWindow::DoGetPosition(int *x, int *y) const @@ -629,7 +646,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)); -// wxLogDebug("wxWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); + wxLogTrace(wxTRACE_COCOA_Window_Size,"wxWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); } WXWidget wxWindow::GetHandle() const @@ -672,7 +689,7 @@ void wxWindow::DoClientToScreen(int *x, int *y) const // Get size *available for subwindows* i.e. excluding menu bar etc. void wxWindow::DoGetClientSize(int *x, int *y) const { - wxLogDebug(wxT("DoGetClientSize:")); + wxLogTrace(wxTRACE_COCOA,wxT("DoGetClientSize:")); if(m_cocoaScroller) m_cocoaScroller->DoGetClientSize(x,y); else @@ -681,7 +698,7 @@ void wxWindow::DoGetClientSize(int *x, int *y) const void wxWindow::DoSetClientSize(int width, int height) { - wxLogDebug(wxT("DoSetClientSize=(%d,%d)"),width,height); + wxLogTrace(wxTRACE_COCOA_Window_Size,wxT("DoSetClientSize=(%d,%d)"),width,height); if(m_cocoaScroller) m_cocoaScroller->ClientSizeToSize(width,height); CocoaSetWxWindowSize(width,height);