summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2015-11-17 17:37:45 +0100
committerCarlos Garnacho <carlosg@gnome.org>2015-11-18 12:59:05 +0100
commit4115f215aca5b4b9fe7dd6b32e66f81d12c1176f (patch)
treee37bd88e38d51c630964f1ed1154057545edd8e6
parent5ea70bd102b25ca4c85ce06921d17b0eff15e673 (diff)
downloadclutter-4115f215aca5b4b9fe7dd6b32e66f81d12c1176f.tar.gz
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
-rw-r--r--clutter/clutter-backend.c20
1 files 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);
}