[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,
                                 &registry_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