Move SendIdleEvents() from wxApp to wxWindow.
Use it to properly implement idle events for wxGTK menubar, toolbar and statusbar. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66648 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -562,10 +562,6 @@ public:
|
|||||||
// it should return true if more idle events are needed, false if not
|
// it should return true if more idle events are needed, false if not
|
||||||
virtual bool ProcessIdle();
|
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
|
// override base class version: GUI apps always use an event loop
|
||||||
virtual bool UsesEventLoop() const { return true; }
|
virtual bool UsesEventLoop() const { return true; }
|
||||||
|
|
||||||
|
@@ -61,8 +61,7 @@ public:
|
|||||||
// implementation from now on
|
// implementation from now on
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
// GTK callbacks
|
virtual bool SendIdleEvents(wxIdleEvent& event);
|
||||||
virtual void OnInternalIdle();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
|
@@ -1372,8 +1372,9 @@ public:
|
|||||||
// behaviour
|
// behaviour
|
||||||
virtual void OnInternalIdle();
|
virtual void OnInternalIdle();
|
||||||
|
|
||||||
// call internal idle recursively
|
// Send idle event to window and all subwindows
|
||||||
// void ProcessInternalIdle() ;
|
// 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
|
// 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
|
// is only used for wxWin itself or for user code which wants to call
|
||||||
|
@@ -722,19 +722,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool ProcessMessage(WXMSG* msg);
|
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
|
Set display mode to use. This is only used in framebuffer wxWidgets
|
||||||
ports (such as wxMGL or wxDFB).
|
ports (such as wxMGL or wxDFB).
|
||||||
|
@@ -349,7 +349,7 @@ bool wxAppBase::ProcessIdle()
|
|||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxWindow* win = node->GetData();
|
wxWindow* win = node->GetData();
|
||||||
if (SendIdleEvents(win, event))
|
if (win->SendIdleEvents(event))
|
||||||
needMore = true;
|
needMore = true;
|
||||||
node = node->GetNext();
|
node = node->GetNext();
|
||||||
}
|
}
|
||||||
@@ -359,36 +359,6 @@ bool wxAppBase::ProcessIdle()
|
|||||||
return needMore;
|
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
|
// wxGUIAppTraitsBase
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -2604,6 +2604,34 @@ void wxWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
|
|||||||
// Idle processing
|
// 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()
|
void wxWindowBase::OnInternalIdle()
|
||||||
{
|
{
|
||||||
if (wxUpdateUIEvent::CanUpdate(this) && IsShownOnScreen())
|
if (wxUpdateUIEvent::CanUpdate(this) && IsShownOnScreen())
|
||||||
|
@@ -235,32 +235,24 @@ bool wxFrame::ShowFullScreen(bool show, long style)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrame::OnInternalIdle()
|
bool wxFrame::SendIdleEvents(wxIdleEvent& event)
|
||||||
{
|
{
|
||||||
wxFrameBase::OnInternalIdle();
|
bool needMore = wxFrameBase::SendIdleEvents(event);
|
||||||
|
|
||||||
#if wxUSE_MENUS_NATIVE
|
#if wxUSE_MENUS
|
||||||
if (m_frameMenuBar) m_frameMenuBar->OnInternalIdle();
|
if (m_frameMenuBar && m_frameMenuBar->SendIdleEvents(event))
|
||||||
#endif // wxUSE_MENUS_NATIVE
|
needMore = true;
|
||||||
|
#endif
|
||||||
#if wxUSE_TOOLBAR
|
#if wxUSE_TOOLBAR
|
||||||
if (m_frameToolBar) m_frameToolBar->OnInternalIdle();
|
if (m_frameToolBar && m_frameToolBar->SendIdleEvents(event))
|
||||||
|
needMore = true;
|
||||||
#endif
|
#endif
|
||||||
#if wxUSE_STATUSBAR
|
#if wxUSE_STATUSBAR
|
||||||
if (m_frameStatusBar)
|
if (m_frameStatusBar && m_frameStatusBar->SendIdleEvents(event))
|
||||||
{
|
needMore = true;
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return needMore;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user