[mutter/wip/carlosg/grabs-pt1: 15/22] 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: 15/22] clutter: Propagate events only inside the grab
- Date: Fri, 26 Nov 2021 15:19:11 +0000 (UTC)
commit 465d101c0555707ef0c198d6500d3c5d6db1ed7a
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 771fd42365..2ca3f7f3ae 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -3745,3 +3745,15 @@ clutter_grab_dismiss (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 b45c50ccd7..fc90f69104 100644
--- a/clutter/clutter/clutter-stage.h
+++ b/clutter/clutter/clutter-stage.h
@@ -274,6 +274,9 @@ CLUTTER_EXPORT
ClutterGrab * clutter_stage_grab (ClutterStage *stage,
ClutterActor *actor);
+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]