[clutter/wip/evdev-tablet-support: 85/88] events: Add proximity events



commit 27534af93e0abd09b543d78d1795676dbf4861ca
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Jan 14 14:31:13 2015 +0100

    events: Add proximity events
    
    These events will be sent on tool proximity of tablet events.

 clutter/clutter-enums.h                    |    2 ++
 clutter/clutter-event.c                    |   16 ++++++++++++++++
 clutter/clutter-event.h                    |   26 ++++++++++++++++++++++++++
 clutter/clutter-main.c                     |   13 +++++++++++++
 clutter/clutter-stage.c                    |    4 +++-
 doc/reference/clutter/clutter-sections.txt |    1 +
 6 files changed, 61 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter-enums.h b/clutter/clutter-enums.h
index e7b64a3..3bcff16 100644
--- a/clutter/clutter-enums.h
+++ b/clutter/clutter-enums.h
@@ -782,6 +782,8 @@ typedef enum { /*< prefix=CLUTTER >*/
   CLUTTER_TOUCH_UPDATE,
   CLUTTER_TOUCH_END,
   CLUTTER_TOUCH_CANCEL,
+  CLUTTER_PROXIMITY_IN,
+  CLUTTER_PROXIMITY_OUT,
 
   CLUTTER_EVENT_LAST            /* helper */
 } ClutterEventType;
diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c
index 5228ee1..8a84d23 100644
--- a/clutter/clutter-event.c
+++ b/clutter/clutter-event.c
@@ -411,6 +411,8 @@ clutter_event_get_position (const ClutterEvent *event,
     case CLUTTER_CLIENT_MESSAGE:
     case CLUTTER_DELETE:
     case CLUTTER_EVENT_LAST:
+    case CLUTTER_PROXIMITY_IN:
+    case CLUTTER_PROXIMITY_OUT:
       clutter_point_init (position, 0.f, 0.f);
       break;
 
@@ -469,6 +471,8 @@ clutter_event_set_coords (ClutterEvent *event,
     case CLUTTER_CLIENT_MESSAGE:
     case CLUTTER_DELETE:
     case CLUTTER_EVENT_LAST:
+    case CLUTTER_PROXIMITY_IN:
+    case CLUTTER_PROXIMITY_OUT:
       break;
 
     case CLUTTER_ENTER:
@@ -1099,6 +1103,11 @@ clutter_event_set_device (ClutterEvent       *event,
     case CLUTTER_KEY_RELEASE:
       event->key.device = device;
       break;
+
+    case CLUTTER_PROXIMITY_IN:
+    case CLUTTER_PROXIMITY_OUT:
+      event->proximity.device = device;
+      break;
     }
 }
 
@@ -1173,6 +1182,11 @@ clutter_event_get_device (const ClutterEvent *event)
     case CLUTTER_KEY_RELEASE:
       device = event->key.device;
       break;
+
+    case CLUTTER_PROXIMITY_IN:
+    case CLUTTER_PROXIMITY_OUT:
+      device = event->proximity.device;
+      break;
     }
 
   return device;
@@ -1635,6 +1649,8 @@ clutter_event_get_axes (const ClutterEvent *event,
     case CLUTTER_KEY_PRESS:
     case CLUTTER_KEY_RELEASE:
     case CLUTTER_EVENT_LAST:
+    case CLUTTER_PROXIMITY_IN:
+    case CLUTTER_PROXIMITY_OUT:
       break;
 
     case CLUTTER_SCROLL:
diff --git a/clutter/clutter-event.h b/clutter/clutter-event.h
index 5ceec75..9568356 100644
--- a/clutter/clutter-event.h
+++ b/clutter/clutter-event.h
@@ -115,6 +115,7 @@ typedef struct _ClutterScrollEvent      ClutterScrollEvent;
 typedef struct _ClutterStageStateEvent  ClutterStageStateEvent;
 typedef struct _ClutterCrossingEvent    ClutterCrossingEvent;
 typedef struct _ClutterTouchEvent       ClutterTouchEvent;
+typedef struct _ClutterProximityEvent   ClutterProximityEvent;
 
 /**
  * ClutterAnyEvent:
@@ -212,6 +213,30 @@ struct _ClutterButtonEvent
 };
 
 /**
+ * ClutterProximityEvent:
+ * @type: event type
+ * @time: event time
+ * @flags: event flags
+ * @stage: event source stage
+ * @source: event source actor
+ * @device: the device that originated the event. If you want the physical
+ * device the event originated from, use clutter_event_get_source_device()
+ *
+ * Event for tool proximity in tablet devices
+ *
+ * Since: 1.22
+ */
+struct _ClutterProximityEvent
+{
+  ClutterEventType type;
+  guint32 time;
+  ClutterEventFlags flags;
+  ClutterStage *stage;
+  ClutterActor *source;
+  ClutterInputDevice *device;
+};
+
+/**
  * ClutterCrossingEvent:
  * @type: event type
  * @time: event time
@@ -404,6 +429,7 @@ union _ClutterEvent
   ClutterStageStateEvent stage_state;
   ClutterCrossingEvent crossing;
   ClutterTouchEvent touch;
+  ClutterProximityEvent proximity;
 };
 
 /**
diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c
index 5fc12c9..6c31eb2 100644
--- a/clutter/clutter-main.c
+++ b/clutter/clutter-main.c
@@ -2491,6 +2491,19 @@ _clutter_process_event_details (ClutterActor        *stage,
           break;
         }
 
+      case CLUTTER_PROXIMITY_IN:
+      case CLUTTER_PROXIMITY_OUT:
+        if (_clutter_event_process_filters (event))
+          break;
+
+        if (!clutter_actor_event (stage, event, TRUE))
+          {
+            /* and bubbling phase */
+            clutter_actor_event (stage, event, FALSE);
+          }
+
+        break;
+
       case CLUTTER_STAGE_STATE:
         /* fullscreen / focus - forward to stage */
         event->any.source = stage;
diff --git a/clutter/clutter-stage.c b/clutter/clutter-stage.c
index 9a6dfe1..3f5757a 100644
--- a/clutter/clutter-stage.c
+++ b/clutter/clutter-stage.c
@@ -930,7 +930,9 @@ _clutter_stage_queue_event (ClutterStage *stage,
    * event processing function
    */
   device = clutter_event_get_device (event);
-  if (device != NULL)
+  if (device != NULL &&
+      event->type != CLUTTER_PROXIMITY_IN &&
+      event->type != CLUTTER_PROXIMITY_OUT)
     {
       ClutterModifierType event_state = clutter_event_get_state (event);
       ClutterEventSequence *sequence = clutter_event_get_event_sequence (event);
diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt
index 5a4b4bb..e82ff25 100644
--- a/doc/reference/clutter/clutter-sections.txt
+++ b/doc/reference/clutter/clutter-sections.txt
@@ -1098,6 +1098,7 @@ ClutterScrollEvent
 ClutterStageStateEvent
 ClutterCrossingEvent
 ClutterTouchEvent
+ClutterProximityEvent
 ClutterEventSequence
 clutter_event_new
 clutter_event_copy


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