From: Marcus Fritzsch Date: Tue, 12 Sep 2017 09:29:26 +0000 (+0200) Subject: wayland: extend wl::display for finer grained dispatch control X-Git-Tag: 4.99.1~123 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=staging%2Fwindowmanager.git;a=commitdiff_plain;h=30c368c0f6e15890a5a6bd27d4ae4175116b02b6 wayland: extend wl::display for finer grained dispatch control Signed-off-by: Marcus Fritzsch --- 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();