X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d76fe38b29803642f9b70c1457c25dbc1640f63e..9742d3cc186a90b7069d3393aea4f8c86e1e3f37:/src/gtk1/app.cpp diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index 98327a2aee..bd85f4f6a2 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -93,17 +93,17 @@ 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 ); } + /* 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()) { } + return TRUE; } @@ -118,9 +118,9 @@ void wxWakeUpIdle() wxMutexGuiEnter(); #endif - if (g_isIdle) + if (g_isIdle) wxapp_install_idle_handler(); - + #if wxUSE_THREADS if (!wxThread::IsMain()) wxMutexGuiLeave(); @@ -204,7 +204,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 +219,7 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) // release lock again gdk_threads_leave(); - + return TRUE; } @@ -250,6 +250,8 @@ wxApp::wxApp() #endif m_colorCube = (unsigned char*) NULL; + + m_useBestVisual = FALSE; } wxApp::~wxApp() @@ -270,8 +272,9 @@ 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()) + + if ((gdk_visual_get_best() != gdk_visual_get_system()) && + (m_useBestVisual)) { GdkVisual* vis = gdk_visual_get_best(); gtk_widget_set_default_visual( vis ); @@ -282,9 +285,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; @@ -356,11 +356,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 @@ -512,7 +512,7 @@ void wxApp::CleanUp() if (wxTheColourDatabase) delete wxTheColourDatabase; - + wxTheColourDatabase = (wxColourDatabase*) NULL; wxDeleteStockObjects(); @@ -565,16 +565,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 @@ -613,7 +613,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++; @@ -632,6 +632,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 ) @@ -651,7 +654,7 @@ int wxEntry( int argc, char *argv[] ) if (wxTheApp->Initialized()) { - retValue = wxTheApp->OnRun(); + wxTheApp->OnRun(); wxWindow *topWindow = wxTheApp->GetTopWindow(); if (topWindow) @@ -669,7 +672,8 @@ int wxEntry( int argc, char *argv[] ) wxTheApp->SetTopWindow( (wxWindow*) NULL ); } } - wxTheApp->OnExit(); + + retValue = wxTheApp->OnExit(); } }