]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/private/fdiodispatcher.h
fix wxBitmapComboBox Gtk-CRITICAL assertion `GTK_IS_ENTRY (entry)' failed
[wxWidgets.git] / include / wx / private / fdiodispatcher.h
index 0f71d94fd67dcc4c3328aa5803bba850e20f3e3c..e3fad1cc79c6a28b65158be96cd8168220ea0586 100644 (file)
 #define _WX_PRIVATE_FDIODISPATCHER_H_
 
 #include "wx/hashmap.h"
 #define _WX_PRIVATE_FDIODISPATCHER_H_
 
 #include "wx/hashmap.h"
-
-// handler used to process events on descriptors
-class wxFDIOHandler
-{
-public:
-    // called when descriptor is available for non-blocking read
-    virtual void OnReadWaiting() = 0;
-
-    // called when descriptor is available  for non-blocking write
-    virtual void OnWriteWaiting() = 0;
-
-    // called when there is exception on descriptor
-    virtual void OnExceptionWaiting() = 0;
-
-    // virtual dtor for the base class
-    virtual ~wxFDIOHandler() { }
-};
+#include "wx/private/fdiohandler.h"
 
 // those flags describes sets where descriptor should be added
 enum wxFDIODispatcherEntryFlags
 
 // those flags describes sets where descriptor should be added
 enum wxFDIODispatcherEntryFlags
@@ -45,6 +29,18 @@ class WXDLLIMPEXP_BASE wxFDIODispatcher
 public:
     enum { TIMEOUT_INFINITE = -1 };
 
 public:
     enum { TIMEOUT_INFINITE = -1 };
 
+    // return the global dispatcher to be used for IO events, can be NULL only
+    // if wxSelectDispatcher wasn't compiled into the library at all as
+    // creating it never fails
+    //
+    // don't delete the returned pointer
+    static wxFDIODispatcher *Get();
+
+    // if we have any registered handlers, check for any pending events to them
+    // and dispatch them -- this is used from wxX11 and wxDFB event loops
+    // implementation
+    static void DispatchPending();
+
     // register handler for the given descriptor with the dispatcher, return
     // true on success or false on error
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags) = 0;
     // register handler for the given descriptor with the dispatcher, return
     // true on success or false on error
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags) = 0;
@@ -52,13 +48,16 @@ public:
     // modify descriptor flags or handler, return true on success
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags) = 0;
 
     // modify descriptor flags or handler, return true on success
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags) = 0;
 
-    // unregister descriptor previously registered with RegisterFD(), the
-    // caller is responsible for deleting the returned handler pointer if
-    // necessary
-    virtual bool UnregisterFD(int fd, int flags) = 0;
+    // unregister descriptor previously registered with RegisterFD()
+    virtual bool UnregisterFD(int fd) = 0;
 
 
-    // loops waiting for an event to happen on any of the descriptors
-    virtual void RunLoop(int timeout) = 0;
+    // check if any events are currently available without dispatching them
+    virtual bool HasPending() const = 0;
+
+    // wait for an event for at most timeout milliseconds and process it;
+    // return the number of events processed (possibly 0 if timeout expired) or
+    // -1 if an error occurred
+    virtual int Dispatch(int timeout = TIMEOUT_INFINITE) = 0;
 
     virtual ~wxFDIODispatcher() { }
 };
 
     virtual ~wxFDIODispatcher() { }
 };
@@ -94,10 +93,12 @@ WX_DECLARE_HASH_MAP(
 //
 // notice that all functions for FD management have implementation
 // in the base class and should be called from the derived classes
 //
 // notice that all functions for FD management have implementation
 // in the base class and should be called from the derived classes
-class WXDLLIMPEXP_BASE wxMappedFDIODispatcher : public wxFDIODispatcher {
+class WXDLLIMPEXP_BASE wxMappedFDIODispatcher : public wxFDIODispatcher
+{
 public:
     // find the handler for the given fd, return NULL if none
     wxFDIOHandler *FindHandler(int fd) const;
 public:
     // find the handler for the given fd, return NULL if none
     wxFDIOHandler *FindHandler(int fd) const;
+
     // register handler for the given descriptor with the dispatcher, return
     // true on success or false on error
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags);
     // register handler for the given descriptor with the dispatcher, return
     // true on success or false on error
     virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags);
@@ -105,10 +106,8 @@ public:
     // modify descriptor flags or handler, return true on success
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags);
 
     // modify descriptor flags or handler, return true on success
     virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags);
 
-    // unregister descriptor previously registered with RegisterFD(), the
-    // caller is responsible for deleting the returned handler pointer if
-    // necessary
-    virtual bool UnregisterFD(int fd, int flags);
+    // unregister descriptor previously registered with RegisterFD()
+    virtual bool UnregisterFD(int fd);
 
     virtual ~wxMappedFDIODispatcher() { }
 
 
     virtual ~wxMappedFDIODispatcher() { }