X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8480b297e70a29b785421ded6db22ae024e35038..47678105333557b1a5f225fe57e4ae27fa4b8706:/src/gtk1/app.cpp diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index 9b13515ed4..b89d77cd5c 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -93,17 +93,25 @@ bool wxYield() while (gtk_events_pending()) gtk_main_iteration(); - /* it's necessary to call ProcessIdle() to update the frames sizes which - might have been changed (it also will update other things set from - OnUpdateUI() which is a nice (and desired) side effect) */ - while (wxTheApp->ProcessIdle()) { } - if (has_idle) { /* re-add idle handler */ wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); } + // disable log flushing from here because a call to wxYield() shouldn't + // normally result in message boxes popping up &c + wxLog::Suspend(); + + /* it's necessary to call ProcessIdle() to update the frames sizes which + might have been changed (it also will update other things set from + OnUpdateUI() which is a nice (and desired) side effect) */ + while (wxTheApp->ProcessIdle()) + ; + + // let the logs be flashed again + wxLog::Resume(); + return TRUE; } @@ -118,9 +126,9 @@ void wxWakeUpIdle() wxMutexGuiEnter(); #endif - if (g_isIdle) + if (g_isIdle) wxapp_install_idle_handler(); - + #if wxUSE_THREADS if (!wxThread::IsMain()) wxMutexGuiLeave(); @@ -204,7 +212,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - + g_mainThreadLocked = TRUE; // wake up other threads @@ -219,7 +227,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // release lock again gdk_threads_leave(); - + return TRUE; } @@ -250,7 +258,7 @@ wxApp::wxApp() #endif m_colorCube = (unsigned char*) NULL; - + m_useBestVisual = FALSE; } @@ -272,7 +280,7 @@ bool wxApp::OnInitGui() /* on some machines, the default visual is just 256 colours, so we make sure we get the best. this can sometimes be wasteful, of course, but what do these guys pay $30.000 for? */ - + if ((gdk_visual_get_best() != gdk_visual_get_system()) && (m_useBestVisual)) { @@ -285,9 +293,6 @@ bool wxApp::OnInitGui() visual = vis; } - wxRootWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_widget_realize( wxRootWindow ); - /* Nothing to do for 15, 16, 24, 32 bit displays */ if (visual->depth > 8) return TRUE; @@ -359,11 +364,11 @@ bool wxApp::ProcessIdle() void wxApp::OnIdle( wxIdleEvent &event ) { static bool s_inOnIdle = FALSE; - + /* Avoid recursion (via ProcessEvent default case) */ if (s_inOnIdle) return; - + s_inOnIdle = TRUE; /* Resend in the main thread events which have been prepared in other @@ -383,9 +388,7 @@ void wxApp::OnIdle( wxIdleEvent &event ) /* flush the logged messages if any */ #if wxUSE_LOG - wxLog *log = wxLog::GetActiveTarget(); - if (log != NULL && log->HasPendingMessages()) - log->Flush(); + wxLog::FlushActive(); #endif // wxUSE_LOG } @@ -515,7 +518,7 @@ void wxApp::CleanUp() if (wxTheColourDatabase) delete wxTheColourDatabase; - + wxTheColourDatabase = (wxColourDatabase*) NULL; wxDeleteStockObjects(); @@ -568,16 +571,16 @@ int wxEntry( int argc, char *argv[] ) /* GTK 1.2 up to version 1.2.3 has broken threads */ if ((gtk_major_version == 1) && (gtk_minor_version == 2) && - (gtk_micro_version < 4)) + (gtk_micro_version < 4)) { - printf( "wxWindows warning: Disabled GUI threading due to outdated GTK version\n" ); + printf( "wxWindows warning: GUI threading disabled due to outdated GTK version\n" ); } else { g_thread_init(NULL); } #endif - + gtk_set_locale(); #if wxUSE_WCHAR_T @@ -616,7 +619,7 @@ int wxEntry( int argc, char *argv[] ) #if wxUSE_UNICODE wxTheApp->argv = new wxChar*[argc+1]; int mb_argc = 0; - while (mb_argc < argc) + while (mb_argc < argc) { wxTheApp->argv[mb_argc] = wxStrdup(wxConvLibc.cMB2WX(argv[mb_argc])); mb_argc++; @@ -635,6 +638,9 @@ int wxEntry( int argc, char *argv[] ) if ( !wxTheApp->OnInitGui() ) retValue = -1; + wxRootWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_widget_realize( wxRootWindow ); + // Here frames insert themselves automatically into wxTopLevelWindows by // getting created in OnInit(). if ( retValue == 0 ) @@ -654,7 +660,7 @@ int wxEntry( int argc, char *argv[] ) if (wxTheApp->Initialized()) { - retValue = wxTheApp->OnRun(); + wxTheApp->OnRun(); wxWindow *topWindow = wxTheApp->GetTopWindow(); if (topWindow) @@ -672,7 +678,8 @@ int wxEntry( int argc, char *argv[] ) wxTheApp->SetTopWindow( (wxWindow*) NULL ); } } - wxTheApp->OnExit(); + + retValue = wxTheApp->OnExit(); } }