mutter/clutter-actor-Show-on-all-stage-views-when-actors-ha.patch
Dominique Leuenberger d5604860fc Accepting request 1038000 from home:yfjiang:branches:GNOME:Factory
- Fix window freezes when maximized on Xorg (boo#1205714, 
  glgo#GNOME/mutter!2694, glgo#GNOME/gnome-shell#6054)
  * add clutter-actor-Show-on-all-stage-views-when-actors-ha.patch

OBS-URL: https://build.opensuse.org/request/show/1038000
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/mutter?expand=0&rev=424
2022-11-25 07:07:20 +00:00

54 lines
2.0 KiB
Diff

From cc7752fc65db0d1c1d70def406f81c9733cce6a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Mon, 14 Nov 2022 00:14:05 +0100
Subject: [PATCH] clutter/actor: Show on all stage-views when actors have no
allocation
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.
Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6054
---
clutter/clutter/clutter-actor.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 95cfa65..dd96858 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -15459,18 +15459,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 ||
--
2.38.1