X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/449c567346a1b3937e532cd87aac007faad76b04..d223107206e4dfa6768e0bc2455325dd49e4d2bb:/src/cocoa/dialog.mm?ds=sidebyside diff --git a/src/cocoa/dialog.mm b/src/cocoa/dialog.mm index a73f22e244..eede94cdfc 100644 --- a/src/cocoa/dialog.mm +++ b/src/cocoa/dialog.mm @@ -18,9 +18,12 @@ #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 @@ -72,24 +75,23 @@ bool wxDialog::Create(wxWindow *parent, wxWindowID winid, // Because we do not release on close, the following release matches the // above alloc and thus the retain count will be 1. [m_cocoaNSWindow release]; - wxLogDebug("wxDialog m_cocoaNSWindow retainCount=%d",[m_cocoaNSWindow retainCount]); + wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxDialog m_cocoaNSWindow retainCount=%d"),[m_cocoaNSWindow retainCount]); + [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)]; + [m_cocoaNSWindow setHidesOnDeactivate:NO]; return true; } wxDialog::~wxDialog() { - wxLogDebug("Destroying"); - // setReleasedWhenClosed: NO - [m_cocoaNSWindow close]; - DisassociateNSPanel(m_cocoaNSWindow); + DisassociateNSPanel(GetNSPanel()); } -void wxDialog::Cocoa_close(void) +void wxDialog::CocoaDelegate_windowWillClose(void) { m_closed = true; /* Actually, this isn't true anymore */ - wxLogDebug("Woah: Dialogs are not generally closed"); + wxLogTrace(wxTRACE_COCOA,wxT("Woah: Dialogs are not generally closed")); } void wxDialog::SetModal(bool flag) @@ -119,13 +121,28 @@ bool wxDialog::Show(bool show) { wxAutoNSAutoreleasePool pool; wxModalDialogs.Append(this); - wxLogDebug("runModal"); + wxLogTrace(wxTRACE_COCOA,wxT("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"); + wxLogTrace(wxTRACE_COCOA,wxT("runModal END")); } else { - wxLogDebug("abortModal"); + wxLogTrace(wxTRACE_COCOA,wxT("abortModal")); [wxTheApp->GetNSApplication() abortModal]; wxModalDialogs.DeleteObject(this); } @@ -178,13 +195,13 @@ void wxDialog::OnCloseWindow(wxCloseEvent& event) if ( closing.Member(this) ) { - wxLogDebug("WARNING: Attempting to recursively call Close for dialog"); + wxLogDebug(wxT("WARNING: Attempting to recursively call Close for dialog")); return; } closing.Append(this); - wxLogDebug("Sending Cancel Event"); + wxLogTrace(wxTRACE_COCOA,wxT("Sending Cancel Event")); wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL); cancelEvent.SetEventObject( this ); GetEventHandler()->ProcessEvent(cancelEvent); // This may close the dialog @@ -210,7 +227,7 @@ void wxDialog::OnApply(wxCommandEvent& event) void wxDialog::OnCancel(wxCommandEvent& event) { - wxLogDebug("Cancelled!"); + wxLogTrace(wxTRACE_COCOA,wxT("Cancelled!")); EndModal(wxID_CANCEL); }