diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2015-11-17 17:37:45 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2015-11-18 12:59:05 +0100 |
commit | 4115f215aca5b4b9fe7dd6b32e66f81d12c1176f (patch) | |
tree | e37bd88e38d51c630964f1ed1154057545edd8e6 | |
parent | 5ea70bd102b25ca4c85ce06921d17b0eff15e673 (diff) | |
download | clutter-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.c | 20 |
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); } |