From 9213ca5d473ff8a25e003e46e7ea7f8520f08fb9 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Thu, 23 Sep 2004 00:58:21 +0000 Subject: [PATCH] Made wxGTK's wxEventLoop::IsRunning a little more consistent with wxMSW's and uninstall the idle handled like wxYield does so Pending can eventually return false. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/evtloop.h | 2 +- src/gtk/evtloop.cpp | 14 +++++++++++++- src/gtk1/evtloop.cpp | 14 +++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/include/wx/evtloop.h b/include/wx/evtloop.h index 42b00f2d03..d77cbf13de 100644 --- a/include/wx/evtloop.h +++ b/include/wx/evtloop.h @@ -88,7 +88,7 @@ public: virtual void Exit(int rc = 0); virtual bool Pending() const; virtual bool Dispatch(); - virtual bool IsRunning() const { return m_impl != NULL; } + virtual bool IsRunning() const { return GetActive() == this; } protected: // the pointer to the port specific implementation class diff --git a/src/gtk/evtloop.cpp b/src/gtk/evtloop.cpp index acca1472fe..74d4132b43 100644 --- a/src/gtk/evtloop.cpp +++ b/src/gtk/evtloop.cpp @@ -31,6 +31,7 @@ #ifndef WX_PRECOMP #endif //WX_PRECOMP +#include "wx/app.h" #include "wx/evtloop.h" #include @@ -103,9 +104,20 @@ void wxEventLoop::Exit(int rc) // wxEventLoop message processing dispatching // ---------------------------------------------------------------------------- +extern bool g_isIdle; + bool wxEventLoop::Pending() const { - return gtk_events_pending() > 0; + if (wxTheApp && !g_isIdle) + { + // We need to remove idle callbacks or gtk_events_pending will + // never return false. + gtk_idle_remove( wxTheApp->m_idleTag ); + wxTheApp->m_idleTag = 0; + g_isIdle = TRUE; + } + + return gtk_events_pending(); } bool wxEventLoop::Dispatch() diff --git a/src/gtk1/evtloop.cpp b/src/gtk1/evtloop.cpp index acca1472fe..74d4132b43 100644 --- a/src/gtk1/evtloop.cpp +++ b/src/gtk1/evtloop.cpp @@ -31,6 +31,7 @@ #ifndef WX_PRECOMP #endif //WX_PRECOMP +#include "wx/app.h" #include "wx/evtloop.h" #include @@ -103,9 +104,20 @@ void wxEventLoop::Exit(int rc) // wxEventLoop message processing dispatching // ---------------------------------------------------------------------------- +extern bool g_isIdle; + bool wxEventLoop::Pending() const { - return gtk_events_pending() > 0; + if (wxTheApp && !g_isIdle) + { + // We need to remove idle callbacks or gtk_events_pending will + // never return false. + gtk_idle_remove( wxTheApp->m_idleTag ); + wxTheApp->m_idleTag = 0; + g_isIdle = TRUE; + } + + return gtk_events_pending(); } bool wxEventLoop::Dispatch() -- 2.45.2