wl_display_roundtrip() works on the default queue. Add a parallel
wl_display_roundtrip_queue().
---

Rebased on top of master and fixed a warning and wrong return value

 src/wayland-client.c | 24 +++++++++++++++++++++---
 src/wayland-client.h |  2 ++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/wayland-client.c b/src/wayland-client.c
index 3e401d3..15a5acc 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -891,15 +891,16 @@ static const struct wl_callback_listener sync_listener = {
 /** Block until all pending request are processed by the server
  *
  * \param display The display context object
+ * \param queue The queue on which to run the roundtrip
  * \return The number of dispatched events on success or -1 on failure
  *
  * Blocks until the server process all currently issued requests and
- * sends out pending events on all event queues.
+ * sends out pending events on the event queue.
  *
  * \memberof wl_display
  */
 WL_EXPORT int
-wl_display_roundtrip(struct wl_display *display)
+wl_display_roundtrip_queue(struct wl_display *display, struct wl_event_queue 
*queue)
 {
        struct wl_callback *callback;
        int done, ret = 0;
@@ -908,9 +909,10 @@ wl_display_roundtrip(struct wl_display *display)
        callback = wl_display_sync(display);
        if (callback == NULL)
                return -1;
+       wl_proxy_set_queue((struct wl_proxy *) callback, queue);
        wl_callback_add_listener(callback, &sync_listener, &done);
        while (!done && ret >= 0)
-               ret = wl_display_dispatch(display);
+               ret = wl_display_dispatch_queue(display, queue);
 
        if (ret == -1 && !done)
                wl_callback_destroy(callback);
@@ -918,6 +920,22 @@ wl_display_roundtrip(struct wl_display *display)
        return ret;
 }
 
+/** Block until all pending request are processed by the server
+ *
+ * \param display The display context object
+ * \return The number of dispatched events on success or -1 on failure
+ *
+ * Blocks until the server process all currently issued requests and
+ * sends out pending events on the default event queue.
+ *
+ * \memberof wl_display
+ */
+WL_EXPORT int
+wl_display_roundtrip(struct wl_display *display)
+{
+       return wl_display_roundtrip_queue(display, &display->default_queue);
+}
+
 static int
 create_proxies(struct wl_proxy *sender, struct wl_closure *closure)
 {
diff --git a/src/wayland-client.h b/src/wayland-client.h
index dc4df53..0801a81 100644
--- a/src/wayland-client.h
+++ b/src/wayland-client.h
@@ -166,6 +166,8 @@ uint32_t wl_display_get_protocol_error(struct wl_display 
*display,
                                       uint32_t *id);
 
 int wl_display_flush(struct wl_display *display);
+int wl_display_roundtrip_queue(struct wl_display *display,
+                               struct wl_event_queue *queue);
 int wl_display_roundtrip(struct wl_display *display);
 struct wl_event_queue *wl_display_create_queue(struct wl_display *display);
 
-- 
2.0.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to