]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/app.cpp
Explicitly set "C" locale for the tests using decimal point.
[wxWidgets.git] / src / osx / carbon / app.cpp
index f4a209b0a78911ff2f73ba4a921c04353a6d3475..7e03354c972efe3817f18259801ff0ebb7202226 100644 (file)
@@ -249,18 +249,13 @@ short wxApp::MacHandleAEOApp(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNU
 
 short wxApp::MacHandleAEQuit(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply))
 {
-    wxWindow* win = GetTopWindow() ;
-    if ( win )
+    wxCloseEvent event;
+    wxTheApp->OnQueryEndSession(event);
+    if ( !event.GetVeto() )
     {
-        wxCommandEvent exitEvent(wxEVT_COMMAND_MENU_SELECTED, s_macExitMenuItemId);
-        if (!win->GetEventHandler()->ProcessEvent(exitEvent))
-            win->Close(true) ;
+        wxCloseEvent event;
+        wxTheApp->OnEndSession(event);
     }
-    else
-    {
-        ExitMainLoop() ;
-    }
-
     return noErr ;
 }
 
@@ -780,11 +775,6 @@ wxMacAssertOutputHandler(OSType WXUNUSED(componentSignature),
 
 #endif // wxDEBUG_LEVEL
 
-extern "C" void macPostedEventCallback(void *WXUNUSED(unused))
-{
-    wxTheApp->ProcessPendingEvents();
-}
-
 bool wxApp::Initialize(int& argc, wxChar **argv)
 {
     // Mac-specific
@@ -828,16 +818,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
         wxSetWorkingDirectory( cwd ) ;
     }
 
-    /* connect posted events to common-mode run loop so that wxPostEvent events
-       are handled even while we're in the menu or on a scrollbar */
-       /*
-    CFRunLoopSourceContext event_posted_context = {0};
-    event_posted_context.perform = macPostedEventCallback;
-    m_macEventPosted = CFRunLoopSourceCreate(NULL,0,&event_posted_context);
-    CFRunLoopAddSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
-    // run loop takes ownership
-    CFRelease(m_macEventPosted);
-        */
     return true;
 }
 
@@ -950,12 +930,6 @@ void wxApp::CleanUp()
     wxToolTip::RemoveToolTips() ;
 #endif
 
-    if (m_macEventPosted)
-    {
-        CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
-        m_macEventPosted = NULL;
-    }
-
     DoCleanUp();
 
     wxAppBase::CleanUp();
@@ -1063,7 +1037,6 @@ wxApp::wxApp()
 
     m_macCurrentEvent = NULL ;
     m_macCurrentEventHandlerCallRef = NULL ;
-    m_macEventPosted = NULL ;
     m_macPool = new wxMacAutoreleasePool();
 }
 
@@ -1109,12 +1082,10 @@ void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
 
 void wxApp::WakeUpIdle()
 {
-    if (m_macEventPosted)
-    {
-        CFRunLoopSourceSignal(m_macEventPosted);
-    }
+    wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
 
-    wxMacWakeUp() ;
+    if ( loop )
+        loop->WakeUp();
 }
 
 void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event))
@@ -1127,10 +1098,17 @@ void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event))
 // user can veto the close, and therefore the end session.
 void wxApp::OnQueryEndSession(wxCloseEvent& event)
 {
-    if (GetTopWindow())
+    if ( !wxDialog::OSXHasModalDialogsOpen() )
+    {
+        if (GetTopWindow())
+        {
+            if (!GetTopWindow()->Close(!event.CanVeto()))
+                event.Veto(true);
+        }
+    }
+    else
     {
-        if (!GetTopWindow()->Close(!event.CanVeto()))
-            event.Veto(true);
+        event.Veto(true);
     }
 }