[mutter/wip/carlosg/grabs-pt1: 52/59] clutter: Propagate events only inside the grab
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/grabs-pt1: 52/59] clutter: Propagate events only inside the grab
- Date: Tue, 11 Jan 2022 16:13:45 +0000 (UTC)
commit ec3b8fe85b56f9b791506d5bd9b6dcf4d1b49250
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.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2068>
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 132576e67c..f80fbae9be 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 ce44b3bcca..fd280dbee8 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -3846,3 +3846,15 @@ clutter_grab_dismiss (ClutterGrab *grab)
g_free (grab);
}
+
+ClutterActor *
+clutter_stage_get_grab_actor (ClutterStage *stage)
+{
+ ClutterStagePrivate *priv = stage->priv;
+
+ if (!priv->topmost_grab)
+ return NULL;
+
+ /* Return active grab */
+ return priv->topmost_grab->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]