// wxTopLevelWindowCocoa implementation
// ============================================================================
+wxTopLevelWindowCocoa *wxTopLevelWindowCocoa::sm_cocoaDeactivateWindow = NULL;
+
// ----------------------------------------------------------------------------
// wxTopLevelWindowCocoa creation
// ----------------------------------------------------------------------------
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;
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
// ----------------------------------------------------------------------------
[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);
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId());
event.SetEventObject(this);
{
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()