From 52a07708c402e7b60a73abb6bae42838cf92c9f7 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 25 Feb 2000 16:21:53 +0000 Subject: [PATCH] attempts at making wxSocket work with wxBase - it doesn't work but already compiles :-| git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6288 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/app.h | 8 ++++---- include/wx/msw/dialog.h | 2 ++ include/wx/timer.h | 35 +++++++++++++++++++++++++++++++++++ src/common/socket.cpp | 23 +++++++++++++++++------ src/common/timercmn.cpp | 8 +++++++- src/msw/dialog.cpp | 3 +-- src/unix/gsocket.c | 10 +++++++++- 7 files changed, 75 insertions(+), 14 deletions(-) diff --git a/include/wx/app.h b/include/wx/app.h index 4b682d6aa8..dc7b862ec7 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -322,18 +322,18 @@ extern bool WXDLLEXPORT wxYield(); // Yield to other apps/messages extern void WXDLLEXPORT wxWakeUpIdle(); -#if wxUSE_GUI - // Post a message to the given eventhandler which will be processed during the // next event loop iteration inline void WXDLLEXPORT wxPostEvent(wxEvtHandler *dest, wxEvent& event) { wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") ); +#if wxUSE_GUI dest->AddPendingEvent(event); -} - +#else + dest->ProcessEvent(event); #endif // wxUSE_GUI +} // console applications may avoid using DECLARE_APP and IMPLEMENT_APP macros // and call these functions instead at the program startup and termination diff --git a/include/wx/msw/dialog.h b/include/wx/msw/dialog.h index e8eb98da7d..ff51c4bdcf 100644 --- a/include/wx/msw/dialog.h +++ b/include/wx/msw/dialog.h @@ -117,6 +117,8 @@ protected: void DoShowModal(); private: + wxWindow *m_oldFocus; + DECLARE_EVENT_TABLE() }; diff --git a/include/wx/timer.h b/include/wx/timer.h index 30491db2ff..eddeb32d2c 100644 --- a/include/wx/timer.h +++ b/include/wx/timer.h @@ -22,6 +22,8 @@ #include "wx/longlong.h" #include "wx/event.h" +#if wxUSE_GUI + // ---------------------------------------------------------------------------- // wxTimer // ---------------------------------------------------------------------------- @@ -121,6 +123,37 @@ protected: #include "wx/stubs/timer.h" #endif +// ---------------------------------------------------------------------------- +// wxTimerRunner: starts the timer in its ctor, stops in the dtor +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxTimerRunner +{ +public: + wxTimerRunner(wxTimer& timer) : m_timer(timer) { } + wxTimerRunner(wxTimer& timer, int milli, bool oneShot = FALSE) + : m_timer(timer) + { + m_timer.Start(milli, oneShot); + } + + void Start(int milli, bool oneShot = FALSE) + { + m_timer.Start(milli, oneShot); + } + + ~wxTimerRunner() + { + if ( m_timer.IsRunning() ) + { + m_timer.Stop(); + } + } + +private: + wxTimer& m_timer; +}; + // ---------------------------------------------------------------------------- // wxTimerEvent // ---------------------------------------------------------------------------- @@ -148,6 +181,8 @@ typedef void (wxEvtHandler::*wxTimerEventFunction)(wxTimerEvent&); #define EVT_TIMER(id, func) { wxEVT_TIMER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxTimerEventFunction) & func, NULL}, +#endif // wxUSE_GUI + // ---------------------------------------------------------------------------- // wxStopWatch: measure time intervals with up to 1ms resolution // ---------------------------------------------------------------------------- diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 98ce67a4b9..a39f5fff48 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -35,7 +35,10 @@ #include "wx/module.h" #include "wx/log.h" #include "wx/intl.h" -#include "wx/gdicmn.h" // for wxPendingDelete + +#if wxUSE_GUI + #include "wx/gdicmn.h" // for wxPendingDelete +#endif // wxUSE_GUI #include "wx/sckaddr.h" #include "wx/socket.h" @@ -548,6 +551,8 @@ wxSocketBase& wxSocketBase::Discard() // timeout elapses. The polling loop calls PROCESS_EVENTS(), so // this won't block the GUI. +#if wxUSE_GUI + class _wxSocketInternalTimer: public wxTimer { public: @@ -560,11 +565,17 @@ public: } }; +#endif // wxUSE_GUI + bool wxSocketBase::_Wait(long seconds, long milliseconds, wxSocketEventFlags flags) { GSocketEventFlags result; +#if wxUSE_GUI _wxSocketInternalTimer timer; + wxTimerRunner runTimer(timer); +#endif // wxUSE_GUI + long timeout; int state = -1; @@ -584,9 +595,11 @@ bool wxSocketBase::_Wait(long seconds, long milliseconds, // Activate timer if (timeout) { +#if wxUSE_GUI timer.m_state = &state; timer.m_new_val = 0; - timer.Start((int)timeout, TRUE); + runTimer.Start((int)timeout, TRUE); +#endif // wxUSE_GUI } // Active polling (without using events) @@ -608,7 +621,6 @@ bool wxSocketBase::_Wait(long seconds, long milliseconds, // Incoming connection (server) or connection established (client) if (result & GSOCK_CONNECTION_FLAG) { - timer.Stop(); m_connected = TRUE; m_establishing = FALSE; return TRUE; @@ -617,14 +629,12 @@ bool wxSocketBase::_Wait(long seconds, long milliseconds, // Data available or output buffer ready if ((result & GSOCK_INPUT_FLAG) || (result & GSOCK_OUTPUT_FLAG)) { - timer.Stop(); return TRUE; } // Connection lost if (result & GSOCK_LOST_FLAG) { - timer.Stop(); m_connected = FALSE; m_establishing = FALSE; return (flags & GSOCK_LOST_FLAG); @@ -637,7 +647,6 @@ bool wxSocketBase::_Wait(long seconds, long milliseconds, PROCESS_EVENTS(); } - timer.Stop(); return FALSE; } @@ -872,11 +881,13 @@ void wxSocketBase::OnRequest(wxSocketNotify req_evt) event.m_skevt = req_evt; if (m_evt_handler) + { #if USE_DELAYED_EVENTS wxPostEvent(m_evt_handler, event); #else ProcessEvent(event); #endif + } OldOnNotify(req_evt); if (m_cbk) diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index 3d8db4c936..5c9fe9bd39 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -61,7 +61,9 @@ // wxWin macros // ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxTimerEvent, wxEvent) +#if wxUSE_GUI + IMPLEMENT_DYNAMIC_CLASS(wxTimerEvent, wxEvent) +#endif // wxUSE_GUI // ---------------------------------------------------------------------------- // macros @@ -88,6 +90,8 @@ wxLongLong wxGetLocalTimeMillis(); // implementation // ============================================================================ +#if wxUSE_GUI + // ---------------------------------------------------------------------------- // wxTimerBase // ---------------------------------------------------------------------------- @@ -102,6 +106,8 @@ void wxTimerBase::Notify() (void)m_owner->ProcessEvent(event); } +#endif // wxUSE_GUI + // ---------------------------------------------------------------------------- // wxStopWatch // ---------------------------------------------------------------------------- diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index a9849ee218..658003fe30 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -70,8 +70,6 @@ wxWindowList wxModelessWindows; // all modal dialogs currently shown static wxWindowList wxModalDialogs; -static wxWindow *m_oldFocus; - // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -100,6 +98,7 @@ END_EVENT_TABLE() wxDialog::wxDialog() { + m_oldFocus = (wxWindow *)NULL; m_isShown = FALSE; SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE)); diff --git a/src/unix/gsocket.c b/src/unix/gsocket.c index 83f5f4ec37..8e9596a423 100644 --- a/src/unix/gsocket.c +++ b/src/unix/gsocket.c @@ -53,7 +53,6 @@ struct sockaddr_un { #endif #include - #ifndef SOCKLEN_T #ifdef VMS @@ -102,6 +101,15 @@ struct sockaddr_un { #endif /* __GSOCKET_STANDALONE__ */ +/* redefine some GUI-only functions to do nothing in console mode */ +#if defined(wxUSE_GUI) && !wxUSE_GUI + #define _GSocket_GUI_Init(socket) + #define _GSocket_GUI_Destroy(socket) + #define _GSocket_Enable_Events(socket) + #define _GSocket_Disable_Events(socket) + #define _GSocket_Install_Callback(socket, event) + #define _GSocket_Uninstall_Callback(socket, event) +#endif // wxUSE_GUI /* Global initialisers */ -- 2.45.2