From: Václav Slavík Date: Sun, 12 Aug 2001 22:10:20 +0000 (+0000) Subject: added wxEventLoop::GetActive() X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b9f246f7d99d2a2bc18d1d074940e5ab7b7bf601 added wxEventLoop::GetActive() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11361 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/evtloop.h b/include/wx/evtloop.h index 4e90d3d803..2a71defd7a 100644 --- a/include/wx/evtloop.h +++ b/include/wx/evtloop.h @@ -43,10 +43,15 @@ public: // is the event loop running now? virtual bool IsRunning() const; + + // return currently active (running) event loop, may be NULL + static wxEventLoop *GetActive() { return ms_activeLoop; } protected: // the pointer to the port specific implementation class class WXDLLEXPORT wxEventLoopImpl *m_impl; + // the pointer to currently active loop + static wxEventLoop *ms_activeLoop; }; #endif // _WX_EVTLOOP_H_ diff --git a/src/gtk/evtloop.cpp b/src/gtk/evtloop.cpp index 268cfba85b..361fa3ab92 100644 --- a/src/gtk/evtloop.cpp +++ b/src/gtk/evtloop.cpp @@ -62,6 +62,8 @@ private: // wxEventLoop running and exiting // ---------------------------------------------------------------------------- +wxEventLoop *wxEventLoop::ms_activeLoop = NULL; + wxEventLoop::~wxEventLoop() { wxASSERT_MSG( !m_impl, _T("should have been deleted in Run()") ); @@ -77,6 +79,9 @@ int wxEventLoop::Run() // event loops are not recursive, you need to create another loop! wxCHECK_MSG( !IsRunning(), -1, _T("can't reenter a message loop") ); + wxEventLoop *oldLoop = ms_activeLoop; + ms_activeLoop = this; + m_impl = new wxEventLoopImpl; gtk_main(); @@ -85,6 +90,8 @@ int wxEventLoop::Run() delete m_impl; m_impl = NULL; + ms_activeLoop = oldLoop; + return exitcode; } diff --git a/src/gtk1/evtloop.cpp b/src/gtk1/evtloop.cpp index 268cfba85b..361fa3ab92 100644 --- a/src/gtk1/evtloop.cpp +++ b/src/gtk1/evtloop.cpp @@ -62,6 +62,8 @@ private: // wxEventLoop running and exiting // ---------------------------------------------------------------------------- +wxEventLoop *wxEventLoop::ms_activeLoop = NULL; + wxEventLoop::~wxEventLoop() { wxASSERT_MSG( !m_impl, _T("should have been deleted in Run()") ); @@ -77,6 +79,9 @@ int wxEventLoop::Run() // event loops are not recursive, you need to create another loop! wxCHECK_MSG( !IsRunning(), -1, _T("can't reenter a message loop") ); + wxEventLoop *oldLoop = ms_activeLoop; + ms_activeLoop = this; + m_impl = new wxEventLoopImpl; gtk_main(); @@ -85,6 +90,8 @@ int wxEventLoop::Run() delete m_impl; m_impl = NULL; + ms_activeLoop = oldLoop; + return exitcode; } diff --git a/src/msw/evtloop.cpp b/src/msw/evtloop.cpp index 8c9f562a33..dca66aba58 100644 --- a/src/msw/evtloop.cpp +++ b/src/msw/evtloop.cpp @@ -146,6 +146,8 @@ bool wxEventLoopImpl::SendIdleMessage() // wxEventLoop implementation // ============================================================================ +wxEventLoop *wxEventLoop::ms_activeLoop = NULL; + // ---------------------------------------------------------------------------- // wxEventLoop running and exiting // ---------------------------------------------------------------------------- @@ -166,6 +168,9 @@ int wxEventLoop::Run() wxCHECK_MSG( !IsRunning(), -1, _T("can't reenter a message loop") ); m_impl = new wxEventLoopImpl; + + wxEventLoop *oldLoop = ms_activeLoop; + ms_activeLoop = this; for ( ;; ) { @@ -191,6 +196,8 @@ int wxEventLoop::Run() delete m_impl; m_impl = NULL; + ms_activeLoop = oldLoop; + return exitcode; }