X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/080c7d56e0ab91ba778c1687eee353ea7cef4485..291dddd7dc05b31db1c03b1b8841c579e65dce16:/src/cocoa/toplevel.mm?ds=inline diff --git a/src/cocoa/toplevel.mm b/src/cocoa/toplevel.mm index c51f22719a..7a7c11cbb0 100644 --- a/src/cocoa/toplevel.mm +++ b/src/cocoa/toplevel.mm @@ -4,9 +4,9 @@ // Author: David Elliott // Modified by: // Created: 2002/11/27 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) 2002 David Elliott -// License: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -30,7 +30,6 @@ #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" -#include "wx/cocoa/mbarman.h" #import #import @@ -46,6 +45,8 @@ wxWindowList wxModelessWindows; // wxTopLevelWindowCocoa implementation // ============================================================================ +wxTopLevelWindowCocoa *wxTopLevelWindowCocoa::sm_cocoaDeactivateWindow = NULL; + // ---------------------------------------------------------------------------- // wxTopLevelWindowCocoa creation // ---------------------------------------------------------------------------- @@ -101,8 +102,19 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent, if(style & wxFRAME_TOOL_WINDOW) cocoaStyle |= NSUtilityWindowMask; + wxPoint realpos = pos; + wxSize realsize = size; + // FIXME: this is lame + if(realpos.x==-1) + realpos.x=100; + if(realpos.y==-1) + realpos.y=100; + if(realsize.x==-1) + realsize.x=200; + if(realsize.y==-1) + realsize.y=200; // NOTE: y-origin needs to be flipped. - NSRect cocoaRect = [NSWindow contentRectForFrameRect:NSMakeRect(pos.x,pos.y,size.x,size.y) styleMask:cocoaStyle]; + NSRect cocoaRect = [NSWindow contentRectForFrameRect:NSMakeRect(realpos.x,realpos.y,realsize.x,realsize.y) styleMask:cocoaStyle]; m_cocoaNSWindow = NULL; m_cocoaNSView = NULL; @@ -125,15 +137,34 @@ 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 // ---------------------------------------------------------------------------- +wxMenuBar* wxTopLevelWindowCocoa::GetAppMenuBar(wxCocoaNSWindow *win) +{ + wxTopLevelWindowCocoa *parent = wxDynamicCast(GetParent(),wxTopLevelWindow); + if(parent) + return parent->GetAppMenuBar(win); + return NULL; +} + void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow) { bool need_debug = cocoaNSWindow || m_cocoaNSWindow; @@ -156,10 +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) { + DeactivatePendingWindow(); wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey",this); - wxMenuBarManager::GetInstance()->WindowDidBecomeKey(this); wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); @@ -171,22 +209,19 @@ void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(void) wxActivateEvent event(wxEVT_ACTIVATE, FALSE, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); - wxMenuBarManager::GetInstance()->WindowDidResignKey(this); } void wxTopLevelWindowCocoa::CocoaDelegate_windowDidBecomeMain(void) { wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeMain",this); - wxMenuBarManager::GetInstance()->WindowDidBecomeMain(this); } void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignMain(void) { wxLogDebug("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignMain",this); - wxMenuBarManager::GetInstance()->WindowDidResignMain(this); } -void wxTopLevelWindowCocoa::Cocoa_close(void) +void wxTopLevelWindowCocoa::CocoaDelegate_windowWillClose(void) { m_closed = true; Destroy(); @@ -257,8 +292,8 @@ bool wxTopLevelWindowCocoa::Close(bool force) // will invoke windowShouldClose which will call the base class version // of Close() which will NOT Destroy() the window (see below) but // if closing is not stopped, then performClose will go ahead and - // close the window which will invoke Cocoa_close() setting m_closed - // to true and Destroy()ing the window. + // close the window which will send the close notifications setting + // m_closed to true and Destroy()ing the window. [m_cocoaNSWindow performClose:m_cocoaNSWindow]; return m_closed; }