[clutter] backend: Bridge platform-dependent event data creation to device managers



commit 4115f215aca5b4b9fe7dd6b32e66f81d12c1176f
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Nov 17 17:37:45 2015 +0100

    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 files changed, 18 insertions(+), 2 deletions(-)
---
diff --git a/clutter/clutter-backend.c b/clutter/clutter-backend.c
index 91bda83..3122273 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);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]