Improvements to OnIdle processing
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -381,13 +381,15 @@ public:
|
||||
// it should return TRUE if more idle events are needed, FALSE if not
|
||||
virtual bool ProcessIdle() ;
|
||||
|
||||
#if 0
|
||||
// Send idle event to all top-level windows.
|
||||
// Returns TRUE if more idle time is requested.
|
||||
virtual bool SendIdleEvents();
|
||||
#endif
|
||||
|
||||
// Send idle event to window and all subwindows
|
||||
// Returns TRUE if more idle time is requested.
|
||||
virtual bool SendIdleEvents(wxWindow* win);
|
||||
virtual bool SendIdleEvents(wxWindow* win, wxIdleEvent& event);
|
||||
|
||||
|
||||
// top level window functions
|
||||
|
@@ -877,7 +877,7 @@ public:
|
||||
virtual void OnInternalIdle() {}
|
||||
|
||||
// call internal idle recursively
|
||||
void ProcessInternalIdle() ;
|
||||
// void ProcessInternalIdle() ;
|
||||
|
||||
// get the handle of the window for the underlying window system: this
|
||||
// is only used for wxWin itself or for user code which wants to call
|
||||
|
@@ -210,24 +210,29 @@ void wxAppBase::DeletePendingObjects()
|
||||
// Returns TRUE if more time is needed.
|
||||
bool wxAppBase::ProcessIdle()
|
||||
{
|
||||
wxIdleEvent event;
|
||||
bool needMore = FALSE;
|
||||
wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst();
|
||||
node = wxTopLevelWindows.GetFirst();
|
||||
while (node)
|
||||
{
|
||||
wxWindow* win = node->GetData();
|
||||
win->ProcessInternalIdle();
|
||||
if (SendIdleEvents(win, event))
|
||||
needMore = TRUE;
|
||||
node = node->GetNext();
|
||||
}
|
||||
|
||||
wxIdleEvent event;
|
||||
event.SetEventObject(this);
|
||||
bool processed = ProcessEvent(event);
|
||||
(void) ProcessEvent(event);
|
||||
if (event.MoreRequested())
|
||||
needMore = TRUE;
|
||||
|
||||
wxUpdateUIEvent::ResetUpdateTime();
|
||||
|
||||
return processed && event.MoreRequested();
|
||||
return needMore;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Send idle event to all top-level windows
|
||||
bool wxAppBase::SendIdleEvents()
|
||||
{
|
||||
@@ -244,26 +249,28 @@ bool wxAppBase::SendIdleEvents()
|
||||
|
||||
return needMore;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Send idle event to window and all subwindows
|
||||
bool wxAppBase::SendIdleEvents(wxWindow* win)
|
||||
bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event)
|
||||
{
|
||||
bool needMore = FALSE;
|
||||
|
||||
win->OnInternalIdle();
|
||||
if (wxIdleEvent::CanSend(win))
|
||||
{
|
||||
wxIdleEvent event;
|
||||
event.SetEventObject(win);
|
||||
win->GetEventHandler()->ProcessEvent(event);
|
||||
|
||||
needMore = event.MoreRequested();
|
||||
if (event.MoreRequested())
|
||||
needMore = TRUE;
|
||||
}
|
||||
|
||||
wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst();
|
||||
while ( node )
|
||||
{
|
||||
wxWindow *win = node->GetData();
|
||||
if (SendIdleEvents(win))
|
||||
if (SendIdleEvents(win, event))
|
||||
needMore = TRUE;
|
||||
|
||||
node = node->GetNext();
|
||||
|
@@ -1830,7 +1830,9 @@ void wxWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
// call internal idle recursively
|
||||
// may be obsolete (wait until OnIdle scheme stabilises)
|
||||
void wxWindowBase::ProcessInternalIdle()
|
||||
{
|
||||
OnInternalIdle();
|
||||
@@ -1843,6 +1845,7 @@ void wxWindowBase::ProcessInternalIdle()
|
||||
node = node->GetNext();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// dialog units translations
|
||||
|
@@ -551,11 +551,14 @@ void wxApp::OnIdle( wxIdleEvent &event )
|
||||
// 'Garbage' collection of windows deleted with Close()
|
||||
DeletePendingObjects();
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
s_inOnIdle = FALSE;
|
||||
}
|
||||
|
@@ -551,11 +551,14 @@ void wxApp::OnIdle( wxIdleEvent &event )
|
||||
// 'Garbage' collection of windows deleted with Close()
|
||||
DeletePendingObjects();
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
s_inOnIdle = FALSE;
|
||||
}
|
||||
|
@@ -1029,7 +1029,6 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
if ( s_inOnIdle )
|
||||
return;
|
||||
|
||||
|
||||
s_inOnIdle = TRUE;
|
||||
|
||||
// 'Garbage' collection of windows deleted with Close().
|
||||
@@ -1040,11 +1039,14 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
if ( pLog != NULL && pLog->HasPendingMessages() )
|
||||
pLog->Flush();
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
// If they are pending events, we must process them: pending events are
|
||||
// either events to the threads other than main or events posted with
|
||||
|
@@ -1029,7 +1029,6 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
if ( s_inOnIdle )
|
||||
return;
|
||||
|
||||
|
||||
s_inOnIdle = TRUE;
|
||||
|
||||
// 'Garbage' collection of windows deleted with Close().
|
||||
@@ -1040,11 +1039,14 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
if ( pLog != NULL && pLog->HasPendingMessages() )
|
||||
pLog->Flush();
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
// If they are pending events, we must process them: pending events are
|
||||
// either events to the threads other than main or events posted with
|
||||
|
@@ -294,9 +294,12 @@ void wxApp::OnIdle(wxIdleEvent &event)
|
||||
wxLog::FlushActive();
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
if ( SendIdleEvents() )
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
s_inOnIdle = FALSE;
|
||||
}
|
||||
|
@@ -233,11 +233,14 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
if ( pLog != NULL && pLog->HasPendingMessages() )
|
||||
pLog->Flush();
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
inOnIdle = FALSE;
|
||||
}
|
||||
|
@@ -828,6 +828,8 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
wxDC::ClearCache();
|
||||
#endif // wxUSE_DC_CACHEING
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
if ( SendIdleEvents() )
|
||||
{
|
||||
@@ -835,6 +837,7 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
// idle events
|
||||
event.RequestMore(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
wxIsInOnIdleFlag = FALSE;
|
||||
}
|
||||
|
@@ -807,6 +807,8 @@ void wxApp::OnIdle(
|
||||
wxDC::ClearCache();
|
||||
#endif // wxUSE_DC_CACHEING
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
//
|
||||
// Send OnIdle events to all windows
|
||||
//
|
||||
@@ -818,6 +820,8 @@ void wxApp::OnIdle(
|
||||
//
|
||||
rEvent.RequestMore(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
gbInOnIdle = FALSE;
|
||||
} // end of wxApp::OnIdle
|
||||
|
||||
|
@@ -717,11 +717,14 @@ void wxApp::OnIdle(wxIdleEvent& event)
|
||||
// 'Garbage' collection of windows deleted with Close()
|
||||
DeletePendingObjects();
|
||||
|
||||
// Now done in ProcessIdle()
|
||||
#if 0
|
||||
// Send OnIdle events to all windows
|
||||
bool needMore = SendIdleEvents();
|
||||
|
||||
if (needMore)
|
||||
event.RequestMore(TRUE);
|
||||
#endif
|
||||
|
||||
s_inOnIdle = FALSE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user