Files
wxWidgets/src/gtk/sockgtk.cpp
Paul Cornett 65391c8ffc minor cleanup
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62789 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-12-05 19:57:58 +00:00

74 lines
1.9 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: gtk/gsockgtk.cpp
// Purpose: implementation of wxGTK-specific socket event handling
// Author: Guilhem Lavaux, Vadim Zeitlin
// Created: 1999
// RCS-ID: $Id$
// Copyright: (c) 1999, 2007 wxWidgets dev team
// (c) 2009 Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_SOCKETS
#include "wx/apptrait.h"
#include "wx/private/fdiomanager.h"
#include <gdk/gdk.h>
extern "C" {
static
void wxSocket_GDK_Input(gpointer data,
gint WXUNUSED(source),
GdkInputCondition condition)
{
wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
if ( condition & GDK_INPUT_READ )
{
handler->OnReadWaiting();
// we could have lost connection while reading in which case we
// shouldn't call OnWriteWaiting() as the socket is now closed and it
// would assert
if ( !handler->IsOk() )
return;
}
if ( condition & GDK_INPUT_WRITE )
handler->OnWriteWaiting();
}
}
class GTKFDIOManager : public wxFDIOManager
{
public:
virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
{
return gdk_input_add
(
fd,
d == OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
wxSocket_GDK_Input,
handler
);
}
virtual void
RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
{
gdk_input_remove(fd);
}
};
wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
{
static GTKFDIOManager s_manager;
return &s_manager;
}
#endif // wxUSE_SOCKETS