From 4115f215aca5b4b9fe7dd6b32e66f81d12c1176f Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 17 Nov 2015 17:37:45 +0100 Subject: [PATCH] backend: Bridge platform-dependent event data creation to device managers Device managers can now implement the ClutterEventExtender interface that allows them to set their own data to events, make the backend call those implementations if the device manager implements the interface. https://bugzilla.gnome.org/show_bug.cgi?id=758238 --- clutter/clutter-backend.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/clutter/clutter-backend.c b/clutter/clutter-backend.c index 91bda8315..312227352 100644 --- a/clutter/clutter-backend.c +++ b/clutter/clutter-backend.c @@ -53,6 +53,7 @@ #include "clutter-stage-private.h" #include "clutter-stage-window.h" #include "clutter-version.h" +#include "clutter-device-manager-private.h" #define CLUTTER_DISABLE_DEPRECATION_WARNINGS #include "deprecated/clutter-backend.h" @@ -998,10 +999,17 @@ _clutter_backend_copy_event_data (ClutterBackend *backend, const ClutterEvent *src, ClutterEvent *dest) { + ClutterEventExtenderInterface *iface; ClutterBackendClass *klass; klass = CLUTTER_BACKEND_GET_CLASS (backend); - if (klass->copy_event_data != NULL) + if (CLUTTER_IS_EVENT_EXTENDER (backend->device_manager)) + { + iface = CLUTTER_EVENT_EXTENDER_GET_IFACE (backend->device_manager); + iface->copy_event_data (CLUTTER_EVENT_EXTENDER (backend->device_manager), + src, dest); + } + else if (klass->copy_event_data != NULL) klass->copy_event_data (backend, src, dest); } @@ -1009,10 +1017,18 @@ void _clutter_backend_free_event_data (ClutterBackend *backend, ClutterEvent *event) { + ClutterEventExtenderInterface *iface; ClutterBackendClass *klass; klass = CLUTTER_BACKEND_GET_CLASS (backend); - if (klass->free_event_data != NULL) + + if (CLUTTER_IS_EVENT_EXTENDER (backend->device_manager)) + { + iface = CLUTTER_EVENT_EXTENDER_GET_IFACE (backend->device_manager); + iface->free_event_data (CLUTTER_EVENT_EXTENDER (backend->device_manager), + event); + } + else if (klass->free_event_data != NULL) klass->free_event_data (backend, event); }