]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/app.cpp
merged deleted code back
[wxWidgets.git] / src / x11 / app.cpp
index 90daa58df0c2f04d597b343b70fd37565717349a..74fb19c9af6c29fad664456ec36fea48a19cf935 100644 (file)
@@ -204,7 +204,7 @@ int wxEntryStart( int& argc, char *argv[] )
     // We can't use wxCmdLineParser or OnInitCmdLine and friends because
     // we have to create the Display earlier. If we can find a way to
     // use the wxAppBase API then I'll be quite happy to change it.
-    g_newArgv = new wxChar*[argc];
+    g_newArgv = new wxChar*[argc + 1];
     g_newArgc = 0;
     int i;
     for (i = 0; i < argc; i++)
@@ -253,7 +253,8 @@ int wxEntryStart( int& argc, char *argv[] )
         g_newArgv[g_newArgc] = argv[i];
         g_newArgc ++;
     }
-
+    g_newArgv[g_newArgc] = NULL;
+    
     Display* xdisplay = NULL;
     if (displayName.IsEmpty())
         xdisplay = XOpenDisplay(NULL);
@@ -1174,45 +1175,52 @@ void wxExit()
 
 bool wxApp::Yield(bool onlyIfNeeded)
 {
-    bool s_inYield = FALSE;
-
-    if ( s_inYield )
+    // Sometimes only 2 yields seem
+    // to do the trick, e.g. in the
+    // progress dialog
+    int i;
+    for (i = 0; i < 2; i++)
     {
-        if ( !onlyIfNeeded )
+        bool s_inYield = FALSE;
+
+        if ( s_inYield )
         {
-            wxFAIL_MSG( wxT("wxYield called recursively" ) );
-        }
+            if ( !onlyIfNeeded )
+            {
+                wxFAIL_MSG( wxT("wxYield called recursively" ) );
+            }
 
-        return FALSE;
-    }
+            return FALSE;
+        }
 
-    s_inYield = TRUE;
+        s_inYield = TRUE;
 
-    // Make sure we have an event loop object,
-    // or Pending/Dispatch will fail
-    wxEventLoop* eventLoop = wxEventLoop::GetActive();
-    wxEventLoop* newEventLoop = NULL;
-    if (!eventLoop)
-    {
-        newEventLoop = new wxEventLoop;
-        wxEventLoop::SetActive(newEventLoop);
-    }
+        // Make sure we have an event loop object,
+        // or Pending/Dispatch will fail
+        wxEventLoop* eventLoop = wxEventLoop::GetActive();
+        wxEventLoop* newEventLoop = NULL;
+        if (!eventLoop)
+        {
+            newEventLoop = new wxEventLoop;
+            wxEventLoop::SetActive(newEventLoop);
+        }
 
-    while (wxTheApp && wxTheApp->Pending())
-        wxTheApp->Dispatch();
+        while (wxTheApp && wxTheApp->Pending())
+            wxTheApp->Dispatch();
 
 #if wxUSE_TIMER
-    wxTimer::NotifyTimers();
+        wxTimer::NotifyTimers();
 #endif
-    ProcessIdle();
+        ProcessIdle();
 
-    if (newEventLoop)
-    {
-        wxEventLoop::SetActive(NULL);
-        delete newEventLoop;
-    }
+        if (newEventLoop)
+        {
+            wxEventLoop::SetActive(NULL);
+            delete newEventLoop;
+        }
 
-    s_inYield = FALSE;
+        s_inYield = FALSE;
+    }
 
     return TRUE;
 }