// it should return true if more idle events are needed, false if not
virtual bool ProcessIdle();
- // Send idle event to window and all subwindows
- // Returns true if more idle time is requested.
- virtual bool SendIdleEvents(wxWindow* win, wxIdleEvent& event);
-
// override base class version: GUI apps always use an event loop
virtual bool UsesEventLoop() const { return true; }
// implementation from now on
// --------------------------
- // GTK callbacks
- virtual void OnInternalIdle();
+ virtual bool SendIdleEvents(wxIdleEvent& event);
protected:
// common part of all ctors
// behaviour
virtual void OnInternalIdle();
- // call internal idle recursively
-// void ProcessInternalIdle() ;
+ // Send idle event to window and all subwindows
+ // Returns true if more idle time is requested.
+ virtual bool SendIdleEvents(wxIdleEvent& event);
// 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
*/
bool ProcessMessage(WXMSG* msg);
- /**
- Sends idle events to a window and its children.
- Please note that this function is internal to wxWidgets and shouldn't be used
- by user code.
-
- @remarks These functions poll the top-level windows, and their children,
- for idle event processing. If @true is returned, more OnIdle
- processing is requested by one or more window.
-
- @see wxIdleEvent
- */
- virtual bool SendIdleEvents(wxWindow* win, wxIdleEvent& event);
-
/**
Set display mode to use. This is only used in framebuffer wxWidgets
ports (such as wxMGL or wxDFB).
while (node)
{
wxWindow* win = node->GetData();
- if (SendIdleEvents(win, event))
+ if (win->SendIdleEvents(event))
needMore = true;
node = node->GetNext();
}
return needMore;
}
-// Send idle event to window and all subwindows
-bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event)
-{
- bool needMore = false;
-
- win->OnInternalIdle();
-
- // should we send idle event to this window?
- if ( wxIdleEvent::GetMode() == wxIDLE_PROCESS_ALL ||
- win->HasExtraStyle(wxWS_EX_PROCESS_IDLE) )
- {
- event.SetEventObject(win);
- win->HandleWindowEvent(event);
-
- if (event.MoreRequested())
- needMore = true;
- }
- wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst();
- while ( node )
- {
- wxWindow *child = node->GetData();
- if (SendIdleEvents(child, event))
- needMore = true;
-
- node = node->GetNext();
- }
-
- return needMore;
-}
-
// ----------------------------------------------------------------------------
// wxGUIAppTraitsBase
// ----------------------------------------------------------------------------
// Idle processing
// ----------------------------------------------------------------------------
+// Send idle event to window and all subwindows
+bool wxWindowBase::SendIdleEvents(wxIdleEvent& event)
+{
+ bool needMore = false;
+
+ OnInternalIdle();
+
+ // should we send idle event to this window?
+ if (wxIdleEvent::GetMode() == wxIDLE_PROCESS_ALL ||
+ HasExtraStyle(wxWS_EX_PROCESS_IDLE))
+ {
+ event.SetEventObject(this);
+ HandleWindowEvent(event);
+
+ if (event.MoreRequested())
+ needMore = true;
+ }
+ wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+ for (; node; node = node->GetNext())
+ {
+ wxWindow* child = node->GetData();
+ if (child->SendIdleEvents(event))
+ needMore = true;
+ }
+
+ return needMore;
+}
+
void wxWindowBase::OnInternalIdle()
{
if (wxUpdateUIEvent::CanUpdate(this) && IsShownOnScreen())
return true;
}
-void wxFrame::OnInternalIdle()
+bool wxFrame::SendIdleEvents(wxIdleEvent& event)
{
- wxFrameBase::OnInternalIdle();
+ bool needMore = wxFrameBase::SendIdleEvents(event);
-#if wxUSE_MENUS_NATIVE
- if (m_frameMenuBar) m_frameMenuBar->OnInternalIdle();
-#endif // wxUSE_MENUS_NATIVE
+#if wxUSE_MENUS
+ if (m_frameMenuBar && m_frameMenuBar->SendIdleEvents(event))
+ needMore = true;
+#endif
#if wxUSE_TOOLBAR
- if (m_frameToolBar) m_frameToolBar->OnInternalIdle();
+ if (m_frameToolBar && m_frameToolBar->SendIdleEvents(event))
+ needMore = true;
#endif
#if wxUSE_STATUSBAR
- if (m_frameStatusBar)
- {
- m_frameStatusBar->OnInternalIdle();
-
- // There may be controls in the status bar that
- // need to be updated
- for ( wxWindowList::compatibility_iterator node = m_frameStatusBar->GetChildren().GetFirst();
- node;
- node = node->GetNext() )
- {
- wxWindow *child = node->GetData();
- child->OnInternalIdle();
- }
- }
+ if (m_frameStatusBar && m_frameStatusBar->SendIdleEvents(event))
+ needMore = true;
#endif
+
+ return needMore;
}
// ----------------------------------------------------------------------------