]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/app.cpp
fixed wxStreamBuffer::Tell() to return at least sometimes a valid result
[wxWidgets.git] / src / gtk1 / app.cpp
index 6e1c25de261aedb153d6c96cee36d985bd2071fe..3f05639ce8b0e684d142e82b8fda3856af3861b5 100644 (file)
@@ -42,7 +42,9 @@
 #endif
 
 #include <unistd.h>
-#ifdef __VMS
+#if defined(__DARWIN__)
+// FIXME: select must be used instead of poll (GD)
+#elif defined(__VMS)
 # include <poll.h>
 #else
 # include <sys/poll.h>
@@ -85,12 +87,14 @@ void wxExit()
 // wxYield
 //-----------------------------------------------------------------------------
 
+// not static because used by textctrl.cpp
+//
+// MT-FIXME
+bool wxIsInsideYield = FALSE;
+
 bool wxApp::Yield(bool onlyIfNeeded)
 {
-    // MT-FIXME
-    static bool s_inYield = FALSE;
-
-    if ( s_inYield )
+    if ( wxIsInsideYield )
     {
         if ( !onlyIfNeeded )
         {
@@ -108,7 +112,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
     }
 #endif // wxUSE_THREADS
 
-    s_inYield = TRUE;
+    wxIsInsideYield = TRUE;
 
     if (!g_isIdle)
     {
@@ -137,7 +141,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
     // let the logs be flashed again
     wxLog::Resume();
 
-    s_inYield = FALSE;
+    wxIsInsideYield = FALSE;
 
     return TRUE;
 }
@@ -245,7 +249,14 @@ static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
     wxMutexGuiLeave();
     g_mainThreadLocked = TRUE;
 
+#ifdef __DARWIN__
+    // FIXME: poll is not available under Darwin/Mac OS X and this needs
+    //        to be implemented using select instead (GD)
+    //        what about other BSD derived systems?
+    res = -1;
+#else
     res = poll( (struct pollfd*) ufds, nfds, timeout );
+#endif
 
     wxMutexGuiEnter();
     g_mainThreadLocked = FALSE;
@@ -807,33 +818,24 @@ int wxEntry( int argc, char *argv[] )
 
     if ( retValue == 0 )
     {
-        /* delete pending toplevel windows (typically a single
-           dialog) so that, if there isn't any left, we don't
-           call OnRun() */
+        // Delete pending toplevel windows
         wxTheApp->DeletePendingObjects();
 
-        wxTheApp->m_initialized = wxTopLevelWindows.GetCount() != 0;
+        // When is the app not initialized ?
+        wxTheApp->m_initialized = TRUE;
 
         if (wxTheApp->Initialized())
         {
             wxTheApp->OnRun();
 
             wxWindow *topWindow = wxTheApp->GetTopWindow();
+            
+            // Delete all pending windows if any
+            wxTheApp->DeletePendingObjects();
+    
+            // Reset top window 
             if (topWindow)
-            {
-                /* Forcibly delete the window. */
-                if (topWindow->IsKindOf(CLASSINFO(wxFrame)) ||
-                    topWindow->IsKindOf(CLASSINFO(wxDialog)) )
-                {
-                    topWindow->Close( TRUE );
-                    wxTheApp->DeletePendingObjects();
-                }
-                else
-                {
-                    delete topWindow;
-                    wxTheApp->SetTopWindow( (wxWindow*) NULL );
-                }
-            }
+                wxTheApp->SetTopWindow( (wxWindow*) NULL );
 
             retValue = wxTheApp->OnExit();
         }