From 30c368c0f6e15890a5a6bd27d4ae4175116b02b6 Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Tue, 12 Sep 2017 11:29:26 +0200 Subject: [PATCH] wayland: extend wl::display for finer grained dispatch control Signed-off-by: Marcus Fritzsch --- src/wayland.cpp | 21 +++++++++++++++++++++ src/wayland.hpp | 2 ++ 2 files changed, 23 insertions(+) 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(); -- 2.16.6