wayland: extend wl::display for finer grained dispatch control
authorMarcus Fritzsch <marcus_fritzsch@mentor.com>
Tue, 12 Sep 2017 09:29:26 +0000 (11:29 +0200)
committerMarcus Fritzsch <marcus_fritzsch@mentor.com>
Tue, 12 Sep 2017 09:29:26 +0000 (11:29 +0200)
Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
src/wayland.cpp
src/wayland.hpp

index 92e152d..25c2359 100644 (file)
@@ -43,6 +43,27 @@ void display::roundtrip() { wl_display_roundtrip(this->d.get()); }
 
 int display::dispatch() { return wl_display_dispatch(this->d.get()); }
 
+int display::dispatch_pending() { return wl_display_dispatch_pending(this->d.get()); }
+
+int display::read_events() {
+   // XXX: uhm, how?!
+   while (wl_display_prepare_read(this->d.get()) == -1) {
+      if (wl_display_dispatch_pending(this->d.get()) == -1) {
+         return -1;
+      }
+   }
+
+   if (wl_display_flush(this->d.get()) == -1) {
+      return -1;
+   }
+
+   if (wl_display_read_events(this->d.get()) == -1) {
+      wl_display_cancel_read(this->d.get());
+   }
+
+   return 0;
+}
+
 void display::flush() { wl_display_flush(this->d.get()); }
 
 int display::get_fd() const { return wl_display_get_fd(this->d.get()); }
index 256553d..61a840d 100644 (file)
@@ -89,6 +89,8 @@ struct display {
    bool ok() const;
    void roundtrip();
    int dispatch();
+   int dispatch_pending();
+   int read_events();
    void flush();
    int get_fd() const;
    int get_error();