summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst-libs/gst/gl/wayland/wayland_event_source.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/gst-libs/gst/gl/wayland/wayland_event_source.c b/gst-libs/gst/gl/wayland/wayland_event_source.c
index 3f9d482ff..12a066805 100644
--- a/gst-libs/gst/gl/wayland/wayland_event_source.c
+++ b/gst-libs/gst/gl/wayland/wayland_event_source.c
@@ -128,13 +128,19 @@ wayland_event_source_prepare (GSource * base, gint * timeout)
wl_display_cancel_read (source->display);
if (source->queue) {
- if (wl_display_prepare_read_queue (source->display, source->queue) != 0)
- return TRUE;
+ while (wl_display_prepare_read_queue (source->display, source->queue) != 0) {
+ if (wl_display_dispatch_queue_pending (source->display,
+ source->queue) < 0) {
+ g_critical ("Failed to dispatch pending events\n");
+ }
+ }
} else {
- if (wl_display_prepare_read (source->display) != 0)
- return TRUE;
+ while (wl_display_prepare_read (source->display) != 0) {
+ if (wl_display_dispatch_pending (source->display) < 0) {
+ g_critical ("Failed to dispatch pending events\n");
+ }
+ }
}
-
source->reading = TRUE;
/* FIXME: this may return EAGAIN if the fd is full */
@@ -148,13 +154,18 @@ static gboolean
wayland_event_source_check (GSource * base)
{
WaylandEventSource *source = (WaylandEventSource *) base;
+ gboolean retval;
- source->reading = FALSE;
+ retval = source->pfd.revents;
- if (wl_display_read_events (source->display) == 0)
- return TRUE;
+ if (source->pfd.revents & G_IO_IN) {
+ wl_display_read_events (source->display);
+ } else {
+ wl_display_cancel_read (source->display);
+ }
+ source->reading = FALSE;
- return FALSE;
+ return retval;
}
static gboolean