From cbf3001bc2c43b3d9c0becde6b43e0f6b5474fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Sat, 11 Jul 2020 12:18:59 +0200 Subject: [PATCH] clutter/actor: Add private API to get whether we're painting unmapped Add new private API to ClutterActor, returning TRUE in case the actor is being painted while unmapped. This is useful for implementations of the paint() vfunc or for signal handlers of the "notify::mapped" signal. Use this API in CallyActor to properly detect "notify::mapped" emissions while painting unmapped, this fixes detecting the case where painting-unmapped is used for screencasting. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1366 --- clutter/clutter/cally/cally-actor.c | 4 +++- clutter/clutter/clutter-actor-private.h | 2 ++ clutter/clutter/clutter-actor.c | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/clutter/clutter/cally/cally-actor.c b/clutter/clutter/cally/cally-actor.c index 44f4f64bb..2c4c1f34d 100644 --- a/clutter/clutter/cally/cally-actor.c +++ b/clutter/clutter/cally/cally-actor.c @@ -72,6 +72,8 @@ #include #include +#include "clutter/clutter-actor-private.h" + #ifdef CLUTTER_WINDOWING_X11 #include #endif @@ -972,7 +974,7 @@ cally_actor_real_notify_clutter (GObject *obj, * paint it; we don't want this to generate an ATK * state change */ - if (clutter_actor_is_in_clone_paint (actor)) + if (clutter_actor_is_painting_unmapped (actor)) return; state = ATK_STATE_SHOWING; diff --git a/clutter/clutter/clutter-actor-private.h b/clutter/clutter/clutter-actor-private.h index dda39e4fd..5ebefbbeb 100644 --- a/clutter/clutter/clutter-actor-private.h +++ b/clutter/clutter/clutter-actor-private.h @@ -293,6 +293,8 @@ void clutter_actor_update_stage_views (ClutterActor *self, void clutter_actor_queue_immediate_relayout (ClutterActor *self); +gboolean clutter_actor_is_painting_unmapped (ClutterActor *self); + G_END_DECLS #endif /* __CLUTTER_ACTOR_PRIVATE_H__ */ diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index ec8537c9c..4f95f2e1e 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -14921,6 +14921,14 @@ clutter_actor_is_in_clone_paint (ClutterActor *self) return FALSE; } +gboolean +clutter_actor_is_painting_unmapped (ClutterActor *self) +{ + g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE); + + return self->priv->unmapped_paint_branch_counter > 0; +} + gboolean clutter_actor_has_damage (ClutterActor *actor) {