mutter/0001-backends-Update-stage-views-and-stage-dimension-from.patch
Jonas Ådahl efbeeeb09a Backport fix for software cursors artifacts
Resolves: RHEL-58079
Resolves: RHEL-81897
2025-03-12 23:36:12 +08:00

179 lines
7.0 KiB
Diff

From cedeee4eb0c252d2450b7174b35f47ff5c27fc8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 12 Mar 2025 11:35:17 +0800
Subject: [PATCH 1/2] backends: Update stage views and stage dimension from
MetaStage
This reduces the amount of code duplication between the native and
nested backend.
---
src/backends/meta-stage-impl-private.h | 2 ++
src/backends/meta-stage-impl.c | 12 ++++++++++++
src/backends/meta-stage-private.h | 2 ++
src/backends/meta-stage.c | 16 ++++++++++++++++
src/backends/native/meta-backend-native.c | 5 +----
src/backends/native/meta-stage-native.c | 12 ------------
src/backends/native/meta-stage-native.h | 2 --
.../x11/nested/meta-backend-x11-nested.c | 11 ++---------
8 files changed, 35 insertions(+), 27 deletions(-)
diff --git a/src/backends/meta-stage-impl-private.h b/src/backends/meta-stage-impl-private.h
index 766c283488..93b8bbad2f 100644
--- a/src/backends/meta-stage-impl-private.h
+++ b/src/backends/meta-stage-impl-private.h
@@ -64,4 +64,6 @@ MetaBackend * meta_stage_impl_get_backend (MetaStageImpl *stage_impl);
void meta_stage_impl_add_onscreen_frame_info (MetaStageImpl *stage_impl,
ClutterStageView *view);
+void meta_stage_impl_rebuild_views (MetaStageImpl *stage_impl);
+
G_END_DECLS
diff --git a/src/backends/meta-stage-impl.c b/src/backends/meta-stage-impl.c
index 945e95ff2b..804d77f25d 100644
--- a/src/backends/meta-stage-impl.c
+++ b/src/backends/meta-stage-impl.c
@@ -34,6 +34,7 @@
#include <stdlib.h>
#include <math.h>
+#include "backends/meta-renderer.h"
#include "backends/meta-stage-view-private.h"
#include "clutter/clutter-mutter.h"
#include "cogl/cogl.h"
@@ -907,3 +908,14 @@ meta_stage_impl_get_backend (MetaStageImpl *stage_impl)
return priv->backend;
}
+
+void
+meta_stage_impl_rebuild_views (MetaStageImpl *stage_impl)
+{
+ MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
+ MetaRenderer *renderer = meta_backend_get_renderer (backend);
+ ClutterActor *stage = meta_backend_get_stage (backend);
+
+ meta_renderer_rebuild_views (renderer);
+ clutter_stage_clear_stage_views (CLUTTER_STAGE (stage));
+}
diff --git a/src/backends/meta-stage-private.h b/src/backends/meta-stage-private.h
index 5546cc8ccf..e59ea35c6c 100644
--- a/src/backends/meta-stage-private.h
+++ b/src/backends/meta-stage-private.h
@@ -68,4 +68,6 @@ META_EXPORT_TEST
void meta_stage_remove_watch (MetaStage *stage,
MetaStageWatch *watch);
+void meta_stage_rebuild_views (MetaStage *stage);
+
G_END_DECLS
diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c
index 96224a03b5..32f681c8c5 100644
--- a/src/backends/meta-stage.c
+++ b/src/backends/meta-stage.c
@@ -494,3 +494,19 @@ meta_stage_remove_watch (MetaStage *stage,
g_assert (removed);
}
+
+void
+meta_stage_rebuild_views (MetaStage *stage)
+{
+ ClutterStageWindow *stage_window =
+ _clutter_stage_get_window (CLUTTER_STAGE (stage));
+ MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
+ MetaMonitorManager *monitor_manager =
+ meta_backend_get_monitor_manager (stage->backend);
+ int width, height;
+
+ meta_stage_impl_rebuild_views (stage_impl);
+
+ meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
+ clutter_actor_set_size (CLUTTER_ACTOR (stage), width, height);
+}
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index ee02b2783a..85bfeb7810 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -399,14 +399,11 @@ static void
meta_backend_native_update_stage (MetaBackend *backend)
{
ClutterActor *stage = meta_backend_get_stage (backend);
- ClutterStageWindow *stage_window =
- _clutter_stage_get_window (CLUTTER_STAGE (stage));
- MetaStageNative *stage_native = META_STAGE_NATIVE (stage_window);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
int width, height;
- meta_stage_native_rebuild_views (stage_native);
+ meta_stage_rebuild_views (META_STAGE (stage));
meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
clutter_actor_set_size (stage, width, height);
diff --git a/src/backends/native/meta-stage-native.c b/src/backends/native/meta-stage-native.c
index 80d869b920..34849e5b9c 100644
--- a/src/backends/native/meta-stage-native.c
+++ b/src/backends/native/meta-stage-native.c
@@ -54,18 +54,6 @@ G_DEFINE_TYPE_WITH_CODE (MetaStageNative, meta_stage_native,
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_STAGE_WINDOW,
clutter_stage_window_iface_init))
-void
-meta_stage_native_rebuild_views (MetaStageNative *stage_native)
-{
- MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_native);
- MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
- MetaRenderer *renderer = meta_backend_get_renderer (backend);
- ClutterActor *stage = meta_backend_get_stage (backend);
-
- meta_renderer_rebuild_views (renderer);
- clutter_stage_clear_stage_views (CLUTTER_STAGE (stage));
-}
-
static gboolean
meta_stage_native_can_clip_redraws (ClutterStageWindow *stage_window)
{
diff --git a/src/backends/native/meta-stage-native.h b/src/backends/native/meta-stage-native.h
index 18ce3b14bb..cf081a32ea 100644
--- a/src/backends/native/meta-stage-native.h
+++ b/src/backends/native/meta-stage-native.h
@@ -28,5 +28,3 @@
#define META_TYPE_STAGE_NATIVE (meta_stage_native_get_type ())
G_DECLARE_FINAL_TYPE (MetaStageNative, meta_stage_native,
META, STAGE_NATIVE, MetaStageImpl)
-
-void meta_stage_native_rebuild_views (MetaStageNative *stage_native);
diff --git a/src/backends/x11/nested/meta-backend-x11-nested.c b/src/backends/x11/nested/meta-backend-x11-nested.c
index ec82f1d1a9..09d2a91cb6 100644
--- a/src/backends/x11/nested/meta-backend-x11-nested.c
+++ b/src/backends/x11/nested/meta-backend-x11-nested.c
@@ -21,6 +21,7 @@
#include "backends/meta-input-settings-dummy.h"
#include "backends/meta-monitor-manager-dummy.h"
+#include "backends/meta-stage-private.h"
#include "backends/x11/nested/meta-backend-x11-nested.h"
#include "backends/x11/nested/meta-cursor-renderer-x11-nested.h"
#include "backends/x11/nested/meta-renderer-x11-nested.h"
@@ -107,16 +108,8 @@ static void
meta_backend_x11_nested_update_stage (MetaBackend *backend)
{
ClutterActor *stage = meta_backend_get_stage (backend);
- MetaRenderer *renderer = meta_backend_get_renderer (backend);
- MetaMonitorManager *monitor_manager =
- meta_backend_get_monitor_manager (backend);
- int width, height;
- meta_renderer_rebuild_views (renderer);
- clutter_stage_clear_stage_views (CLUTTER_STAGE (stage));
-
- meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
- clutter_actor_set_size (stage, width, height);
+ meta_stage_rebuild_views (META_STAGE (stage));
}
static void
--
2.44.0.501.g19981daefd.dirty