X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/05e2b077c6187ff4d894e4af58ccd99536c9c584..88f23fdd8366d57d15cba42d152539ff9ccbdd39:/src/gtk/app.cpp diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index 66f2b9a395..7df0bb49a2 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -390,7 +390,7 @@ GtkWidget* wxGetRootWindow() IMPLEMENT_DYNAMIC_CLASS(wxApp,wxEvtHandler) BEGIN_EVENT_TABLE(wxApp, wxEvtHandler) - EVT_IDLE(wxApp::OnIdle) + EVT_IDLE(wxAppBase::OnIdle) END_EVENT_TABLE() wxApp::wxApp() @@ -534,109 +534,6 @@ GdkVisual *wxApp::GetGdkVisual() return visual; } -bool wxApp::ProcessIdle() -{ - wxWindowList::Node* node = wxTopLevelWindows.GetFirst(); - node = wxTopLevelWindows.GetFirst(); - while (node) - { - wxWindow* win = node->GetData(); - CallInternalIdle( win ); - - node = node->GetNext(); - } - - wxIdleEvent event; - event.SetEventObject( this ); - ProcessEvent( event ); - - return event.MoreRequested(); -} - -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 - // threads - ProcessPendingEvents(); - - // 'Garbage' collection of windows deleted with Close() - DeletePendingObjects(); - - // Send OnIdle events to all windows - bool needMore = SendIdleEvents(); - - if (needMore) - event.RequestMore(TRUE); - - s_inOnIdle = FALSE; -} - -bool wxApp::SendIdleEvents() -{ - bool needMore = FALSE; - - wxWindowList::Node* node = wxTopLevelWindows.GetFirst(); - while (node) - { - wxWindow* win = node->GetData(); - if (SendIdleEvents(win)) - needMore = TRUE; - - node = node->GetNext(); - } - - return needMore; -} - -bool wxApp::CallInternalIdle( wxWindow* win ) -{ - win->OnInternalIdle(); - - wxWindowList::Node *node = win->GetChildren().GetFirst(); - while (node) - { - wxWindow *win = node->GetData(); - - CallInternalIdle( win ); - node = node->GetNext(); - } - - return TRUE; -} - -bool wxApp::SendIdleEvents( wxWindow* win ) -{ - bool needMore = FALSE; - - wxIdleEvent event; - event.SetEventObject(win); - - win->GetEventHandler()->ProcessEvent(event); - - if (event.MoreRequested()) - needMore = TRUE; - - wxWindowList::Node *node = win->GetChildren().GetFirst(); - while (node) - { - wxWindow *win = node->GetData(); - - if (SendIdleEvents(win)) - needMore = TRUE; - node = node->GetNext(); - } - - return needMore; -} - int wxApp::MainLoop() { gtk_main(); @@ -671,11 +568,8 @@ void wxApp::Dispatch() gtk_main_iteration(); } -bool wxApp::Initialize(int argc, wxChar **argv) +bool wxApp::Initialize(int& argc, wxChar **argv) { - if ( !wxAppBase::Initialize(argc, argv) ) - return false; - #if wxUSE_THREADS // GTK 1.2 up to version 1.2.3 has broken threads if ((gtk_major_version == 1) && @@ -709,7 +603,7 @@ bool wxApp::Initialize(int argc, wxChar **argv) #if wxUSE_UNICODE // gtk_init() wants UTF-8, not wchar_t, so convert int i; - char *argvGTK = new char *[argc + 1]; + char **argvGTK = new char *[argc + 1]; for ( i = 0; i < argc; i++ ) { argvGTK[i] = wxStrdupA(wxConvUTF8.cWX2MB(argv[i])); @@ -725,7 +619,7 @@ bool wxApp::Initialize(int argc, wxChar **argv) // we have to drop the parameters which were consumed by GTK+ for ( i = 0; i < argcGTK; i++ ) { - while ( wxStrcmp(wxConvUTF8.cWX2MB(argv[i]), argvGTK[i]) != 0 ) + while ( strcmp(wxConvUTF8.cWX2MB(argv[i]), argvGTK[i]) != 0 ) { memmove(argv + i, argv + i + 1, argc - i); } @@ -751,6 +645,13 @@ bool wxApp::Initialize(int argc, wxChar **argv) // we can not enter threads before gtk_init is done gdk_threads_enter(); + if ( !wxAppBase::Initialize(argc, argv) ) + { + gdk_threads_leave(); + + return false; + } + wxSetDetectableAutoRepeat( TRUE ); #if wxUSE_INTL @@ -764,9 +665,9 @@ bool wxApp::Initialize(int argc, wxChar **argv) void wxApp::CleanUp() { - wxAppBase::CleanUp(); - gdk_threads_leave(); + + wxAppBase::CleanUp(); } #ifdef __WXDEBUG__