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
This commit is contained in:
Robin Dunn
2004-09-23 00:58:21 +00:00
parent ba3834927e
commit 9213ca5d47
3 changed files with 27 additions and 3 deletions

View File

@@ -88,7 +88,7 @@ public:
virtual void Exit(int rc = 0); virtual void Exit(int rc = 0);
virtual bool Pending() const; virtual bool Pending() const;
virtual bool Dispatch(); virtual bool Dispatch();
virtual bool IsRunning() const { return m_impl != NULL; } virtual bool IsRunning() const { return GetActive() == this; }
protected: protected:
// the pointer to the port specific implementation class // the pointer to the port specific implementation class

View File

@@ -31,6 +31,7 @@
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/app.h"
#include "wx/evtloop.h" #include "wx/evtloop.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@@ -103,9 +104,20 @@ void wxEventLoop::Exit(int rc)
// wxEventLoop message processing dispatching // wxEventLoop message processing dispatching
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
extern bool g_isIdle;
bool wxEventLoop::Pending() const 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() bool wxEventLoop::Dispatch()

View File

@@ -31,6 +31,7 @@
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/app.h"
#include "wx/evtloop.h" #include "wx/evtloop.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@@ -103,9 +104,20 @@ void wxEventLoop::Exit(int rc)
// wxEventLoop message processing dispatching // wxEventLoop message processing dispatching
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
extern bool g_isIdle;
bool wxEventLoop::Pending() const 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() bool wxEventLoop::Dispatch()