]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/dialog.mm
Add wxTimer::StartOnce().
[wxWidgets.git] / src / osx / cocoa / dialog.mm
index ab4ed1e5c32410fe9c1cc8a7a611eb851ef31e87..6ae5bd86aa215be35316e43ef30edc1e84fd4189 100644 (file)
@@ -1,10 +1,10 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/osx/cocoa/dialog.cpp
+// Name:        src/osx/cocoa/dialog.mm
 // Purpose:     wxDialog class
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
 // Purpose:     wxDialog class
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
-// RCS-ID:      $Id: dialog.cpp 54820 2008-07-29 20:04:11Z SC $
+// RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 extern wxList wxModalDialogs;
 
 
 extern wxList wxModalDialogs;
 
-void wxDialog::DoShowModal()
-{
-    wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
-
-    // 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.
-    NSApplication *theNSApp = [NSApplication sharedApplication];
-    if (![theNSApp isRunning])
-    {
-        wxMacAutoreleasePool pool;
-        while(NSEvent *event = [theNSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES])
-        {
-            [theNSApp sendEvent:event];
-        }
-    }
-
-    wxModalDialogs.Append(this);
-
-    SetFocus() ;
-/*
-    WindowGroupRef windowGroup;
-    WindowGroupRef formerParentGroup;
-    bool resetGroupParent = false;
-
-    if ( GetParent() == NULL )
-    {
-        windowGroup = GetWindowGroup(windowRef) ;
-        formerParentGroup = GetWindowGroupParent( windowGroup );
-        SetWindowGroupParent( windowGroup, GetWindowGroupOfClass( kMovableModalWindowClass ) );
-        resetGroupParent = true;
-    }
-*/
+void wxDialog::DoShowWindowModal()
+{   
+    wxTopLevelWindow* parent = static_cast<wxTopLevelWindow*>(wxGetTopLevelParent(GetParent()));
+    
+    wxASSERT_MSG(parent, "ShowWindowModal requires the dialog to have a parent.");
+    
+    NSWindow* parentWindow = parent->GetWXWindow();
     NSWindow* theWindow = GetWXWindow();
     NSWindow* theWindow = GetWXWindow();
+    
+    [NSApp beginSheet: theWindow
+            modalForWindow: parentWindow
+            modalDelegate: theWindow
+            didEndSelector: nil
+            contextInfo: nil];
+}
 
 
-    NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
-    while (IsModal())
-    {
-        wxMacAutoreleasePool autoreleasepool;
-        // we cannot break based on the return value, because nested
-        // alerts might set this to stopped as well, so it would be
-        // unsafe
-        [NSApp runModalSession:session];
-
-        // break if ended, perform no further idle processing
-        if (!IsModal())
-            break;
-
-        // do some idle processing
-        bool needMore = false;
-        if (wxTheApp)
-        {
-            wxTheApp->ProcessPendingEvents();
-            needMore = wxTheApp->ProcessIdle();
-        }
-        
-        if (!needMore)
-        {
-            // no more idle processing wanted - block until the next event
-            [theNSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:NO];
-        }
-    }
-    [NSApp endModalSession:session];
-
-/*
-    if ( resetGroupParent )
-    {
-        SetWindowGroupParent( windowGroup , formerParentGroup );
-    }
-*/
+void wxDialog::EndWindowModal()
+{
+    [NSApp endSheet: GetWXWindow()];
+    [GetWXWindow() orderOut:GetWXWindow()];
 }
 }