From 5c1193e090c49595b320ac27466a7d202a5994d3 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 26 Dec 2008 14:33:52 +0000 Subject: [PATCH] remember the events we were notified about in OnRequest() (not used yet but necessary for upcoming changes) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/socket.h | 4 ++-- src/common/socket.cpp | 53 ++++++++++++++++++++++++++----------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/include/wx/socket.h b/include/wx/socket.h index 1b72a2cd56..f0736f4f05 100644 --- a/include/wx/socket.h +++ b/include/wx/socket.h @@ -101,8 +101,6 @@ enum wxSocketType class WXDLLIMPEXP_NET wxSocketBase : public wxObject { - DECLARE_CLASS(wxSocketBase) - public: // Public interface @@ -251,11 +249,13 @@ private: void *m_clientData; // client data for events bool m_notify; // notify events to users? wxSocketEventFlags m_eventmask; // which events to notify? + wxSocketEventFlags m_eventsgot; // collects events received in OnRequest() // the initialization count, GSocket is initialized if > 0 static size_t m_countInit; DECLARE_NO_COPY_CLASS(wxSocketBase) + DECLARE_CLASS(wxSocketBase) }; diff --git a/src/common/socket.cpp b/src/common/socket.cpp index e99a4a017f..406b5c0ae1 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -612,7 +612,8 @@ void wxSocketBase::Init() m_handler = NULL; m_clientData = NULL; m_notify = false; - m_eventmask = 0; + m_eventmask = + m_eventsgot = 0; if ( !IsInitialized() ) { @@ -1457,7 +1458,7 @@ void wxSocketBase::SetFlags(wxSocketFlags flags) void wxSocketBase::OnRequest(wxSocketNotify notification) { - switch(notification) + switch ( notification ) { case wxSOCKET_CONNECTION: m_establishing = false; @@ -1488,32 +1489,42 @@ void wxSocketBase::OnRequest(wxSocketNotify notification) return; } - // Schedule the event - wxSocketEventFlags flag = 0; - wxUnusedVar(flag); - switch (notification) + switch ( notification ) { - case wxSOCKET_INPUT: flag = wxSOCKET_INPUT_FLAG; break; - case wxSOCKET_OUTPUT: flag = wxSOCKET_OUTPUT_FLAG; break; - case wxSOCKET_CONNECTION: flag = wxSOCKET_CONNECTION_FLAG; break; - case wxSOCKET_LOST: flag = wxSOCKET_LOST_FLAG; break; + case wxSOCKET_INPUT: + flag = wxSOCKET_INPUT_FLAG; + break; + + case wxSOCKET_OUTPUT: + flag = wxSOCKET_OUTPUT_FLAG; + break; + + case wxSOCKET_CONNECTION: + flag = wxSOCKET_CONNECTION_FLAG; + break; + + case wxSOCKET_LOST: + flag = wxSOCKET_LOST_FLAG; + break; + default: - wxLogWarning(_("wxSocket: unknown event!.")); - return; + wxFAIL_MSG( "unknown wxSocket notification" ); } - if (((m_eventmask & flag) == flag) && m_notify) + // remember the events which were generated for this socket, we're going to + // use this in DoWait() + m_eventsgot |= flag; + + // send the wx event if enabled and we're interested in it + if ( m_notify && (m_eventmask & flag) && m_handler ) { - if (m_handler) - { - wxSocketEvent event(m_id); - event.m_event = notification; - event.m_clientData = m_clientData; - event.SetEventObject(this); + wxSocketEvent event(m_id); + event.m_event = notification; + event.m_clientData = m_clientData; + event.SetEventObject(this); - m_handler->AddPendingEvent(event); - } + m_handler->AddPendingEvent(event); } } -- 2.45.2