summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Mader <robert.mader@posteo.de>2022-10-25 21:16:41 +0200
committerRobert Mader <robert.mader@collabora.com>2023-01-06 13:53:08 +0100
commit74231c839c06a32f6a0ae61515a30b49c71a6661 (patch)
treecd098adfb33b78c4ebb79d1532d6b5855053a707
parentbf936fc7b112b9b180c12f818ce89c2d022ec903 (diff)
downloadmutter-74231c839c06a32f6a0ae61515a30b49c71a6661.tar.gz
feedback-actor: Disable direct scanout during lifetime
We only support feedback-actors, such as DnD-icons, in the compositing path at the moment. The approach is similar to how we handle certain shell elements. Implementations need to ensure no references to the object keep around longer that necessary. Arguably this should be replaced by a more robust and implicit actor hierachy detection in the direct scanout code at some point. Closes https://gitlab.gnome.org/GNOME/mutter/-/issues/2470 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2677> (cherry picked from commit 04655c8bffc2e9dd4842f344637022e66d7ebcf1)
-rw-r--r--src/compositor/meta-feedback-actor.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/compositor/meta-feedback-actor.c b/src/compositor/meta-feedback-actor.c
index 4b4bed78a..6daa8aeeb 100644
--- a/src/compositor/meta-feedback-actor.c
+++ b/src/compositor/meta-feedback-actor.c
@@ -59,6 +59,15 @@ meta_feedback_actor_constructed (GObject *object)
display = meta_get_display ();
feedback_group = meta_get_feedback_group_for_display (display);
clutter_actor_add_child (feedback_group, CLUTTER_ACTOR (object));
+ meta_disable_unredirect_for_display (display);
+}
+
+static void
+meta_feedback_actor_finalize (GObject *object)
+{
+ meta_enable_unredirect_for_display (meta_get_display ());
+
+ G_OBJECT_CLASS (meta_feedback_actor_parent_class)->finalize (object);
}
static void
@@ -128,6 +137,7 @@ meta_feedback_actor_class_init (MetaFeedbackActorClass *klass)
GParamSpec *pspec;
object_class->constructed = meta_feedback_actor_constructed;
+ object_class->finalize = meta_feedback_actor_finalize;
object_class->set_property = meta_feedback_actor_set_property;
object_class->get_property = meta_feedback_actor_get_property;