]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/dialog.mm
Added some documentation :)
[wxWidgets.git] / src / cocoa / dialog.mm
index 3a3625556da6cfe386d9d6e9cb496ca98ede44af..01df17f2c358e4690d40ecbe1258dcd2dc5b0051 100644 (file)
@@ -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 <AppKit/NSPanel.h>
 #import <AppKit/NSApplication.h>
+#import <AppKit/NSEvent.h>
+#import <Foundation/NSRunLoop.h>
 
 // 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,10 +87,10 @@ 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 */
@@ -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;
 }