Commit 77dd068d authored by Giulio Camuffo's avatar Giulio Camuffo Committed by Pekka Paalanen

client: add a public function to make a roundtrip on a custom queue

wl_display_roundtrip() works on the default queue. Add a parallel
wl_display_roundtrip_queue().
Reviewed-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
parent 06472737
......@@ -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)
{
......
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment