diff --git a/clutter/Makefile.am b/clutter/Makefile.am index da4cae102..f36ba1214 100644 --- a/clutter/Makefile.am +++ b/clutter/Makefile.am @@ -533,33 +533,6 @@ egl_source_h = \ egl_source_h_priv = egl/clutter-backend-eglnative.h egl/clutter-stage-eglnative.h egl_source_c = egl/clutter-backend-eglnative.c egl/clutter-stage-eglnative.c -# Wayland backend rules -if SUPPORT_WAYLAND -backend_source_h_priv += \ - wayland/clutter-backend-wayland.h \ - wayland/clutter-backend-wayland-priv.h \ - wayland/clutter-stage-wayland.h \ - wayland/clutter-event-wayland.h \ - wayland/clutter-input-device-wayland.h \ - wayland/clutter-device-manager-wayland.h - -backend_source_c += \ - wayland/clutter-backend-wayland.c \ - wayland/clutter-stage-wayland.c \ - wayland/clutter-event-wayland.c \ - wayland/clutter-input-device-wayland.c \ - wayland/clutter-device-manager-wayland.c - - -clutterwayland_includedir = $(clutter_includedir)/wayland -clutterwayland_include_HEADERS = wayland/clutter-wayland.h - -clutter-wayland-$(CLUTTER_API_VERSION).pc: clutter-$(CLUTTER_API_VERSION).pc - $(QUIET_GEN)cp -f $< $(@F) - -pc_files += clutter-wayland-$(CLUTTER_API_VERSION).pc -endif # SUPPORT_WAYLAND - if SUPPORT_WAYLAND_COMPOSITOR wayland_compositor_source_h = \ wayland/clutter-wayland-compositor.h \ diff --git a/clutter/clutter-backend.c b/clutter/clutter-backend.c index 47dfcc1b3..99340c04c 100644 --- a/clutter/clutter-backend.c +++ b/clutter/clutter-backend.c @@ -77,9 +77,6 @@ #ifdef CLUTTER_WINDOWING_EGL #include "egl/clutter-backend-eglnative.h" #endif -#ifdef CLUTTER_INPUT_WAYLAND -#include "wayland/clutter-device-manager-wayland.h" -#endif #ifdef CLUTTER_HAS_WAYLAND_COMPOSITOR_SUPPORT #include @@ -620,14 +617,6 @@ clutter_backend_real_init_events (ClutterBackend *backend) _clutter_events_tslib_init (backend); } else -#endif -#ifdef CLUTTER_INPUT_WAYLAND - if (clutter_check_windowing_backend (CLUTTER_WINDOWING_WAYLAND) && - (input_backend == NULL || input_backend == I_(CLUTTER_INPUT_WAYLAND))) - { - _clutter_events_wayland_init (backend); - } - else #endif if (input_backend != NULL) { diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c index e1b424ed0..926b10d40 100644 --- a/clutter/clutter-main.c +++ b/clutter/clutter-main.c @@ -76,9 +76,6 @@ #ifdef CLUTTER_WINDOWING_EGL #include "egl/clutter-backend-eglnative.h" #endif -#ifdef CLUTTER_WINDOWING_WAYLAND -#include "wayland/clutter-backend-wayland.h" -#endif #include #include @@ -3628,12 +3625,6 @@ clutter_check_windowing_backend (const char *backend_type) backend_type = g_intern_string (backend_type); -#ifdef CLUTTER_WINDOWING_WAYLAND - if (backend_type == I_(CLUTTER_WINDOWING_WAYLAND) && - CLUTTER_IS_BACKEND_WAYLAND (context->backend)) - return TRUE; - else -#endif #ifdef CLUTTER_WINDOWING_EGL if (backend_type == I_(CLUTTER_WINDOWING_EGL) && CLUTTER_IS_BACKEND_EGL_NATIVE (context->backend)) diff --git a/clutter/wayland/clutter-backend-wayland-priv.h b/clutter/wayland/clutter-backend-wayland-priv.h deleted file mode 100644 index a278754ba..000000000 --- a/clutter/wayland/clutter-backend-wayland-priv.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010, 2011 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifndef __CLUTTER_BACKEND_WAYLAND_PRIV_H__ -#define __CLUTTER_BACKEND_WAYLAND_PRIV_H__ - -#include -#include -#include -#include - -#include "clutter-backend-private.h" -#include "clutter-backend-wayland.h" - -G_BEGIN_DECLS - -struct _ClutterBackendWayland -{ - ClutterBackend parent_instance; - - ClutterDeviceManager *device_manager; - - struct wl_display *wayland_display; - struct wl_registry *wayland_registry; - struct wl_compositor *wayland_compositor; - struct wl_shell *wayland_shell; - struct wl_shm *wayland_shm; - struct wl_surface *cursor_surface; - struct wl_buffer *cursor_buffer; - struct wl_output *wayland_output; - struct wl_cursor_theme *cursor_theme; - - gint cursor_x, cursor_y; - gint output_width, output_height; - - GSource *wayland_source; - - /* event timer */ - GTimer *event_timer; -}; - -void _clutter_backend_wayland_ensure_cursor (ClutterBackendWayland *backend_wayland); - -G_END_DECLS - -#endif /* __CLUTTER_BACKEND_WAYLAND_PRIV_H__ */ diff --git a/clutter/wayland/clutter-backend-wayland.c b/clutter/wayland/clutter-backend-wayland.c deleted file mode 100644 index 281b1a905..000000000 --- a/clutter/wayland/clutter-backend-wayland.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010, 2011 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include - -#include - -#include "clutter-debug.h" -#include "clutter-private.h" -#include "clutter-main.h" -#include "clutter-stage-private.h" - -#include "wayland/clutter-backend-wayland.h" -#include "wayland/clutter-backend-wayland-priv.h" -#include "wayland/clutter-device-manager-wayland.h" -#include "wayland/clutter-event-wayland.h" -#include "wayland/clutter-stage-wayland.h" -#include "wayland/clutter-wayland.h" -#include "cogl/clutter-stage-cogl.h" - -#include -#include - -#include -#include -#include - -G_DEFINE_TYPE (ClutterBackendWayland, clutter_backend_wayland, CLUTTER_TYPE_BACKEND); - -static struct wl_display *_foreign_display = NULL; -static gboolean _no_event_dispatch = FALSE; - -static void -clutter_backend_wayland_dispose (GObject *gobject) -{ - ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (gobject); - - if (backend_wayland->device_manager) - { - g_object_unref (backend_wayland->device_manager); - backend_wayland->device_manager = NULL; - } - - if (backend_wayland->cursor_buffer) - { - wl_buffer_destroy (backend_wayland->cursor_buffer); - backend_wayland->cursor_buffer = NULL; - } - - if (backend_wayland->cursor_theme) - { - wl_cursor_theme_destroy (backend_wayland->cursor_theme); - backend_wayland->cursor_theme = NULL; - } - - G_OBJECT_CLASS (clutter_backend_wayland_parent_class)->dispose (gobject); -} - - -static void -output_handle_mode (void *data, - struct wl_output *wl_output, - uint32_t flags, - int width, - int height, - int refresh) -{ - ClutterBackendWayland *backend_wayland = data; - - if (flags & WL_OUTPUT_MODE_CURRENT) - { - backend_wayland->output_width = width; - backend_wayland->output_height = height; - } -} - -static void -output_handle_geometry (void *data, - struct wl_output *wl_output, - int x, - int y, - int physical_width, - int physical_height, - int subpixel, - const char *make, - const char *model, - int32_t transform) -{ -} - - -static const struct wl_output_listener wayland_output_listener = { - output_handle_geometry, - output_handle_mode, -}; - - -static void -registry_handle_global (void *data, - struct wl_registry *registry, - uint32_t id, - const char *interface, - uint32_t version) -{ - ClutterBackendWayland *backend_wayland = data; - - if (strcmp (interface, "wl_compositor") == 0) - backend_wayland->wayland_compositor = - wl_registry_bind (registry, id, &wl_compositor_interface, 1); - else if (strcmp (interface, "wl_seat") == 0) - { - ClutterDeviceManager *device_manager = backend_wayland->device_manager; - _clutter_device_manager_wayland_add_input_group (device_manager, id); - } - else if (strcmp (interface, "wl_shell") == 0) - { - backend_wayland->wayland_shell = - wl_registry_bind (registry, id, &wl_shell_interface, 1); - } - else if (strcmp (interface, "wl_shm") == 0) - { - backend_wayland->wayland_shm = - wl_registry_bind (registry, id, &wl_shm_interface, 1); - } - else if (strcmp (interface, "wl_output") == 0) - { - /* FIXME: Support multiple outputs */ - backend_wayland->wayland_output = - wl_registry_bind (registry, id, &wl_output_interface, 1); - wl_output_add_listener (backend_wayland->wayland_output, - &wayland_output_listener, - backend_wayland); - } -} - -static const struct wl_registry_listener wayland_registry_listener = { - registry_handle_global, -}; - -static gboolean -clutter_backend_wayland_post_parse (ClutterBackend *backend, - GError **error) -{ - ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); - - /* TODO: expose environment variable/commandline option for this... */ - backend_wayland->wayland_display = _foreign_display; - if (backend_wayland->wayland_display == NULL) - backend_wayland->wayland_display = wl_display_connect (NULL); - - if (!backend_wayland->wayland_display) - { - g_set_error (error, CLUTTER_INIT_ERROR, - CLUTTER_INIT_ERROR_BACKEND, - "Failed to open Wayland display socket"); - return FALSE; - } - - backend_wayland->wayland_registry = - wl_display_get_registry (backend_wayland->wayland_display); - - backend_wayland->wayland_source = - _clutter_event_source_wayland_new (backend_wayland->wayland_display); - g_source_attach (backend_wayland->wayland_source, NULL); - - g_object_set (clutter_settings_get_default (), "font-dpi", 96 * 1024, NULL); - - /* XXX: We require the device manager to exist as soon as we connect to the - * compositor and setup an event handler because we will immediately be - * notified of the available input devices which need to be associated with - * the device-manager. - * - * FIXME: At some point we could perhaps just collapse the - * _clutter_backend_post_parse(), and _clutter_backend_init_events() - * functions into one called something like _clutter_backend_init() which - * would allow the real backend to manage the precise order of - * initialization. - */ - backend_wayland->device_manager = - _clutter_device_manager_wayland_new (backend); - - /* Set up listener so we'll catch all events. */ - wl_registry_add_listener (backend_wayland->wayland_registry, - &wayland_registry_listener, - backend_wayland); - - /* Wait until we have been notified about the compositor and shell objects */ - while (!(backend_wayland->wayland_compositor && - backend_wayland->wayland_shell)) - wl_display_roundtrip (backend_wayland->wayland_display); - - return TRUE; -} - -static CoglRenderer * -clutter_backend_wayland_get_renderer (ClutterBackend *backend, - GError **error) -{ - ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); - CoglRenderer *renderer; - - CLUTTER_NOTE (BACKEND, "Creating a new wayland renderer"); - - renderer = cogl_renderer_new (); - - cogl_wayland_renderer_set_event_dispatch_enabled (renderer, !_no_event_dispatch); - cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_EGL_WAYLAND); - - cogl_wayland_renderer_set_foreign_display (renderer, - backend_wayland->wayland_display); - - return renderer; -} - -static CoglDisplay * -clutter_backend_wayland_get_display (ClutterBackend *backend, - CoglRenderer *renderer, - CoglSwapChain *swap_chain, - GError **error) -{ - CoglOnscreenTemplate *onscreen_template = NULL; - CoglDisplay *display; - - onscreen_template = cogl_onscreen_template_new (swap_chain); - - /* XXX: I have some doubts that this is a good design. - * Conceptually should we be able to check an onscreen_template - * without more details about the CoglDisplay configuration? - */ - if (!cogl_renderer_check_onscreen_template (renderer, - onscreen_template, - error)) - goto error; - - display = cogl_display_new (renderer, onscreen_template); - - return display; - -error: - if (onscreen_template) - cogl_object_unref (onscreen_template); - - return NULL; -} - -static void -clutter_backend_wayland_class_init (ClutterBackendWaylandClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - ClutterBackendClass *backend_class = CLUTTER_BACKEND_CLASS (klass); - - gobject_class->dispose = clutter_backend_wayland_dispose; - - backend_class->stage_window_type = CLUTTER_TYPE_STAGE_WAYLAND; - - backend_class->post_parse = clutter_backend_wayland_post_parse; - backend_class->get_renderer = clutter_backend_wayland_get_renderer; - backend_class->get_display = clutter_backend_wayland_get_display; -} - -void -_clutter_backend_wayland_ensure_cursor (ClutterBackendWayland *backend_wayland) -{ - struct wl_cursor *cursor; - - backend_wayland->cursor_theme = - wl_cursor_theme_load (NULL, /* default */ - 32, - backend_wayland->wayland_shm); - - cursor = wl_cursor_theme_get_cursor (backend_wayland->cursor_theme, - "left_ptr"); - - backend_wayland->cursor_buffer = - wl_cursor_image_get_buffer (cursor->images[0]); - - if (backend_wayland->cursor_buffer) - { - backend_wayland->cursor_x = cursor->images[0]->hotspot_x; - backend_wayland->cursor_y = cursor->images[0]->hotspot_y; - } - - backend_wayland->cursor_surface = - wl_compositor_create_surface (backend_wayland->wayland_compositor); -} - -static void -clutter_backend_wayland_init (ClutterBackendWayland *backend_wayland) -{ -} - -ClutterBackend * -clutter_backend_wayland_new (void) -{ - return g_object_new (CLUTTER_TYPE_BACKEND_WAYLAND, NULL); -} - -/** - * clutter_wayland_set_display - * @display: pointer to a wayland display - * - * Sets the display connection Clutter should use; must be called - * before clutter_init(), clutter_init_with_args() or other functions - * pertaining Clutter's initialization process. - * - * If you are parsing the command line arguments by retrieving Clutter's - * #GOptionGroup with clutter_get_option_group() and calling - * g_option_context_parse() yourself, you should also call - * clutter_wayland_set_display() before g_option_context_parse(). - * - * Since: 1.16 - */ -void -clutter_wayland_set_display (struct wl_display *display) -{ - if (_clutter_context_is_initialized ()) - { - g_warning ("%s() can only be used before calling clutter_init()", - G_STRFUNC); - return; - } - - _foreign_display = display; -} - -/** - * clutter_wayland_disable_event_retrieval: - * - * Disables the dispatch of the events in the main loop. - * - * This is useful for integrating Clutter with another library that will do the - * event dispatch; in general only a single source should be acting on changes - * on the Wayland file descriptor. - * - * This function can only be called before calling clutter_init(). - * - * This function should not be normally used by applications. - * - * Since: 1.16 - */ -void -clutter_wayland_disable_event_retrieval (void) -{ - if (_clutter_context_is_initialized ()) - { - g_warning ("%s() can only be used before calling clutter_init()", - G_STRFUNC); - return; - } - - _no_event_dispatch = TRUE; -} diff --git a/clutter/wayland/clutter-backend-wayland.h b/clutter/wayland/clutter-backend-wayland.h deleted file mode 100644 index ba7a25329..000000000 --- a/clutter/wayland/clutter-backend-wayland.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010, 2011 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifndef __CLUTTER_BACKEND_WAYLAND_H__ -#define __CLUTTER_BACKEND_WAYLAND_H__ - -#include -#include -#include -#include - -#include "clutter-backend-private.h" - -G_BEGIN_DECLS - -#define CLUTTER_TYPE_BACKEND_WAYLAND (clutter_backend_wayland_get_type ()) -#define CLUTTER_BACKEND_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_BACKEND_WAYLAND, ClutterBackendWayland)) -#define CLUTTER_IS_BACKEND_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_BACKEND_WAYLAND)) -#define CLUTTER_BACKEND_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BACKEND_WAYLAND, ClutterBackendWaylandClass)) -#define CLUTTER_IS_BACKEND_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BACKEND_WAYLAND)) -#define CLUTTER_BACKEND_WAYLAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BACKEND_WAYLAND, ClutterBackendWaylandClass)) - -typedef struct _ClutterBackendWayland ClutterBackendWayland; -typedef struct _ClutterBackendWaylandClass ClutterBackendWaylandClass; - -struct _ClutterBackendWaylandClass -{ - ClutterBackendClass parent_class; -}; - -GType clutter_backend_wayland_get_type (void) G_GNUC_CONST; - -ClutterBackend *clutter_backend_wayland_new (void); - -G_END_DECLS - -#endif /* __CLUTTER_BACKEND_WAYLAND_H__ */ diff --git a/clutter/wayland/clutter-device-manager-wayland.c b/clutter/wayland/clutter-device-manager-wayland.c deleted file mode 100644 index 009e4dc7f..000000000 --- a/clutter/wayland/clutter-device-manager-wayland.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2011 Intel Corp. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - * - * Authors: - * Emmanuele Bassi - * Robert Bragg - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "clutter-input-device-wayland.h" -#include "clutter-device-manager-wayland.h" - -#include "clutter-backend.h" -#include "wayland/clutter-backend-wayland.h" -#include "wayland/clutter-backend-wayland-priv.h" -#include "clutter-debug.h" -#include "clutter-device-manager-private.h" -#include "clutter-private.h" - -#include -#include - -enum -{ - PROP_0 -}; - -G_DEFINE_TYPE (ClutterDeviceManagerWayland, - _clutter_device_manager_wayland, - CLUTTER_TYPE_DEVICE_MANAGER); - -static void -clutter_device_manager_wayland_add_device (ClutterDeviceManager *manager, - ClutterInputDevice *device) -{ - ClutterDeviceManagerWayland *manager_wayland = - CLUTTER_DEVICE_MANAGER_WAYLAND (manager); - ClutterInputDeviceType device_type; - gboolean is_pointer, is_keyboard; - - device_type = clutter_input_device_get_device_type (device); - is_pointer = (device_type == CLUTTER_POINTER_DEVICE) ? TRUE : FALSE; - is_keyboard = (device_type == CLUTTER_KEYBOARD_DEVICE) ? TRUE : FALSE; - - manager_wayland->devices = g_slist_prepend (manager_wayland->devices, device); - - if (is_pointer && manager_wayland->core_pointer == NULL) - manager_wayland->core_pointer = device; - - if (is_keyboard && manager_wayland->core_keyboard == NULL) - manager_wayland->core_keyboard = device; -} - -static void -clutter_device_manager_wayland_remove_device (ClutterDeviceManager *manager, - ClutterInputDevice *device) -{ - ClutterDeviceManagerWayland *manager_wayland = CLUTTER_DEVICE_MANAGER_WAYLAND (manager); - - manager_wayland->devices = g_slist_remove (manager_wayland->devices, device); -} - -static const GSList * -clutter_device_manager_wayland_get_devices (ClutterDeviceManager *manager) -{ - return CLUTTER_DEVICE_MANAGER_WAYLAND (manager)->devices; -} - -static ClutterInputDevice * -clutter_device_manager_wayland_get_core_device (ClutterDeviceManager *manager, - ClutterInputDeviceType type) -{ - ClutterDeviceManagerWayland *manager_wayland; - - manager_wayland = CLUTTER_DEVICE_MANAGER_WAYLAND (manager); - - switch (type) - { - case CLUTTER_POINTER_DEVICE: - return manager_wayland->core_pointer; - - case CLUTTER_KEYBOARD_DEVICE: - return manager_wayland->core_keyboard; - - case CLUTTER_EXTENSION_DEVICE: - default: - return NULL; - } - - return NULL; -} - -static ClutterInputDevice * -clutter_device_manager_wayland_get_device (ClutterDeviceManager *manager, - gint id) -{ - ClutterDeviceManagerWayland *manager_wayland = - CLUTTER_DEVICE_MANAGER_WAYLAND (manager); - GSList *l; - - for (l = manager_wayland->devices; l != NULL; l = l->next) - { - ClutterInputDevice *device = l->data; - - if (clutter_input_device_get_device_id (device) == id) - return device; - } - - return NULL; -} - -static void -_clutter_device_manager_wayland_class_init (ClutterDeviceManagerWaylandClass *klass) -{ - ClutterDeviceManagerClass *manager_class; - - manager_class = CLUTTER_DEVICE_MANAGER_CLASS (klass); - manager_class->add_device = clutter_device_manager_wayland_add_device; - manager_class->remove_device = clutter_device_manager_wayland_remove_device; - manager_class->get_devices = clutter_device_manager_wayland_get_devices; - manager_class->get_core_device = clutter_device_manager_wayland_get_core_device; - manager_class->get_device = clutter_device_manager_wayland_get_device; -} - -static void -_clutter_device_manager_wayland_init (ClutterDeviceManagerWayland *self) -{ -} - -void -_clutter_device_manager_wayland_add_input_group (ClutterDeviceManager *manager, - uint32_t id) -{ - ClutterBackend *backend = _clutter_device_manager_get_backend (manager); - ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); - ClutterInputDeviceWayland *device; - - device = g_object_new (CLUTTER_TYPE_INPUT_DEVICE_WAYLAND, - "id", id, - "device-type", CLUTTER_POINTER_DEVICE, - "name", "wayland device", - "enabled", TRUE, - NULL); - - device->input_device = - wl_registry_bind (backend_wayland->wayland_registry, id, - &wl_seat_interface, 1); - wl_seat_add_listener (device->input_device, - &_clutter_seat_wayland_listener, - device); - wl_seat_set_user_data (device->input_device, device); - - _clutter_device_manager_add_device (manager, CLUTTER_INPUT_DEVICE (device)); -} - -ClutterDeviceManager * -_clutter_device_manager_wayland_new (ClutterBackend *backend) -{ - return g_object_new (CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND, - "backend", backend, - NULL); -} - -void -_clutter_events_wayland_init (ClutterBackend *backend) -{ - ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); - - /* XXX: We actually create the wayland device manager in the backend - * post_parse vfunc because that's the point where we connect to a compositor - * and that's also the point where we will be notified of input devices so we - * need the device-manager to exist early on. - * - * To be consistent with other clutter backends though we only associate the - * device manager with the backend when _clutter_events_wayland_init() is - * called in _clutter_backend_init_events(). This should still allow the - * runtime selection of an alternative input backend if desired and in that - * case the wayland device manager will be benign. - * - * FIXME: At some point we could perhaps collapse the - * _clutter_backend_post_parse(), and _clutter_backend_init_events() - * functions into one called something like _clutter_backend_init() which - * would allow the real backend to manage the precise order of - * initialization. - */ - - backend->device_manager = g_object_ref (backend_wayland->device_manager); -} - -void -_clutter_events_wayland_uninit (ClutterBackend *backend) -{ - g_object_unref (backend->device_manager); - backend->device_manager = NULL; -} diff --git a/clutter/wayland/clutter-device-manager-wayland.h b/clutter/wayland/clutter-device-manager-wayland.h deleted file mode 100644 index 6fc827300..000000000 --- a/clutter/wayland/clutter-device-manager-wayland.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2011 Intel Corp. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - * - * Authors: - * Robert Bragg - */ - -#ifndef __CLUTTER_DEVICE_MANAGER_WAYLAND_H__ -#define __CLUTTER_DEVICE_MANAGER_WAYLAND_H__ - -#include -#include - -G_BEGIN_DECLS - -#define CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND (_clutter_device_manager_wayland_get_type ()) -#define CLUTTER_DEVICE_MANAGER_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND, ClutterDeviceManagerWayland)) -#define CLUTTER_IS_DEVICE_MANAGER_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND)) -#define CLUTTER_DEVICE_MANAGER_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND, ClutterDeviceManagerWaylandClass)) -#define CLUTTER_IS_DEVICE_MANAGER_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND)) -#define CLUTTER_DEVICE_MANAGER_WAYLAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DEVICE_MANAGER_WAYLAND, ClutterDeviceManagerWaylandClass)) - -typedef struct _ClutterDeviceManagerWayland ClutterDeviceManagerWayland; -typedef struct _ClutterDeviceManagerWaylandClass ClutterDeviceManagerWaylandClass; - -struct _ClutterDeviceManagerWayland -{ - ClutterDeviceManager parent_instance; - - GSList *devices; - - ClutterInputDevice *core_pointer; - ClutterInputDevice *core_keyboard; -}; - -struct _ClutterDeviceManagerWaylandClass -{ - ClutterDeviceManagerClass parent_class; -}; - -GType _clutter_device_manager_wayland_get_type (void) G_GNUC_CONST; - -ClutterDeviceManager * -_clutter_device_manager_wayland_new (ClutterBackend *backend); - -void -_clutter_device_manager_wayland_add_input_group (ClutterDeviceManager *manager, - uint32_t id); - -void -_clutter_events_wayland_init (ClutterBackend *backend); - -void -_clutter_events_wayland_uninit (ClutterBackend *backend); - -G_END_DECLS - -#endif /* __CLUTTER_DEVICE_MANAGER_WAYLAND_H__ */ diff --git a/clutter/wayland/clutter-event-wayland.c b/clutter/wayland/clutter-event-wayland.c deleted file mode 100644 index c832d80b8..000000000 --- a/clutter/wayland/clutter-event-wayland.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#include "clutter-event.h" -#include "clutter-main.h" -#include "clutter-private.h" -#include "clutter-stage-private.h" - -#include "clutter-event-wayland.h" - -typedef struct _ClutterEventSourceWayland -{ - GSource source; - struct wl_display *display; -} ClutterEventSourceWayland; - -static gboolean -clutter_event_source_wayland_prepare (GSource *base, gint *timeout) -{ - ClutterEventSourceWayland *source = (ClutterEventSourceWayland *) base; - gboolean retval; - - _clutter_threads_acquire_lock (); - - *timeout = -1; - - /* We have to add/remove the GPollFD if we want to update our - * poll event mask dynamically. Instead, let's just flush all - * writes on idle */ - wl_display_flush (source->display); - - retval = clutter_events_pending (); - - _clutter_threads_release_lock (); - - return retval; -} - -static gboolean -clutter_event_source_wayland_check (GSource *base) -{ - gboolean retval; - - _clutter_threads_acquire_lock (); - - retval = clutter_events_pending (); - - _clutter_threads_release_lock (); - - return retval; -} - -static gboolean -clutter_event_source_wayland_dispatch (GSource *base, - GSourceFunc callback, - gpointer data) -{ - ClutterEvent *event; - - _clutter_threads_acquire_lock (); - - event = clutter_event_get (); - - if (event) - { - /* forward the event into clutter for emission etc. */ - _clutter_stage_queue_event (event->any.stage, event, FALSE); - } - - _clutter_threads_release_lock (); - - return TRUE; -} - -static GSourceFuncs clutter_event_source_wayland_funcs = { - clutter_event_source_wayland_prepare, - clutter_event_source_wayland_check, - clutter_event_source_wayland_dispatch, - NULL -}; - - -GSource * -_clutter_event_source_wayland_new (struct wl_display *display) -{ - ClutterEventSourceWayland *source; - - source = (ClutterEventSourceWayland *) - g_source_new (&clutter_event_source_wayland_funcs, - sizeof (ClutterEventSourceWayland)); - source->display = display; - - return &source->source; -} diff --git a/clutter/wayland/clutter-event-wayland.h b/clutter/wayland/clutter-event-wayland.h deleted file mode 100644 index 4ac6b7218..000000000 --- a/clutter/wayland/clutter-event-wayland.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2011 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - - * Authors: - * Robert Bragg - */ - -#ifndef __CLUTTER_EVENT_WAYLAND_H__ -#define __CLUTTER_EVENT_WAYLAND_H__ - -#include -#include - -#include - -GSource * -_clutter_event_source_wayland_new (struct wl_display *display); - -#endif /* __CLUTTER_EVENT_WAYLAND_H__ */ diff --git a/clutter/wayland/clutter-input-device-wayland.c b/clutter/wayland/clutter-input-device-wayland.c deleted file mode 100644 index 7bfb615b7..000000000 --- a/clutter/wayland/clutter-input-device-wayland.c +++ /dev/null @@ -1,628 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include - -#include "clutter-debug.h" -#include "clutter-device-manager-private.h" -#include "clutter-event-private.h" -#include "clutter-private.h" -#include "clutter-keysyms.h" -#include "evdev/clutter-xkb-utils.h" -#include "clutter-input-device-wayland.h" -#include "clutter-backend-wayland.h" -#include "clutter-backend-wayland-priv.h" -#include "clutter-stage-private.h" -#include "clutter-stage-wayland.h" -#include "clutter-wayland.h" - -#include "cogl/clutter-stage-cogl.h" - -typedef struct _ClutterInputDeviceClass ClutterInputDeviceWaylandClass; - -#define clutter_input_device_wayland_get_type \ - _clutter_input_device_wayland_get_type - -G_DEFINE_TYPE (ClutterInputDeviceWayland, - clutter_input_device_wayland, - CLUTTER_TYPE_INPUT_DEVICE); - -/* This gives us a fake time source for higher level abstractions to have an - * understanding of when an event happens. All that matters are that this is a - * monotonic increasing millisecond accurate time for events to be compared with. - */ -static guint32 -_clutter_wayland_get_time (void) -{ - return g_get_monotonic_time () / 1000; -} - -static void -clutter_wayland_handle_motion (void *data, - struct wl_pointer *pointer, - uint32_t _time, - wl_fixed_t x, wl_fixed_t y) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl; - ClutterEvent *event; - - if (!device->pointer_focus) - return; - - stage_cogl = device->pointer_focus; - - event = clutter_event_new (CLUTTER_MOTION); - event->motion.stage = stage_cogl->wrapper; - event->motion.device = CLUTTER_INPUT_DEVICE (device); - event->motion.time = _clutter_wayland_get_time (); - event->motion.modifier_state = 0; - event->motion.x = wl_fixed_to_double (x); - event->motion.y = wl_fixed_to_double (y); - - device->x = event->motion.x; - device->y = event->motion.y; - - _clutter_event_push (event, FALSE); -} - -static void -clutter_wayland_handle_button (void *data, - struct wl_pointer *pointer, - uint32_t serial, uint32_t _time, - uint32_t button, uint32_t state) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl; - ClutterEvent *event; - ClutterEventType type; - ClutterModifierType modifier_mask = 0; - - if (!device->pointer_focus) - return; - - stage_cogl = device->pointer_focus; - - if (state) - type = CLUTTER_BUTTON_PRESS; - else - type = CLUTTER_BUTTON_RELEASE; - - event = clutter_event_new (type); - event->button.stage = stage_cogl->wrapper; - event->button.device = CLUTTER_INPUT_DEVICE (device); - event->button.time = _clutter_wayland_get_time (); - event->button.x = device->x; - event->button.y = device->y; - _clutter_xkb_translate_state (event, device->xkb, 0); - - /* evdev button codes */ - switch (button) { - case 272: - event->button.button = 1; - modifier_mask = CLUTTER_BUTTON1_MASK; - break; - case 273: - event->button.button = 3; - modifier_mask = CLUTTER_BUTTON2_MASK; - break; - case 274: - event->button.button = 2; - modifier_mask = CLUTTER_BUTTON3_MASK; - break; - } - - if (modifier_mask) - { - if (state) - device->button_modifier_state |= modifier_mask; - else - device->button_modifier_state &= ~modifier_mask; - } - - event->button.modifier_state = device->button_modifier_state; - - _clutter_event_push (event, FALSE); -} - -static void -clutter_wayland_handle_axis (void *data, - struct wl_pointer *pointer, - uint32_t time, - uint32_t axis, - wl_fixed_t value) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl; - ClutterEvent *event; - gdouble delta_x, delta_y; - gdouble delta_factor; - - if (!device->pointer_focus) - return; - - stage_cogl = device->pointer_focus; - event = clutter_event_new (CLUTTER_SCROLL); - event->scroll.time = _clutter_wayland_get_time (); - event->scroll.stage = stage_cogl->wrapper; - event->scroll.direction = CLUTTER_SCROLL_SMOOTH; - event->scroll.x = device->x; - event->scroll.y = device->y; - - /* Wayland pointer axis events are in pointer motion coordinate space. - * To convert to Xi2 discrete step coordinate space, multiply the factor - * 1/10. */ - delta_factor = 1.0 / 10.0; - if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL) - { - delta_x = wl_fixed_to_double (value) * delta_factor; - delta_y = 0; - } - else - { - delta_x = 0; - delta_y = wl_fixed_to_double (value) * delta_factor; - } - clutter_event_set_scroll_delta (event, delta_x, delta_y); - - _clutter_xkb_translate_state (event, device->xkb, 0); - - _clutter_event_push (event, FALSE); -} - -static void -clutter_wayland_handle_keymap (void *data, - struct wl_keyboard *keyboard, - uint32_t format, - int32_t fd, - uint32_t size) -{ - ClutterInputDeviceWayland *device = data; - struct xkb_context *ctx; - struct xkb_keymap *keymap; - char *map_str; - - if (device->xkb) - { - xkb_state_unref (device->xkb); - device->xkb = NULL; - } - - ctx = xkb_context_new (0); - if (!ctx) - { - close (fd); - return; - } - - if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) - { - close (fd); - return; - } - - map_str = mmap (NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (map_str == MAP_FAILED) - { - close (fd); - return; - } - - keymap = xkb_map_new_from_string (ctx, - map_str, - XKB_KEYMAP_FORMAT_TEXT_V1, - 0); - xkb_context_unref (ctx); - munmap (map_str, size); - close (fd); - - if (!keymap) - { - g_warning ("failed to compile keymap\n"); - return; - } - - device->xkb = xkb_state_new (keymap); - xkb_map_unref (keymap); - if (!device->xkb) - { - g_warning ("failed to create XKB state object\n"); - return; - } -} - -/* XXX: Need a wl_keyboard event to harmonise these across clients. */ -#define KEY_REPEAT_DELAY 660 -#define KEY_REPEAT_INTERVAL 40 - -static gboolean -clutter_wayland_repeat_key (void *data) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl = device->keyboard_focus; - ClutterEvent *event; - - event = _clutter_key_event_new_from_evdev ((ClutterInputDevice *) device, - (ClutterInputDevice*) device, - stage_cogl->wrapper, - device->xkb, 0, - device->repeat_time, - device->repeat_key, - 1); - device->repeat_time += KEY_REPEAT_INTERVAL; - _clutter_event_push (event, FALSE); - - if (!device->is_initial_repeat) - return TRUE; - - g_source_remove (device->repeat_source); - device->repeat_source = g_timeout_add (KEY_REPEAT_INTERVAL, - clutter_wayland_repeat_key, - device); - device->is_initial_repeat = FALSE; - - return FALSE; -} - -static void -clutter_wayland_handle_key (void *data, - struct wl_keyboard *keyboard, - uint32_t serial, uint32_t _time, - uint32_t key, uint32_t state) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl = device->keyboard_focus; - ClutterEvent *event; - - if (!device->keyboard_focus) - return; - if (!device->xkb) - return; - - event = _clutter_key_event_new_from_evdev ((ClutterInputDevice *) device, - (ClutterInputDevice *) device, - stage_cogl->wrapper, - device->xkb, 0, - _clutter_wayland_get_time (), - key, state); - - _clutter_event_push (event, FALSE); - - if (!xkb_key_repeats (xkb_state_get_map (device->xkb), key)) - return; - - if (state) - { - if (device->repeat_key != XKB_KEYCODE_INVALID) - g_source_remove (device->repeat_source); - device->repeat_key = key; - device->repeat_time = _time + KEY_REPEAT_DELAY; - device->repeat_source = g_timeout_add (KEY_REPEAT_DELAY, - clutter_wayland_repeat_key, - device); - device->is_initial_repeat = TRUE; - } - else if (device->repeat_key == key) - { - g_source_remove (device->repeat_source); - device->repeat_key = XKB_KEYCODE_INVALID; - } -} - -static void -clutter_wayland_handle_modifiers (void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - uint32_t mods_depressed, - uint32_t mods_latched, - uint32_t mods_locked, - uint32_t group) -{ - ClutterInputDeviceWayland *device = data; - - if (!device->xkb) - return; - - xkb_state_update_mask (device->xkb, - mods_depressed, - mods_latched, - mods_locked, - 0, - 0, - group); -} - -static void -clutter_wayland_handle_pointer_enter (void *data, - struct wl_pointer *pointer, - uint32_t serial, - struct wl_surface *surface, - wl_fixed_t x, wl_fixed_t y) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageWayland *stage_wayland; - ClutterStageCogl *stage_cogl; - ClutterEvent *event; - ClutterBackend *backend; - ClutterBackendWayland *backend_wayland; - - stage_wayland = wl_surface_get_user_data (surface); - - if (!CLUTTER_IS_STAGE_COGL (stage_wayland)) - return; - stage_cogl = CLUTTER_STAGE_COGL (stage_wayland); - - device->pointer_focus = stage_cogl; - _clutter_input_device_set_stage (CLUTTER_INPUT_DEVICE (device), - stage_cogl->wrapper); - - event = clutter_event_new (CLUTTER_ENTER); - event->crossing.stage = stage_cogl->wrapper; - event->crossing.time = _clutter_wayland_get_time (); - event->crossing.x = wl_fixed_to_double (x); - event->crossing.y = wl_fixed_to_double (y); - event->crossing.source = CLUTTER_ACTOR (stage_cogl->wrapper); - event->crossing.device = CLUTTER_INPUT_DEVICE (device); - - device->x = event->crossing.x; - device->y = event->crossing.y; - - _clutter_event_push (event, FALSE); - - if (stage_wayland->cursor_visible) - { - /* Set the cursor to the cursor loaded at backend initialisation */ - backend = clutter_get_default_backend (); - backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); - - _clutter_backend_wayland_ensure_cursor (backend_wayland); - - wl_pointer_set_cursor (pointer, - serial, - backend_wayland->cursor_surface, - backend_wayland->cursor_x, - backend_wayland->cursor_y); - wl_surface_attach (backend_wayland->cursor_surface, - backend_wayland->cursor_buffer, - 0, - 0); - wl_surface_damage (backend_wayland->cursor_surface, - 0, - 0, - 32, /* XXX: FFS */ - 32); - - wl_surface_commit (backend_wayland->cursor_surface); - } - else - { - wl_pointer_set_cursor (pointer, serial, NULL, 0, 0); - } -} - -static void -clutter_wayland_handle_pointer_leave (void *data, - struct wl_pointer *pointer, - uint32_t serial, - struct wl_surface *surface) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl; - ClutterEvent *event; - - if (surface == NULL) - return; - - if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) - return; - - stage_cogl = wl_surface_get_user_data (surface); - g_assert (device->pointer_focus == stage_cogl); - - event = clutter_event_new (CLUTTER_LEAVE); - event->crossing.stage = stage_cogl->wrapper; - event->crossing.time = _clutter_wayland_get_time (); - event->crossing.x = device->x; - event->crossing.y = device->y; - event->crossing.source = CLUTTER_ACTOR (stage_cogl->wrapper); - event->crossing.device = CLUTTER_INPUT_DEVICE (device); - - _clutter_event_push (event, FALSE); - - device->pointer_focus = NULL; - _clutter_input_device_set_stage (CLUTTER_INPUT_DEVICE (device), NULL); -} - -static void -clutter_wayland_handle_keyboard_enter (void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - struct wl_surface *surface, - struct wl_array *keys) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl; - - if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) - return; - - stage_cogl = wl_surface_get_user_data (surface); - g_assert (device->keyboard_focus == NULL); - device->keyboard_focus = stage_cogl; - - _clutter_stage_update_state (stage_cogl->wrapper, - 0, - CLUTTER_STAGE_STATE_ACTIVATED); -} - -static void -clutter_wayland_handle_keyboard_leave (void *data, - struct wl_keyboard *keyboard, - uint32_t serial, - struct wl_surface *surface) -{ - ClutterInputDeviceWayland *device = data; - ClutterStageCogl *stage_cogl; - - if (!surface) - return; - if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) - return; - - stage_cogl = wl_surface_get_user_data (surface); - g_assert (device->keyboard_focus == stage_cogl); - - _clutter_stage_update_state (stage_cogl->wrapper, - CLUTTER_STAGE_STATE_ACTIVATED, - 0); - - if (device->repeat_key != XKB_KEYCODE_INVALID) - { - g_source_remove (device->repeat_source); - device->repeat_key = XKB_KEYCODE_INVALID; - } - - device->keyboard_focus = NULL; -} - -static const struct wl_keyboard_listener _clutter_keyboard_wayland_listener = { - clutter_wayland_handle_keymap, - clutter_wayland_handle_keyboard_enter, - clutter_wayland_handle_keyboard_leave, - clutter_wayland_handle_key, - clutter_wayland_handle_modifiers, -}; - -static const struct wl_pointer_listener _clutter_pointer_wayland_listener = { - clutter_wayland_handle_pointer_enter, - clutter_wayland_handle_pointer_leave, - clutter_wayland_handle_motion, - clutter_wayland_handle_button, - clutter_wayland_handle_axis, -}; - -static void -clutter_wayland_handle_seat (void *data, - struct wl_seat *seat, - uint32_t capabilities) -{ - ClutterInputDeviceWayland *device = data; - - /* XXX: Needs to handle removals too. */ - - if ((capabilities & WL_SEAT_CAPABILITY_POINTER) && !device->has_pointer) - { - struct wl_pointer *pointer; - - pointer = wl_seat_get_pointer (seat); - if (pointer) - { - wl_pointer_add_listener (pointer, - &_clutter_pointer_wayland_listener, - device); - wl_pointer_set_user_data (pointer, device); - device->has_pointer = 1; - } - } - - if ((capabilities & WL_SEAT_CAPABILITY_KEYBOARD) && !device->has_keyboard) - { - struct wl_keyboard *keyboard; - - keyboard = wl_seat_get_keyboard (seat); - if (keyboard) - { - wl_keyboard_add_listener (keyboard, - &_clutter_keyboard_wayland_listener, - device); - wl_keyboard_set_user_data (keyboard, device); - device->has_keyboard = 1; - } - } -} - -const struct wl_seat_listener _clutter_seat_wayland_listener = { - clutter_wayland_handle_seat, -}; - -static gboolean -clutter_input_device_wayland_keycode_to_evdev (ClutterInputDevice *device, - guint hardware_keycode, - guint *evdev_keycode) -{ - /* The hardware keycodes from the wayland backend are already evdev - keycodes */ - *evdev_keycode = hardware_keycode; - return TRUE; -} - -static void -clutter_input_device_wayland_class_init (ClutterInputDeviceWaylandClass *klass) -{ - klass->keycode_to_evdev = clutter_input_device_wayland_keycode_to_evdev; -} - -static void -clutter_input_device_wayland_init (ClutterInputDeviceWayland *self) -{ - self->repeat_key = XKB_KEYCODE_INVALID; -} - -/** - * clutter_wayland_input_device_get_wl_seat: (skip) - * @device: a #ClutterInputDevice - * - * Access the underlying data structure representing the Wayland device that is - * backing this #ClutterInputDevice. - * - * Note: this function can only be called when running on the Wayland platform. - * Calling this function at any other time will return %NULL. - * - * Returns: (transfer none): the Wayland input device associated with the - * @device - * - * Since: 1.10 - */ -struct wl_seat * -clutter_wayland_input_device_get_wl_seat (ClutterInputDevice *device) -{ - ClutterInputDeviceWayland *wayland_device; - - if (!CLUTTER_INPUT_DEVICE_WAYLAND (device)) - return NULL; - - wayland_device = CLUTTER_INPUT_DEVICE_WAYLAND (device); - - return wayland_device->input_device; -} diff --git a/clutter/wayland/clutter-input-device-wayland.h b/clutter/wayland/clutter-input-device-wayland.h deleted file mode 100644 index d242ac41c..000000000 --- a/clutter/wayland/clutter-input-device-wayland.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2011 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - - * Authors: - * Robert Bragg - */ - -#ifndef __CLUTTER_INPUT_DEVICE_WAYLAND_H__ -#define __CLUTTER_INPUT_DEVICE_WAYLAND_H__ - -#include -#include -#include - -#include "clutter-device-manager-private.h" -#include "cogl/clutter-stage-cogl.h" - -#define CLUTTER_TYPE_INPUT_DEVICE_WAYLAND (_clutter_input_device_wayland_get_type ()) -#define CLUTTER_INPUT_DEVICE_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_INPUT_DEVICE_WAYLAND, ClutterInputDeviceWayland)) -#define CLUTTER_IS_INPUT_DEVICE_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_INPUT_DEVICE_WAYLAND)) - -typedef struct _ClutterInputDeviceWayland ClutterInputDeviceWayland; - -struct _ClutterInputDeviceWayland -{ - ClutterInputDevice device; - struct wl_seat *input_device; - ClutterStageCogl *pointer_focus; - ClutterStageCogl *keyboard_focus; - gdouble x, y; - struct xkb_state *xkb; - gint has_pointer; - gint has_keyboard; - xkb_keycode_t repeat_key; - guint repeat_time; - guint repeat_source; - gboolean is_initial_repeat; - ClutterModifierType button_modifier_state; -}; - -GType _clutter_input_device_wayland_get_type (void) G_GNUC_CONST; - -extern const struct wl_seat_listener _clutter_seat_wayland_listener; - -#endif /* __CLUTTER_INPUT_DEVICE_WAYLAND_H__ */ diff --git a/clutter/wayland/clutter-stage-wayland.c b/clutter/wayland/clutter-stage-wayland.c deleted file mode 100644 index a9658bfca..000000000 --- a/clutter/wayland/clutter-stage-wayland.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "clutter-wayland.h" -#include "clutter-stage-wayland.h" -#include "clutter-backend-wayland.h" -#include "clutter-backend-wayland-priv.h" -#include "clutter-stage-window.h" -#include "clutter-stage-private.h" -#include "clutter-event-private.h" -#include "clutter-wayland.h" -#include -#include - -static ClutterStageWindowIface *clutter_stage_window_parent_iface = NULL; - -static void clutter_stage_window_iface_init (ClutterStageWindowIface *iface); - -#define clutter_stage_wayland_get_type _clutter_stage_wayland_get_type - -G_DEFINE_TYPE_WITH_CODE (ClutterStageWayland, - clutter_stage_wayland, - CLUTTER_TYPE_STAGE_COGL, - G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_STAGE_WINDOW, - clutter_stage_window_iface_init)); - -static void -handle_ping (void *data, - struct wl_shell_surface *shell_surface, - uint32_t serial) -{ - wl_shell_surface_pong(shell_surface, serial); -} - -static void -handle_configure (void *data, - struct wl_shell_surface *shell_surface, - uint32_t edges, - int32_t width, - int32_t height) -{ - ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL(data); - CoglFramebuffer *fb = COGL_FRAMEBUFFER (stage_cogl->onscreen); - - if (cogl_framebuffer_get_width (fb) != width || - cogl_framebuffer_get_height (fb) != height) - clutter_actor_queue_relayout (CLUTTER_ACTOR (stage_cogl->wrapper)); - - clutter_actor_set_size (CLUTTER_ACTOR (stage_cogl->wrapper), - width, height); - - /* the resize process is complete, so we can ask the stage - * to set up the GL viewport with the new size - */ - clutter_stage_ensure_viewport (stage_cogl->wrapper); -} - -static void -handle_popup_done (void *data, - struct wl_shell_surface *shell_surface) -{ - /* XXX: Fill me in. */ -} - -static const struct wl_shell_surface_listener shell_surface_listener = { - handle_ping, - handle_configure, - handle_popup_done, -}; - -static void -clutter_stage_wayland_set_fullscreen (ClutterStageWindow *stage_window, - gboolean fullscreen); - -static gboolean -clutter_stage_wayland_realize (ClutterStageWindow *stage_window) -{ - ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window); - struct wl_surface *wl_surface; - struct wl_shell_surface *wl_shell_surface; - - clutter_stage_window_parent_iface->realize (stage_window); - - wl_surface = cogl_wayland_onscreen_get_surface (stage_cogl->onscreen); - wl_surface_set_user_data (wl_surface, stage_wayland); - stage_wayland->wayland_surface = wl_surface; - - if (!stage_wayland->foreign_wl_surface) - { - wl_shell_surface = - cogl_wayland_onscreen_get_shell_surface (stage_cogl->onscreen); - wl_shell_surface_add_listener (wl_shell_surface, - &shell_surface_listener, - stage_wayland); - stage_wayland->wayland_shell_surface = wl_shell_surface; - } - - if (stage_wayland->fullscreen) - clutter_stage_wayland_set_fullscreen (stage_window, TRUE); - - return TRUE; -} - -static void -clutter_stage_wayland_show (ClutterStageWindow *stage_window, - gboolean do_raise) -{ - ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window); - ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - - clutter_stage_window_parent_iface->show (stage_window, do_raise); - - if (stage_wayland->wayland_shell_surface) - wl_shell_surface_set_toplevel (stage_wayland->wayland_shell_surface); - - stage_wayland->shown = TRUE; - - /* We need to queue a redraw after the stage is shown because all of - * the other queue redraws up to this point will have been ignored - * because the actor was not visible. The other backends do not need - * to do this because they will get expose events at some point, but - * that does not happen for Wayland. */ - clutter_actor_queue_redraw (CLUTTER_ACTOR (stage_cogl->wrapper)); -} - -static void -clutter_stage_wayland_set_cursor_visible (ClutterStageWindow *stage_window, - gboolean cursor_visible) -{ - ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - - stage_wayland->cursor_visible = cursor_visible; -} - -static void -clutter_stage_wayland_set_fullscreen (ClutterStageWindow *stage_window, - gboolean fullscreen) -{ - ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window); - ClutterBackend *backend = CLUTTER_BACKEND (stage_cogl->backend); - ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend); - ClutterActor *stage = _clutter_stage_window_get_wrapper (stage_window); - - stage_wayland->fullscreen = fullscreen; - - if (!stage_wayland->wayland_shell_surface) - return; - - if (fullscreen) - { - _clutter_stage_update_state (stage_cogl->wrapper, - 0, - CLUTTER_STAGE_STATE_FULLSCREEN); - - /* FIXME: In future versions of the Wayland protocol we'll get a - * configure with the dimensions we can use - but for now we have to - * use the dimensions from the output's mode - */ - clutter_actor_set_size (stage, - backend_wayland->output_width, - backend_wayland->output_height); - - /* FIXME: And we must force a redraw so that new sized buffer gets - * attached - */ - _clutter_stage_window_redraw (stage_window); - wl_shell_surface_set_fullscreen (stage_wayland->wayland_shell_surface, - WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, - 0, - NULL); - } - else - { - _clutter_stage_update_state (stage_cogl->wrapper, - CLUTTER_STAGE_STATE_FULLSCREEN, - 0); - - wl_shell_surface_set_toplevel (stage_wayland->wayland_shell_surface); - } -} - -static void -clutter_stage_wayland_resize (ClutterStageWindow *stage_window, - gint width, - gint height) -{ - ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window); - ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - - /* Resize preserving top left */ - if (stage_cogl->onscreen) - { - cogl_wayland_onscreen_resize (stage_cogl->onscreen, width, height, 0, 0); - - /* Only trigger a redraw if the stage window has been shown */ - if (stage_wayland->shown) - _clutter_stage_window_redraw (stage_window); - } -} - -static gboolean -clutter_stage_wayland_can_clip_redraws (ClutterStageWindow *stage_window) -{ - return TRUE; -} - -static void -clutter_stage_wayland_init (ClutterStageWayland *stage_wayland) -{ - stage_wayland->cursor_visible = TRUE; -} - -static void -clutter_stage_window_iface_init (ClutterStageWindowIface *iface) -{ - clutter_stage_window_parent_iface = g_type_interface_peek_parent (iface); - - iface->realize = clutter_stage_wayland_realize; - iface->show = clutter_stage_wayland_show; - iface->set_fullscreen = clutter_stage_wayland_set_fullscreen; - iface->set_cursor_visible = clutter_stage_wayland_set_cursor_visible; - iface->resize = clutter_stage_wayland_resize; - iface->can_clip_redraws = clutter_stage_wayland_can_clip_redraws; -} - -static void -clutter_stage_wayland_class_init (ClutterStageWaylandClass *klass) -{ -} - -/** - * clutter_wayland_stage_get_wl_shell_surface: (skip) - * @stage: a #ClutterStage - * - * Access the underlying data structure representing the shell surface that is - * backing the #ClutterStage - * - * Note: this function can only be called when running on the Wayland - * platform. Calling this function at any other time will return %NULL. - * - * Returns: (transfer none): the Wayland shell surface associated with - * @stage - * - * Since: 1.10 - */ -struct wl_shell_surface * -clutter_wayland_stage_get_wl_shell_surface (ClutterStage *stage) -{ - ClutterStageWindow *stage_window = _clutter_stage_get_window (stage); - ClutterStageWayland *stage_wayland; - - if (!CLUTTER_IS_STAGE_WAYLAND (stage_window)) - return NULL; - - stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - - return stage_wayland->wayland_shell_surface; -} - -/** - * clutter_wayland_stage_get_wl_surface: (skip) - * @stage: a #ClutterStage - * - * Access the underlying data structure representing the surface that is - * backing the #ClutterStage - * - * Note: this function can only be called when running on the Wayland - * platform. Calling this function at any other time will return %NULL. - * - * Returns: (transfer none): the Wayland surface associated with @stage - * - * Since: 1.10 - */ -struct wl_surface * -clutter_wayland_stage_get_wl_surface (ClutterStage *stage) -{ - ClutterStageWindow *stage_window = _clutter_stage_get_window (stage); - ClutterStageWayland *stage_wayland; - - if (!CLUTTER_IS_STAGE_WAYLAND (stage_window)) - return NULL; - - stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - - return stage_wayland->wayland_surface; - -} - -/** - * clutter_wayland_stage_set_wl_surface: - * @stage: a #ClutterStage - * @surface: A Wayland surface to associate with the @stage. - * - * Allows you to explicitly provide an existing Wayland surface to associate - * with @stage, preventing Cogl from allocating a surface and shell surface for - * the stage automatically. - * - * This function must be called before @stage is shown. - * - * Note: this function can only be called when running on the Wayland - * platform. Calling this function at any other time has no effect. - * - * Since: 1.16 - */ -void -clutter_wayland_stage_set_wl_surface (ClutterStage *stage, - struct wl_surface *surface) -{ - ClutterStageWindow *stage_window = _clutter_stage_get_window (stage); - ClutterStageWayland *stage_wayland; - ClutterStageCogl *stage_cogl; - - if (!CLUTTER_IS_STAGE_WAYLAND (stage_window)) - return; - - stage_cogl = CLUTTER_STAGE_COGL (stage_window); - - if (stage_cogl->onscreen == NULL) - { - ClutterBackend *backend = clutter_get_default_backend (); - - /* Use the same default dimensions as clutter_stage_cogl_realize() */ - stage_cogl->onscreen = cogl_onscreen_new (backend->cogl_context, - 800, 600); - - cogl_wayland_onscreen_set_foreign_surface (stage_cogl->onscreen, - surface); - - stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window); - stage_wayland->foreign_wl_surface = TRUE; - } - else - g_warning (G_STRLOC ": cannot set foreign surface for stage"); -} diff --git a/clutter/wayland/clutter-stage-wayland.h b/clutter/wayland/clutter-stage-wayland.h deleted file mode 100644 index 46092c3c2..000000000 --- a/clutter/wayland/clutter-stage-wayland.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2010,2011 Intel Corporation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - - * Authors: - * Matthew Allum - * Robert Bragg - * Kristian Høgsberg - */ - -#ifndef __CLUTTER_STAGE_WAYLAND_H__ -#define __CLUTTER_STAGE_WAYLAND_H__ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "cogl/clutter-stage-cogl.h" - -#define CLUTTER_TYPE_STAGE_WAYLAND (_clutter_stage_wayland_get_type ()) -#define CLUTTER_STAGE_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_STAGE_WAYLAND, ClutterStageWayland)) -#define CLUTTER_IS_STAGE_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_STAGE_WAYLAND)) -#define CLUTTER_STAGE_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_STAGE_WAYLAND, ClutterStageWaylandClass)) -#define CLUTTER_IS_STAGE_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_STAGE_WAYLAND)) -#define CLUTTER_STAGE_WAYLAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_STAGE_WAYLAND, ClutterStageWaylandClass)) - -typedef struct _ClutterStageWayland ClutterStageWayland; -typedef struct _ClutterStageWaylandClass ClutterStageWaylandClass; - -struct _ClutterStageWayland -{ - ClutterStageCogl parent_instance; - - struct wl_surface *wayland_surface; - struct wl_shell_surface *wayland_shell_surface; - gboolean fullscreen; - gboolean foreign_wl_surface; - gboolean shown; - gboolean cursor_visible; -}; - -struct _ClutterStageWaylandClass -{ - ClutterStageCoglClass parent_class; -}; - -GType _clutter_stage_wayland_get_type (void) G_GNUC_CONST; - -#endif /* __CLUTTER_STAGE_WAYLAND_H__ */ diff --git a/clutter/wayland/clutter-wayland.h b/clutter/wayland/clutter-wayland.h deleted file mode 100644 index 08f63a8dd..000000000 --- a/clutter/wayland/clutter-wayland.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Clutter. - * - * An OpenGL based 'interactive canvas' library. - * - * Copyright (C) 2012 Intel Corporation - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - * - * - */ - -/** - * SECTION:clutter-wayland - * @short_description: Wayland specific API - * - * The Wayland backend for Clutter provides some specific API, allowing - * integration with the Wayland client API for acessing the underlying data - * structures - * - * The Clutter Wayland API is available since Clutter 1.10 - */ - -#ifndef __CLUTTER_WAYLAND_H__ -#define __CLUTTER_WAYLAND_H__ - -#include -#include -#include -G_BEGIN_DECLS - -CLUTTER_AVAILABLE_IN_1_10 -struct wl_seat *clutter_wayland_input_device_get_wl_seat (ClutterInputDevice *device); - -CLUTTER_AVAILABLE_IN_1_10 -struct wl_shell_surface *clutter_wayland_stage_get_wl_shell_surface (ClutterStage *stage); - -CLUTTER_AVAILABLE_IN_1_10 -struct wl_surface *clutter_wayland_stage_get_wl_surface (ClutterStage *stage); - -CLUTTER_AVAILABLE_IN_1_16 -void clutter_wayland_stage_set_wl_surface (ClutterStage *stage, struct wl_surface *surface); - -CLUTTER_AVAILABLE_IN_1_16 -void clutter_wayland_set_display (struct wl_display *display); - -CLUTTER_AVAILABLE_IN_1_16 -void clutter_wayland_disable_event_retrieval (void); - -G_END_DECLS -#endif /* __CLUTTER_WAYLAND_H__ */ diff --git a/configure.ac b/configure.ac index 6b9e39f82..68b86305d 100644 --- a/configure.ac +++ b/configure.ac @@ -214,10 +214,6 @@ AC_ARG_ENABLE([x11-backend], [AS_HELP_STRING([--enable-x11-backend=@<:@yes/no@:>@], [Enable the X11 backend (default=check)])], [enable_x11=$enableval], [enable_x11=check]) -AC_ARG_ENABLE([wayland-backend], - [AS_HELP_STRING([--enable-wayland-backend=@<:@yes/no@:>@], [Enable the Wayland client backend (default=check)])], - [enable_wayland=$enableval], - [enable_wayland=check]) AC_ARG_ENABLE([egl-backend], [AS_HELP_STRING([--enable-egl-backend=@<:@yes/no@:>@], [Enable the EGL framebuffer backend (default=no)])], [enable_egl=$enableval], @@ -264,57 +260,6 @@ AS_IF([test "x$enable_x11" = "xyes"], []) ]) -AS_IF([test "x$enable_wayland" != xno], - [ - # We need to manually check for Wayland support in Cogl because - # the windowing systems are not exposed in the pkg-config file - saved_CFLAGS="${CFLAGS}" - CFLAGS="`$PKG_CONFIG --cflags cogl-1.0`" - - AC_MSG_CHECKING([for Wayland Cogl backend]) - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -#include -]], -[[ -#ifndef COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT -#error Cogl compiled without Wayland support -#endif -]])], [ - AC_MSG_RESULT(yes) - have_cogl_wayland=yes - ], [ - AC_MSG_RESULT(no) - have_cogl_wayland=no - ]) - - CFLAGS="${saved_CFLAGS}" - AS_IF([test "x$have_cogl_wayland" = xyes], - [ - PKG_CHECK_EXISTS([wayland-client wayland-cursor xkbcommon gdk-pixbuf-2.0], - [ - BACKEND_PC_FILES="$BACKEND_PC_FILES wayland-cursor wayland-client xkbcommon" - BACKEND_PC_FILES_PRIVATE="$BACKEND_PC_FILES_PRIVATE gdk-pixbuf-2.0" - - CLUTTER_BACKENDS="$CLUTTER_BACKENDS wayland" - CLUTTER_INPUT_BACKENDS="$CLUTTER_INPUT_BACKENDS wayland" - - SUPPORT_WAYLAND=1 - SUPPORT_COGL=1 - ], - [ - AS_IF([test "x$enable_wayland" = xyes], - [AC_MSG_ERROR(["*** Missing dependencies for Wayland support ***"])], - [enable_wayland=no]) - ]) - ], - [ - AS_IF([test "x$enable_wayland" = xyes], - [AC_MSG_ERROR("*** Cogl is missing Wayland support ***")], - [enable_wayland=no]) - ]) - ]) - dnl Note this is orthogonal to the client side support and you can dnl use the Wayland compositor features with any of the clutter dnl backends with corresponding Cogl support. @@ -427,18 +372,12 @@ AS_IF([test "x$SUPPORT_GLX" = "x1"], AS_IF([test "x$SUPPORT_EGL" = "x1"], [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES #define CLUTTER_WINDOWING_EGL \"eglnative\""]) -AS_IF([test "x$SUPPORT_WAYLAND" = "x1"], - [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES -#define CLUTTER_WINDOWING_WAYLAND \"wayland\""]) AS_IF([test "x$SUPPORT_EVDEV" = "x1"], [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES #define CLUTTER_INPUT_EVDEV \"evdev\""]) AS_IF([test "x$SUPPORT_TSLIB" = "x1"], [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES #define CLUTTER_INPUT_TSLIB \"tslib\""]) -AS_IF([test "x$SUPPORT_WAYLAND" = "x1"], - [CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES -#define CLUTTER_INPUT_WAYLAND \"wayland\""]) # the 'null' input backend is special CLUTTER_CONFIG_DEFINES="$CLUTTER_CONFIG_DEFINES