[Cogl] [PATCH] stash: wayland 0.85 hacks
Robert Bragg
robert at sixbynine.org
Tue Apr 23 16:17:54 PDT 2013
From: Robert Bragg <robert at linux.intel.com>
---
cogl/winsys/cogl-winsys-egl-wayland.c | 45 ++++++++++++++++++++++++++++++++++-
configure.ac | 2 +-
2 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c
index eaf97af..67cdc1b 100644
--- a/cogl/winsys/cogl-winsys-egl-wayland.c
+++ b/cogl/winsys/cogl-winsys-egl-wayland.c
@@ -49,7 +49,9 @@ typedef struct _CoglRendererWayland
struct wl_display *wayland_display;
struct wl_compositor *wayland_compositor;
struct wl_shell *wayland_shell;
+#if WAYLAND_VERSION_MAJOR >= 1
struct wl_registry *wayland_registry;
+#endif
CoglPollFD poll_fd;
} CoglRendererWayland;
@@ -75,6 +77,7 @@ typedef struct _CoglOnscreenWayland
CoglBool has_pending;
} CoglOnscreenWayland;
+#if WAYLAND_VERSION_MAJOR >= 1
static void
registry_handle_global_cb (void *data,
struct wl_registry *registry,
@@ -93,6 +96,29 @@ registry_handle_global_cb (void *data,
wl_registry_bind (registry, id, &wl_shell_interface, 1);
}
+#else /* 0.85 */
+
+/* XXX: We are maintaining Wayland 0.85 protocol support until Mutter
+ * has been ported to the 1.x protocol... */
+static void
+display_handle_global_cb (struct wl_display *display,
+ uint32_t id,
+ const char *interface,
+ uint32_t version,
+ void *data)
+{
+ CoglRendererEGL *egl_renderer = (CoglRendererEGL *)data;
+ CoglRendererWayland *wayland_renderer = egl_renderer->platform;
+
+ if (strcmp (interface, "wl_compositor") == 0)
+ wayland_renderer->wayland_compositor =
+ wl_display_bind (display, id, &wl_compositor_interface);
+ else if (strcmp(interface, "wl_shell") == 0)
+ wayland_renderer->wayland_shell =
+ wl_display_bind (display, id, &wl_shell_interface);
+}
+#endif
+
static void
_cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
{
@@ -104,9 +130,11 @@ _cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
g_slice_free (CoglRendererEGL, egl_renderer);
}
+#if WAYLAND_VERSION_MAJOR >= 1
static const struct wl_registry_listener registry_listener = {
registry_handle_global_cb,
};
+#endif
static CoglBool
_cogl_winsys_renderer_connect (CoglRenderer *renderer,
@@ -152,12 +180,21 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
goto error;
}
+#if WAYLAND_VERSION_MAJOR >= 1
wayland_renderer->wayland_registry =
wl_display_get_registry (wayland_renderer->wayland_display);
wl_registry_add_listener (wayland_renderer->wayland_registry,
®istry_listener,
egl_renderer);
+#else
+
+ /* XXX: We are maintaining Wayland 0.85 protocol support until
+ * Mutter has been ported to the 1.x protocol... */
+ wl_display_add_global_listener (wayland_renderer->wayland_display,
+ display_handle_global_cb,
+ egl_renderer);
+#endif
}
/*
@@ -176,9 +213,11 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
if (!_cogl_winsys_egl_renderer_connect_common (renderer, error))
goto error;
+#if WAYLAND_VERSION_MAJOR >= 1
wayland_renderer->poll_fd.fd =
- wl_display_get_fd(wayland_renderer->wayland_display);
+ wl_display_get_fd (wayland_renderer->wayland_display);
wayland_renderer->poll_fd.events = COGL_POLL_FD_EVENT_IN;
+#endif
return TRUE;
@@ -571,6 +610,7 @@ cogl_wayland_onscreen_resize (CoglOnscreen *onscreen,
_cogl_framebuffer_winsys_update_size (fb, width, height);
}
+#if WAYLAND_VERSION_MAJOR >= 1
static void
_cogl_winsys_poll_get_info (CoglContext *context,
CoglPollFD **poll_fds,
@@ -606,6 +646,7 @@ _cogl_winsys_poll_dispatch (CoglContext *context,
break;
}
}
+#endif
static const CoglWinsysEGLVtable
_cogl_winsys_egl_vtable =
@@ -641,8 +682,10 @@ _cogl_winsys_egl_wayland_get_vtable (void)
vtable.onscreen_swap_buffers = _cogl_winsys_onscreen_swap_buffers;
+#if WAYLAND_VERSION_MAJOR >= 1
vtable.poll_get_info = _cogl_winsys_poll_get_info;
vtable.poll_dispatch = _cogl_winsys_poll_dispatch;
+#endif
vtable_inited = TRUE;
}
diff --git a/configure.ac b/configure.ac
index 3e9742b..96d6fc1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -92,7 +92,7 @@ m4_define([xfixes_req_version], [3])
m4_define([xcomposite_req_version], [0.4])
m4_define([xrandr_req_version], [1.2])
m4_define([cairo_req_version], [1.10])
-m4_define([wayland_req_version], [1.0.0])
+m4_define([wayland_req_version], [0.85.0])
dnl These variables get copied into the generated README
AC_SUBST([GLIB_REQ_VERSION], [glib_req_version])
--
1.8.2.1
More information about the Cogl
mailing list