d334c13dbb
Signed-off-by: Mingi Sung <FiestaLake@protonmail.com>
47 lines
1.9 KiB
Diff
47 lines
1.9 KiB
Diff
Author: Jonas Dreßler <verdre@v0yd.nl>
|
|
Source: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2694
|
|
Editor: Mingi Sung <FiestaLake@protonmail.com>
|
|
Commit: c627b9c3c7fc7ce59a2696dd3012a08b18e6b1cb
|
|
Last Updated: 11/24/22 (Mutter 43.1+r1+gaccf532a2-2)
|
|
---
|
|
|
|
When a badly behaving ClutterActor implementation manages to invalidate
|
|
the allocation after the layout phase and before painting, we have no
|
|
idea where the actor should be painted without running the whole layout
|
|
machinery again.
|
|
|
|
For paint volumes in this case we pretend the actor covers the whole
|
|
stage and queue full-stage redraws. When updating stage-views, we're
|
|
also handling this case, but not in the most graceful way. Just like
|
|
with paint volumes, we should assume an actor without a valid allocation
|
|
is simply everywhere, so set priv->stage_views to all available stage
|
|
views in that case.
|
|
|
|
---
|
|
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
|
|
index 1dde8d94863b3ef3f309e2bc6ab8064aec2d4f7f..10a5e3203b393ec6bc6bed41b5f9ae58a2c16ac1 100644
|
|
--- a/clutter/clutter/clutter-actor.c
|
|
+++ b/clutter/clutter/clutter-actor.c
|
|
@@ -15463,18 +15463,19 @@ update_stage_views (ClutterActor *self)
|
|
ClutterStage *stage;
|
|
graphene_rect_t bounding_rect;
|
|
|
|
+ stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self));
|
|
+ g_return_if_fail (stage);
|
|
+
|
|
old_stage_views = g_steal_pointer (&priv->stage_views);
|
|
|
|
if (priv->needs_allocation)
|
|
{
|
|
g_warning ("Can't update stage views actor %s is on because it needs an "
|
|
"allocation.", _clutter_actor_get_debug_name (self));
|
|
+ priv->stage_views = g_list_copy (clutter_stage_peek_stage_views (stage));
|
|
goto out;
|
|
}
|
|
|
|
- stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self));
|
|
- g_return_if_fail (stage);
|
|
-
|
|
clutter_actor_get_transformed_extents (self, &bounding_rect);
|
|
|
|
if (bounding_rect.size.width == 0.0 ||
|