X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f13cca8f677a12a0dd1ba5eca2ad33d84a62c95..c5fc899bf29ca7d9c4e2a070e28228b430a68dd3:/src/cocoa/toplevel.mm diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index c1ef688bda..d87628547c 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -45,6 +45,8 @@ wxWindowList wxModelessWindows; // wxTopLevelWindowCocoa implementation // ============================================================================ +wxTopLevelWindowCocoa *wxTopLevelWindowCocoa::sm_cocoaDeactivateWindow = NULL; + // ---------------------------------------------------------------------------- // wxTopLevelWindowCocoa creation // ---------------------------------------------------------------------------- @@ -135,11 +137,22 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa() { + wxASSERT(sm_cocoaDeactivateWindow!=this); wxAutoNSAutoreleasePool pool; DestroyChildren(); SetNSWindow(NULL); } +bool wxTopLevelWindowCocoa::Destroy() +{ + if(sm_cocoaDeactivateWindow==this) + { + sm_cocoaDeactivateWindow = NULL; + wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(); + } + return wxTopLevelWindowBase::Destroy(); +} + // ---------------------------------------------------------------------------- // wxTopLevelWindowCocoa Cocoa Specifics // ---------------------------------------------------------------------------- @@ -155,7 +168,7 @@ wxMenuBar* wxTopLevelWindowCocoa::GetAppMenuBar(wxCocoaNSWindow *win) void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow) { bool need_debug = cocoaNSWindow || m_cocoaNSWindow; - if(need_debug) wxLogDebug("wxTopLevelWindowCocoa=%p::SetNSWindow [m_cocoaNSWindow=%p retainCount]=%d",this,m_cocoaNSWindow,[m_cocoaNSWindow retainCount]); + if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxTopLevelWindowCocoa=%p::SetNSWindow [m_cocoaNSWindow=%p retainCount]=%d"),this,m_cocoaNSWindow,[m_cocoaNSWindow retainCount]); DisassociateNSWindow(m_cocoaNSWindow); [cocoaNSWindow retain]; [m_cocoaNSWindow release]; @@ -165,7 +178,7 @@ void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow) else SetNSView(NULL); AssociateNSWindow(m_cocoaNSWindow); - if(need_debug) wxLogDebug("wxTopLevelWindowCocoa=%p::SetNSWindow [cocoaNSWindow=%p retainCount]=%d",this,cocoaNSWindow,[cocoaNSWindow retainCount]); + if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxTopLevelWindowCocoa=%p::SetNSWindow [cocoaNSWindow=%p retainCount]=%d"),this,cocoaNSWindow,[cocoaNSWindow retainCount]); } void wxTopLevelWindowCocoa::CocoaReplaceView(WX_NSView oldView, WX_NSView newView) @@ -174,9 +187,17 @@ void wxTopLevelWindowCocoa::CocoaReplaceView(WX_NSView oldView, WX_NSView newVie [m_cocoaNSWindow setContentView:newView]; } +/*static*/ void wxTopLevelWindowCocoa::DeactivatePendingWindow() +{ + if(sm_cocoaDeactivateWindow) + sm_cocoaDeactivateWindow->wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(); + sm_cocoaDeactivateWindow = NULL; +} + void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeKey(void) { - wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey",this); + DeactivatePendingWindow(); + wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey"),this); wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); @@ -184,7 +205,7 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeKey(void) void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(void) { - wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignKey",this); + wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignKey"),this); wxActivateEvent event(wxEVT_ACTIVATE, FALSE, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); @@ -192,22 +213,18 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(void) void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeMain(void) { - wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeMain",this); + wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeMain"),this); } void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignMain(void) { - wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignMain",this); + wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignMain"),this); } void wxTopLevelWindowCocoa::CocoaDelegate_windowWillClose(void) { m_closed = true; Destroy(); - /* Be SURE that idle events get ran. If the window was not active when - it was closed, then there will be no more events to trigger this and - therefore it must be done here */ - wxTheApp->CocoaInstallRequestedIdleHandler(); } bool wxTopLevelWindowCocoa::CocoaDelegate_windowShouldClose() @@ -215,6 +232,15 @@ bool wxTopLevelWindowCocoa::CocoaDelegate_windowShouldClose() return wxWindowBase::Close(false); } +void wxTopLevelWindowCocoa::CocoaDelegate_wxMenuItemAction(WX_NSMenuItem menuItem) +{ +} + +bool wxTopLevelWindowCocoa::CocoaDelegate_validateMenuItem(WX_NSMenuItem menuItem) +{ + return false; +} + // ---------------------------------------------------------------------------- // wxTopLevelWindowCocoa maximize/minimize // ---------------------------------------------------------------------------- @@ -319,7 +345,7 @@ void wxTopLevelWindowCocoa::CocoaSetWxWindowSize(int width, int height) void wxTopLevelWindowCocoa::DoMoveWindow(int x, int y, int width, int height) { -// wxLogDebug("wxTopLevelWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); + wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,"wxTopLevelWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height); NSRect cocoaRect = NSMakeRect(x,y,width,height); [m_cocoaNSWindow setFrame: cocoaRect display:NO]; @@ -332,7 +358,7 @@ void wxTopLevelWindowCocoa::DoGetSize(int *w, int *h) const *w=(int)cocoaRect.size.width; if(h) *h=(int)cocoaRect.size.height; -// wxLogDebug("wxTopLevelWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); + wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,"wxTopLevelWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height); } void wxTopLevelWindowCocoa::DoGetPosition(int *x, int *y) const @@ -342,6 +368,6 @@ void wxTopLevelWindowCocoa::DoGetPosition(int *x, int *y) const *x=(int)cocoaRect.origin.x; if(y) *y=(int)cocoaRect.origin.y; -// wxLogDebug("wxTopLevelWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); + wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,"wxTopLevelWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y); }