1 /////////////////////////////////////////////////////////////////////////////// 
   2 // Name:        gtk/evtloop.cpp 
   3 // Purpose:     implements wxEventLoop for GTK+ 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> 
   9 // License:     wxWindows licence 
  10 /////////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 // ---------------------------------------------------------------------------- 
  18 // ---------------------------------------------------------------------------- 
  20 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  21     #pragma implementation "evtloop.h" 
  24 // For compilers that support precompilation, includes "wx.h". 
  25 #include "wx/wxprec.h" 
  31 #include "wx/evtloop.h" 
  36 // ---------------------------------------------------------------------------- 
  38 // ---------------------------------------------------------------------------- 
  40 class WXDLLEXPORT wxEventLoopImpl
 
  44     wxEventLoopImpl() { SetExitCode(0); } 
  46     // set/get the exit code 
  47     void SetExitCode(int exitcode
) { m_exitcode 
= exitcode
; } 
  48     int GetExitCode() const { return m_exitcode
; } 
  51     // the exit code of the event loop 
  55 // ============================================================================ 
  56 // wxEventLoop implementation 
  57 // ============================================================================ 
  59 // ---------------------------------------------------------------------------- 
  60 // wxEventLoop running and exiting 
  61 // ---------------------------------------------------------------------------- 
  63 wxEventLoop 
*wxEventLoopBase::ms_activeLoop 
= NULL
; 
  65 wxEventLoop::~wxEventLoop() 
  67     wxASSERT_MSG( !m_impl
, _T("should have been deleted in Run()") ); 
  70 int wxEventLoop::Run() 
  72     // event loops are not recursive, you need to create another loop! 
  73     wxCHECK_MSG( !IsRunning(), -1, _T("can't reenter a message loop") ); 
  75     wxEventLoop 
*oldLoop 
= ms_activeLoop
; 
  78     m_impl 
= new wxEventLoopImpl
; 
  82     int exitcode 
= m_impl
->GetExitCode(); 
  86     ms_activeLoop 
= oldLoop
; 
  91 void wxEventLoop::Exit(int rc
) 
  93     wxCHECK_RET( IsRunning(), _T("can't call Exit() if not running") ); 
  95     m_impl
->SetExitCode(rc
); 
 100 // ---------------------------------------------------------------------------- 
 101 // wxEventLoop message processing dispatching 
 102 // ---------------------------------------------------------------------------- 
 104 bool wxEventLoop::Pending() const 
 108         // We need to remove idle callbacks or gtk_events_pending will 
 109         // never return false. 
 110         wxTheApp
->RemoveIdleTag(); 
 113     return gtk_events_pending(); 
 116 bool wxEventLoop::Dispatch() 
 118     wxCHECK_MSG( IsRunning(), FALSE
, _T("can't call Dispatch() if not running") ); 
 120     gtk_main_iteration();