[mutter] clutter-actor: Add detail to captured-event
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter-actor: Add detail to captured-event
- Date: Sat, 29 Feb 2020 13:50:56 +0000 (UTC)
commit 73e3207a85c00cb8b930495462d3fdee5fd94f58
Author: Daniel van Vugt <daniel van vugt canonical com>
Date: Fri Jan 10 15:30:12 2020 +0800
clutter-actor: Add detail to captured-event
So that subscribers can choose the class of events they're interested in
and not be woken by everything else.
Needed by: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/925
Related to: https://gitlab.gnome.org/GNOME/mutter/issues/283
https://gitlab.gnome.org/GNOME/mutter/merge_requests/1000
clutter/clutter/clutter-actor.c | 96 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 93 insertions(+), 3 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 4964586a9..d35dffb02 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -1124,6 +1124,20 @@ static GQuark quark_actor_layout_info = 0;
static GQuark quark_actor_transform_info = 0;
static GQuark quark_actor_animation_info = 0;
+static GQuark quark_key = 0;
+static GQuark quark_motion = 0;
+static GQuark quark_pointer_focus = 0;
+static GQuark quark_button = 0;
+static GQuark quark_scroll = 0;
+static GQuark quark_stage = 0;
+static GQuark quark_destroy = 0;
+static GQuark quark_client = 0;
+static GQuark quark_delete = 0;
+static GQuark quark_touch = 0;
+static GQuark quark_touchpad = 0;
+static GQuark quark_proximity = 0;
+static GQuark quark_pad = 0;
+
G_DEFINE_TYPE_WITH_CODE (ClutterActor,
clutter_actor,
G_TYPE_INITIALLY_UNOWNED,
@@ -6545,6 +6559,20 @@ clutter_actor_class_init (ClutterActorClass *klass)
quark_actor_transform_info = g_quark_from_static_string ("-clutter-actor-transform-info");
quark_actor_animation_info = g_quark_from_static_string ("-clutter-actor-animation-info");
+ quark_key = g_quark_from_static_string ("key");
+ quark_motion = g_quark_from_static_string ("motion");
+ quark_pointer_focus = g_quark_from_static_string ("pointer-focus");
+ quark_button = g_quark_from_static_string ("button");
+ quark_scroll = g_quark_from_static_string ("scroll");
+ quark_stage = g_quark_from_static_string ("stage");
+ quark_destroy = g_quark_from_static_string ("destroy");
+ quark_client = g_quark_from_static_string ("client");
+ quark_delete = g_quark_from_static_string ("delete");
+ quark_touch = g_quark_from_static_string ("touch");
+ quark_touchpad = g_quark_from_static_string ("touchpad");
+ quark_proximity = g_quark_from_static_string ("proximity");
+ quark_pad = g_quark_from_static_string ("pad");
+
object_class->constructor = clutter_actor_constructor;
object_class->set_property = clutter_actor_set_property;
object_class->get_property = clutter_actor_get_property;
@@ -8580,7 +8608,7 @@ clutter_actor_class_init (ClutterActorClass *klass)
actor_signals[CAPTURED_EVENT] =
g_signal_new (I_("captured-event"),
G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
G_STRUCT_OFFSET (ClutterActorClass, captured_event),
_clutter_boolean_handled_accumulator, NULL,
_clutter_marshal_BOOLEAN__BOXED,
@@ -13890,8 +13918,70 @@ clutter_actor_event (ClutterActor *actor,
if (capture)
{
- g_signal_emit (actor, actor_signals[CAPTURED_EVENT], 0,
- event,
+ GQuark detail = 0;
+
+ switch (event->type)
+ {
+ case CLUTTER_NOTHING:
+ break;
+ case CLUTTER_KEY_PRESS:
+ case CLUTTER_KEY_RELEASE:
+ detail = quark_key;
+ break;
+ case CLUTTER_MOTION:
+ detail = quark_motion;
+ break;
+ case CLUTTER_ENTER:
+ case CLUTTER_LEAVE:
+ detail = quark_pointer_focus;
+ break;
+ case CLUTTER_BUTTON_PRESS:
+ case CLUTTER_BUTTON_RELEASE:
+ detail = quark_button;
+ break;
+ case CLUTTER_SCROLL:
+ detail = quark_scroll;
+ break;
+ case CLUTTER_STAGE_STATE:
+ detail = quark_stage;
+ break;
+ case CLUTTER_DESTROY_NOTIFY:
+ detail = quark_destroy;
+ break;
+ case CLUTTER_CLIENT_MESSAGE:
+ detail = quark_client;
+ break;
+ case CLUTTER_DELETE:
+ detail = quark_delete;
+ break;
+ case CLUTTER_TOUCH_BEGIN:
+ case CLUTTER_TOUCH_UPDATE:
+ case CLUTTER_TOUCH_END:
+ case CLUTTER_TOUCH_CANCEL:
+ detail = quark_touch;
+ break;
+ case CLUTTER_TOUCHPAD_PINCH:
+ case CLUTTER_TOUCHPAD_SWIPE:
+ detail = quark_touchpad;
+ break;
+ case CLUTTER_PROXIMITY_IN:
+ case CLUTTER_PROXIMITY_OUT:
+ detail = quark_proximity;
+ break;
+ case CLUTTER_PAD_BUTTON_PRESS:
+ case CLUTTER_PAD_BUTTON_RELEASE:
+ case CLUTTER_PAD_STRIP:
+ case CLUTTER_PAD_RING:
+ detail = quark_pad;
+ break;
+ case CLUTTER_EVENT_LAST: /* Just keep compiler warnings quiet */
+ break;
+ }
+
+ g_signal_emit (actor,
+ actor_signals[CAPTURED_EVENT],
+ detail,
+ event,
&retval);
goto out;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]