// Name: src/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 <zeitlin@dptmaths.ens-cachan.fr>
+// (c) 2013 Rob Bresalier, Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
wxEventLoopSourceHandler * const
handler = static_cast<wxEventLoopSourceHandler *>(data);
- if (condition & G_IO_IN || condition & G_IO_PRI)
+ if ( (condition & G_IO_IN) || (condition & G_IO_PRI) || (condition & G_IO_HUP) )
handler->OnReadWaiting();
+
if (condition & G_IO_OUT)
handler->OnWriteWaiting();
- else if (condition & G_IO_ERR || condition & G_IO_NVAL)
+
+ if ( (condition & G_IO_ERR) || (condition & G_IO_NVAL) )
handler->OnExceptionWaiting();
// we never want to remove source here, so always return true
+ //
+ // The source may have been removed by the handler, so it may be
+ // a good idea to return FALSE when the source has already been
+ // removed. However, that would involve somehow informing this function
+ // that the source was removed, which is not trivial to implement
+ // and handle all cases. It has been found through testing
+ // that if the source was removed by the handler, that even if we
+ // return TRUE here, the source/callback will not get called again.
return TRUE;
}
}