X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6a9afc7adfa2ece7384ee5986854615f2ba6f723..a0b0865599239b35bbfb1fcb1d564c077f90eb66:/src/cocoa/dialog.mm diff --git a/src/cocoa/dialog.mm b/src/cocoa/dialog.mm index 3a3625556d..d4d2c51fd6 100644 --- a/src/cocoa/dialog.mm +++ b/src/cocoa/dialog.mm @@ -9,13 +9,21 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -#include "wx/dialog.h" -#include "wx/app.h" -#include "wx/settings.h" -#include "wx/log.h" +#include "wx/wxprec.h" +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" + #include "wx/dialog.h" + #include "wx/settings.h" +#endif //WX_PRECOMP + +#include "wx/cocoa/autorelease.h" +#include "wx/cocoa/string.h" #import #import +#import +#import // Lists to keep track of windows, so we can disable/enable them // for modal dialogs @@ -44,6 +52,7 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID winid, long style, const wxString& name) { + wxAutoNSAutoreleasePool pool; wxTopLevelWindows.Append(this); if(!CreateBase(parent,winid,pos,size,style,wxDefaultValidator,name)) @@ -67,6 +76,8 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID winid, // above alloc and thus the retain count will be 1. [m_cocoaNSWindow release]; wxLogDebug("wxDialog m_cocoaNSWindow retainCount=%d",[m_cocoaNSWindow retainCount]); + [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)]; + [m_cocoaNSWindow setHidesOnDeactivate:NO]; return true; } @@ -76,7 +87,7 @@ wxDialog::~wxDialog() wxLogDebug("Destroying"); // setReleasedWhenClosed: NO [m_cocoaNSWindow close]; - DisassociateNSPanel(m_cocoaNSWindow); + DisassociateNSPanel(GetNSPanel()); } void wxDialog::Cocoa_close(void) @@ -102,14 +113,33 @@ void wxDialog::SetModal(bool flag) bool wxDialog::Show(bool show) { + if(m_isShown == show) + return false; if(show) InitDialog(); if(IsModal()) { + m_isShown = show; if(show) { + wxAutoNSAutoreleasePool pool; wxModalDialogs.Append(this); wxLogDebug("runModal"); + NSApplication *theNSApp = wxTheApp->GetNSApplication(); + // If the app hasn't started, flush the event queue + // If we don't do this, the Dock doesn't get the message that + // the app has started so will refuse to activate it. + if(![theNSApp isRunning]) + { + while(NSEvent *event = [theNSApp + nextEventMatchingMask:NSAnyEventMask + untilDate:[NSDate distantPast] + inMode:NSDefaultRunLoopMode + dequeue: YES]) + { + [theNSApp sendEvent: event]; + } + } [wxTheApp->GetNSApplication() runModalForWindow:m_cocoaNSWindow]; wxLogDebug("runModal END"); } @@ -120,6 +150,8 @@ bool wxDialog::Show(bool show) wxModalDialogs.DeleteObject(this); } } + else + return wxTopLevelWindow::Show(show); return true; }