From 8000ae7f7c73885a6c1d1c29cee11ec86a96f2d1 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 10 Jul 2001 12:27:10 +0000 Subject: [PATCH] added untested implementation of wxEvtLoop for GTK+ git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10936 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/evtloop.cpp | 117 +++++++++++++++++++++++++++++++++++++++++++ src/gtk1/evtloop.cpp | 117 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) create mode 100644 src/gtk/evtloop.cpp create mode 100644 src/gtk1/evtloop.cpp diff --git a/src/gtk/evtloop.cpp b/src/gtk/evtloop.cpp new file mode 100644 index 0000000000..268cfba85b --- /dev/null +++ b/src/gtk/evtloop.cpp @@ -0,0 +1,117 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: gtk/evtloop.cpp +// Purpose: implements wxEventLoop for GTK+ +// Author: Vadim Zeitlin +// Modified by: +// Created: 10.07.01 +// RCS-ID: $Id$ +// Copyright: (c) 2001 Vadim Zeitlin +// License: wxWindows license +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#ifdef __GNUG__ + #pragma implementation "evtloop.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#endif //WX_PRECOMP + +#include "wx/evtloop.h" + +#include + +// ---------------------------------------------------------------------------- +// wxEventLoopImpl +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxEventLoopImpl +{ +public: + // ctor + wxEventLoopImpl() { SetExitCode(0); } + + // set/get the exit code + void SetExitCode(int exitcode) { m_exitcode = exitcode; } + int GetExitCode() const { return m_exitcode; } + +private: + // the exit code of the event loop + int m_exitcode; +}; + +// ============================================================================ +// wxEventLoop implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxEventLoop running and exiting +// ---------------------------------------------------------------------------- + +wxEventLoop::~wxEventLoop() +{ + wxASSERT_MSG( !m_impl, _T("should have been deleted in Run()") ); +} + +bool wxEventLoop::IsRunning() const +{ + return m_impl != NULL; +} + +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") ); + + m_impl = new wxEventLoopImpl; + + gtk_main(); + + int exitcode = m_impl->GetExitCode(); + delete m_impl; + m_impl = NULL; + + return exitcode; +} + +void wxEventLoop::Exit(int rc) +{ + wxCHECK_RET( IsRunning(), _T("can't call Exit() if not running") ); + + m_impl->SetExitCode(rc); + + gtk_main_quit(); +} + +// ---------------------------------------------------------------------------- +// wxEventLoop message processing dispatching +// ---------------------------------------------------------------------------- + +bool wxEventLoop::Pending() const +{ + return gtk_events_pending() > 0; +} + +bool wxEventLoop::Dispatch() +{ + wxCHECK_MSG( IsRunning(), FALSE, _T("can't call Dispatch() if not running") ); + + gtk_main_iteration(); + + return TRUE; +} + diff --git a/src/gtk1/evtloop.cpp b/src/gtk1/evtloop.cpp new file mode 100644 index 0000000000..268cfba85b --- /dev/null +++ b/src/gtk1/evtloop.cpp @@ -0,0 +1,117 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: gtk/evtloop.cpp +// Purpose: implements wxEventLoop for GTK+ +// Author: Vadim Zeitlin +// Modified by: +// Created: 10.07.01 +// RCS-ID: $Id$ +// Copyright: (c) 2001 Vadim Zeitlin +// License: wxWindows license +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#ifdef __GNUG__ + #pragma implementation "evtloop.h" +#endif + +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#endif //WX_PRECOMP + +#include "wx/evtloop.h" + +#include + +// ---------------------------------------------------------------------------- +// wxEventLoopImpl +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxEventLoopImpl +{ +public: + // ctor + wxEventLoopImpl() { SetExitCode(0); } + + // set/get the exit code + void SetExitCode(int exitcode) { m_exitcode = exitcode; } + int GetExitCode() const { return m_exitcode; } + +private: + // the exit code of the event loop + int m_exitcode; +}; + +// ============================================================================ +// wxEventLoop implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxEventLoop running and exiting +// ---------------------------------------------------------------------------- + +wxEventLoop::~wxEventLoop() +{ + wxASSERT_MSG( !m_impl, _T("should have been deleted in Run()") ); +} + +bool wxEventLoop::IsRunning() const +{ + return m_impl != NULL; +} + +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") ); + + m_impl = new wxEventLoopImpl; + + gtk_main(); + + int exitcode = m_impl->GetExitCode(); + delete m_impl; + m_impl = NULL; + + return exitcode; +} + +void wxEventLoop::Exit(int rc) +{ + wxCHECK_RET( IsRunning(), _T("can't call Exit() if not running") ); + + m_impl->SetExitCode(rc); + + gtk_main_quit(); +} + +// ---------------------------------------------------------------------------- +// wxEventLoop message processing dispatching +// ---------------------------------------------------------------------------- + +bool wxEventLoop::Pending() const +{ + return gtk_events_pending() > 0; +} + +bool wxEventLoop::Dispatch() +{ + wxCHECK_MSG( IsRunning(), FALSE, _T("can't call Dispatch() if not running") ); + + gtk_main_iteration(); + + return TRUE; +} + -- 2.47.2