diff options
-rw-r--r-- | src/wayland.cpp | 21 | ||||
-rw-r--r-- | src/wayland.hpp | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/wayland.cpp b/src/wayland.cpp index 92e152d..25c2359 100644 --- a/src/wayland.cpp +++ b/src/wayland.cpp @@ -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()); } diff --git a/src/wayland.hpp b/src/wayland.hpp index 256553d..61a840d 100644 --- a/src/wayland.hpp +++ b/src/wayland.hpp @@ -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(); |