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:
Julian Smart
2003-07-13 16:59:30 +00:00
parent 9c64071583
commit 5109ae5d17
13 changed files with 50 additions and 12 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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();

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}