[mutter/wip/carlosg/grabs-pt1: 36/42] clutter: Propagate events only inside the grab
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/grabs-pt1: 36/42] clutter: Propagate events only inside the grab
- Date: Fri, 19 Nov 2021 11:35:00 +0000 (UTC)
commit 7180f9ab161066e021e826da7b07dced6a50f768
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Oct 27 00:13:35 2021 +0200
clutter: Propagate events only inside the grab
The grab actor becomes the "root" of the events being handled, events
inside propagate normally, but become silenced when falling outside
the grab area.
clutter/clutter/clutter-main.c | 4 +++-
clutter/clutter/clutter-stage.c | 12 ++++++++++++
clutter/clutter/clutter-stage.h | 3 +++
3 files changed, 18 insertions(+), 1 deletion(-)
---
diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c
index 9dc010b415..98f64eeb6e 100644
--- a/clutter/clutter/clutter-main.c
+++ b/clutter/clutter/clutter-main.c
@@ -683,7 +683,9 @@ emit_event_chain (ClutterEvent *event)
return;
}
- _clutter_actor_handle_event (event->any.source, NULL, event);
+ _clutter_actor_handle_event (event->any.source,
+ clutter_stage_get_grab_actor (event->any.stage),
+ event);
}
/*
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 513aadf494..14d37f20da 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -3745,3 +3745,15 @@ clutter_ungrab (ClutterGrab *grab)
g_free (grab);
}
+
+ClutterActor *
+clutter_stage_get_grab_actor (ClutterStage *stage)
+{
+ ClutterStagePrivate *priv = stage->priv;
+
+ if (!priv->grabs)
+ return NULL;
+
+ /* Return active grab */
+ return priv->grabs->actor;
+}
diff --git a/clutter/clutter/clutter-stage.h b/clutter/clutter/clutter-stage.h
index efb788e70a..e9a9ab89bf 100644
--- a/clutter/clutter/clutter-stage.h
+++ b/clutter/clutter/clutter-stage.h
@@ -269,6 +269,9 @@ ClutterActor * clutter_stage_get_device_actor (ClutterStage *stage,
ClutterInputDevice *device,
ClutterEventSequence *sequence);
+CLUTTER_EXPORT
+ClutterActor * clutter_stage_get_grab_actor (ClutterStage *stage);
+
G_END_DECLS
#endif /* __CLUTTER_STAGE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]