summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cogl/cogl-renderer-private.h1
-rw-r--r--cogl/cogl-renderer.c4
-rw-r--r--cogl/cogl-wayland-renderer.h22
-rw-r--r--cogl/winsys/cogl-winsys-egl-wayland.c27
-rw-r--r--doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt1
5 files changed, 48 insertions, 7 deletions
diff --git a/cogl/cogl-renderer-private.h b/cogl/cogl-renderer-private.h
index 75ae1493..3e2601f6 100644
--- a/cogl/cogl-renderer-private.h
+++ b/cogl/cogl-renderer-private.h
@@ -76,6 +76,7 @@ struct _CoglRenderer
#if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT)
struct wl_display *foreign_wayland_display;
+ CoglBool wayland_enable_event_dispatch;
#endif
#ifdef COGL_HAS_SDL_SUPPORT
diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c
index e3008db7..41b1eaa4 100644
--- a/cogl/cogl-renderer.c
+++ b/cogl/cogl-renderer.c
@@ -197,6 +197,10 @@ cogl_renderer_new (void)
renderer->win32_enable_event_retrieval = TRUE;
#endif
+#ifdef COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT
+ renderer->wayland_enable_event_dispatch = TRUE;
+#endif
+
return _cogl_renderer_object_new (renderer);
}
diff --git a/cogl/cogl-wayland-renderer.h b/cogl/cogl-wayland-renderer.h
index 3f9e4341..20b0b494 100644
--- a/cogl/cogl-wayland-renderer.h
+++ b/cogl/cogl-wayland-renderer.h
@@ -52,6 +52,28 @@ cogl_wayland_renderer_set_foreign_display (CoglRenderer *renderer,
struct wl_display *display);
/**
+ * cogl_wayland_renderer_set_event_dispatch_enabled:
+ * @renderer: A #CoglRenderer
+ * @enable: The new value
+ *
+ * Sets whether Cogl should handle calling wl_display_dispatch() and
+ * wl_display_flush() as part of its main loop integration via
+ * cogl_poll_renderer_get_info() and cogl_poll_renderer_dispatch().
+ * The default value is %TRUE. When it is enabled the application can
+ * register listeners for Wayland interfaces and the callbacks will be
+ * invoked during cogl_poll_renderer_dispatch(). If the application
+ * wants to integrate with its own code that is already handling
+ * reading from the Wayland display socket, it should disable this to
+ * avoid having competing code read from the socket.
+ *
+ * Since: 1.16
+ * Stability: unstable
+ */
+void
+cogl_wayland_renderer_set_event_dispatch_enabled (CoglRenderer *renderer,
+ CoglBool enable);
+
+/**
* cogl_wayland_renderer_get_display:
* @renderer: A #CoglRenderer
*
diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c
index 4b4d522f..4b4e377e 100644
--- a/cogl/winsys/cogl-winsys-egl-wayland.c
+++ b/cogl/winsys/cogl-winsys-egl-wayland.c
@@ -233,13 +233,15 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
goto error;
- wayland_renderer->fd = wl_display_get_fd(wayland_renderer->wayland_display);
- _cogl_poll_renderer_add_fd (renderer,
- wayland_renderer->fd,
- COGL_POLL_FD_EVENT_IN,
- prepare_wayland_display_events,
- dispatch_wayland_display_events,
- renderer);
+ wayland_renderer->fd = wl_display_get_fd (wayland_renderer->wayland_display);
+
+ if (renderer->wayland_enable_event_dispatch)
+ _cogl_poll_renderer_add_fd (renderer,
+ wayland_renderer->fd,
+ COGL_POLL_FD_EVENT_IN,
+ prepare_wayland_display_events,
+ dispatch_wayland_display_events,
+ renderer);
return TRUE;
@@ -547,6 +549,17 @@ cogl_wayland_renderer_set_foreign_display (CoglRenderer *renderer,
renderer->foreign_wayland_display = display;
}
+void
+cogl_wayland_renderer_set_event_dispatch_enabled (CoglRenderer *renderer,
+ CoglBool enable)
+{
+ _COGL_RETURN_IF_FAIL (cogl_is_renderer (renderer));
+ /* NB: Renderers are considered immutable once connected */
+ _COGL_RETURN_IF_FAIL (!renderer->connected);
+
+ renderer->wayland_enable_event_dispatch = enable;
+}
+
struct wl_display *
cogl_wayland_renderer_get_display (CoglRenderer *renderer)
{
diff --git a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt
index 9b31f3a4..00ed18ff 100644
--- a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt
+++ b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt
@@ -89,6 +89,7 @@ cogl_win32_renderer_set_event_retrieval_enabled
<SUBSECTION>
cogl_wayland_renderer_set_foreign_display
+cogl_wayland_renderer_set_event_dispatch_enabled
cogl_wayland_renderer_get_display
</SECTION>