X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9482617091b084d4ee006679a450176715d465e0..f9133b32002a600cb48dd05fbcce1ab3ed684dba:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 21466c15ec..9424db3196 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -30,10 +30,13 @@ #ifndef WX_PRECOMP #include "wx/app.h" + #include "wx/bitmap.h" #include "wx/intl.h" #include "wx/list.h" #include "wx/log.h" #include "wx/msgdlg.h" + #include "wx/bitmap.h" + #include "wx/confbase.h" #endif #include "wx/apptrait.h" @@ -73,19 +76,11 @@ wxAppBase::wxAppBase() m_exitOnFrameDelete = Later; } -bool wxAppBase::Initialize(int argc, wxChar **argv) +bool wxAppBase::Initialize(int& argc, wxChar **argv) { if ( !wxAppConsole::Initialize(argc, argv) ) return false; - // for compatibility call the old initialization function too - if ( !OnInitGui() ) - { - wxAppConsole::CleanUp(); - - return false; - } - #if wxUSE_THREADS wxPendingEventsLocker = new wxCriticalSection; #endif @@ -172,7 +167,7 @@ void wxAppBase::Exit() wxAppTraits *wxAppBase::CreateTraits() { - return wxAppTraits::CreateGUI(); + return new wxGUIAppTraits; } // ---------------------------------------------------------------------------- @@ -210,6 +205,72 @@ void wxAppBase::DeletePendingObjects() } } +// Returns TRUE if more time is needed. +bool wxAppBase::ProcessIdle() +{ + wxWindowList::Node* node = wxTopLevelWindows.GetFirst(); + node = wxTopLevelWindows.GetFirst(); + while (node) + { + wxWindow* win = node->GetData(); + win->ProcessInternalIdle(); + node = node->GetNext(); + } + + wxIdleEvent event; + event.SetEventObject(this); + bool processed = ProcessEvent(event); + + wxUpdateUIEvent::ResetUpdateTime(); + + return processed && event.MoreRequested(); +} + +// Send idle event to all top-level windows +bool wxAppBase::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; +} + +// Send idle event to window and all subwindows +bool wxAppBase::SendIdleEvents(wxWindow* win) +{ + bool needMore = FALSE; + + if (wxIdleEvent::CanSend(win)) + { + wxIdleEvent event; + event.SetEventObject(win); + win->GetEventHandler()->ProcessEvent(event); + + needMore = event.MoreRequested(); + } + + wxWindowList::Node *node = win->GetChildren().GetFirst(); + while ( node ) + { + wxWindow *win = node->GetData(); + if (SendIdleEvents(win)) + needMore = TRUE; + + node = node->GetNext(); + } + + return needMore; +} + + // ---------------------------------------------------------------------------- // wxGUIAppTraitsBase // ---------------------------------------------------------------------------- @@ -310,12 +371,3 @@ void wxGUIAppTraitsBase::RemoveFromPendingDelete(wxObject *object) wxPendingDelete.DeleteObject(object); } -// ---------------------------------------------------------------------------- -// wxAppTraits -// ---------------------------------------------------------------------------- - -wxAppTraits *wxAppTraitsBase::CreateGUI() -{ - return new wxGUIAppTraits; -} -