X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b6fa52db667283fea7eaba7abe3dc48b8631f360..64a3ee5fd2926c3e5341af2e4d62925fddb90c43:/src/gtk/app.cpp diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index ddeb9691a0..6369b7d3a7 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -29,7 +29,7 @@ #include "wx/image.h" #if wxUSE_THREADS -#include "wx/thread.h" + #include "wx/thread.h" #endif #include @@ -250,7 +250,7 @@ wxApp::wxApp() m_topWindow = (wxWindow *) NULL; m_exitOnFrameDelete = TRUE; - m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); + m_idleTag = gtk_idle_add_priority( 500, wxapp_idle_callback, (gpointer) NULL ); #if wxUSE_THREADS m_wakeUpTimerTag = 0; @@ -565,14 +565,21 @@ void wxApp::CleanUp() // wxEntry //----------------------------------------------------------------------------- -int wxEntry( int argc, char *argv[] ) + +int wxEntryStart( int argc, char *argv[] ) { #if wxUSE_THREADS /* GTK 1.2 up to version 1.2.3 has broken threads */ - if ((gtk_major_version == 1) && +#ifdef __VMS__ + if ((vms_gtk_major_version() == 1) && + (vms_gtk_minor_version() == 2) && + (vms_gtk_micro_version() < 4)) +#else + if ((gtk_major_version == 1) && (gtk_minor_version == 2) && (gtk_micro_version < 4)) - { +#endif + { printf( "wxWindows warning: GUI threading disabled due to outdated GTK version\n" ); } else @@ -601,6 +608,53 @@ int wxEntry( int argc, char *argv[] ) return -1; } + return 0; +} + + +int wxEntryInitGui() +{ + int retValue = 0; + + if ( !wxTheApp->OnInitGui() ) + retValue = -1; + + wxRootWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_widget_realize( wxRootWindow ); + + return retValue; +} + + +void wxEntryCleanup() +{ +#if wxUSE_LOG + // flush the logged messages if any + wxLog *log = wxLog::GetActiveTarget(); + if (log != NULL && log->HasPendingMessages()) + log->Flush(); + + // continuing to use user defined log target is unsafe from now on because + // some resources may be already unavailable, so replace it by something + // more safe + wxLog *oldlog = wxLog::SetActiveTarget(new wxLogStderr); + if ( oldlog ) + delete oldlog; +#endif // wxUSE_LOG + + wxApp::CleanUp(); + + gdk_threads_leave(); +} + + + +int wxEntry( int argc, char *argv[] ) +{ + int err = wxEntryStart(argc, argv); + if (err) + return err; + if (!wxTheApp) { wxCHECK_MSG( wxApp::GetInitializerFunction(), -1, @@ -633,13 +687,8 @@ int wxEntry( int argc, char *argv[] ) wxStripExtension( name ); wxTheApp->SetAppName( name ); - int retValue = 0; - - if ( !wxTheApp->OnInitGui() ) - retValue = -1; - - wxRootWindow = gtk_window_new( GTK_WINDOW_TOPLEVEL ); - gtk_widget_realize( wxRootWindow ); + int retValue; + retValue = wxEntryInitGui(); // Here frames insert themselves automatically into wxTopLevelWindows by // getting created in OnInit(). @@ -683,23 +732,7 @@ int wxEntry( int argc, char *argv[] ) } } -#if wxUSE_LOG - // flush the logged messages if any - wxLog *log = wxLog::GetActiveTarget(); - if (log != NULL && log->HasPendingMessages()) - log->Flush(); - - // continuing to use user defined log target is unsafe from now on because - // some resources may be already unavailable, so replace it by something - // more safe - wxLog *oldlog = wxLog::SetActiveTarget(new wxLogStderr); - if ( oldlog ) - delete oldlog; -#endif // wxUSE_LOG - - wxApp::CleanUp(); - - gdk_threads_leave(); + wxEntryCleanup(); return retValue; }