import Oracle_OSS mutter-49.4-4.el10_2
This commit is contained in:
parent
36c3532647
commit
22da44a45e
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
||||
SOURCES/mutter-47.5.tar.xz
|
||||
meson-1.5.0.tar.gz
|
||||
mutter-49.4.tar.xz
|
||||
|
||||
@ -1 +0,0 @@
|
||||
e4dbc506016b0cc64e15540709c73c162f1d14fb SOURCES/mutter-47.5.tar.xz
|
||||
310
0001-Revert-background-Port-from-gdk-pixbuf-to-glycin.patch
Normal file
310
0001-Revert-background-Port-from-gdk-pixbuf-to-glycin.patch
Normal file
@ -0,0 +1,310 @@
|
||||
From b8383cd5dae36505f4ad1aea99cb672b7837187b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 5 Nov 2025 17:10:15 +0100
|
||||
Subject: [PATCH] Revert "background: Port from gdk-pixbuf to glycin"
|
||||
|
||||
This reverts commit 34d66f86d941dc47101f1f69c54122913442dee2.
|
||||
---
|
||||
meson.build | 4 +-
|
||||
src/compositor/meta-background-image.c | 166 ++++++-------------------
|
||||
src/meson.build | 2 +-
|
||||
3 files changed, 38 insertions(+), 134 deletions(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 3957cc0d7f..659e8b3dc3 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -21,7 +21,7 @@ gi_req = '>= 0.9.5'
|
||||
graphene_req = '>= 1.10.2'
|
||||
gtk3_req = '>= 3.19.8'
|
||||
gtk4_req = '>= 4.14.0'
|
||||
-glycin_req = '>= 2.0.beta.2'
|
||||
+gdk_pixbuf_req = '>= 2.0'
|
||||
pango_req = '>= 1.46.0'
|
||||
cairo_req = '>= 1.10.0'
|
||||
pangocairo_req = '>= 1.20'
|
||||
@@ -117,7 +117,7 @@ subproject('gvdb')
|
||||
|
||||
m_dep = cc.find_library('m', required: true)
|
||||
graphene_dep = dependency('graphene-gobject-1.0', version: graphene_req)
|
||||
-glycin_dep = dependency('glycin-2', version: glycin_req)
|
||||
+gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req)
|
||||
cairo_dep = dependency('cairo', version: cairo_req)
|
||||
pixman_dep = dependency('pixman-1', version: pixman_req)
|
||||
gsettings_desktop_schemas_dep = dependency('gsettings-desktop-schemas',
|
||||
diff --git a/src/compositor/meta-background-image.c b/src/compositor/meta-background-image.c
|
||||
index 6cf9187d56..e5c879c892 100644
|
||||
--- a/src/compositor/meta-background-image.c
|
||||
+++ b/src/compositor/meta-background-image.c
|
||||
@@ -20,11 +20,10 @@
|
||||
|
||||
#include "compositor/meta-background-image-private.h"
|
||||
|
||||
-#include <glycin.h>
|
||||
+#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#include <gio/gio.h>
|
||||
|
||||
#include "clutter/clutter.h"
|
||||
-#include "clutter/clutter-backend-private.h"
|
||||
#include "compositor/cogl-utils.h"
|
||||
|
||||
enum
|
||||
@@ -63,7 +62,6 @@ struct _MetaBackgroundImage
|
||||
gboolean in_cache;
|
||||
gboolean loaded;
|
||||
CoglTexture *texture;
|
||||
- ClutterColorState *color_state;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaBackgroundImageCache, meta_background_image_cache, G_TYPE_OBJECT);
|
||||
@@ -117,111 +115,33 @@ meta_background_image_cache_get_default (void)
|
||||
return cache;
|
||||
}
|
||||
|
||||
-static CoglPixelFormat
|
||||
-gly_memory_format_to_cogl (GlyMemoryFormat format)
|
||||
-{
|
||||
- switch ((guint) format)
|
||||
- {
|
||||
- case GLY_MEMORY_B8G8R8A8_PREMULTIPLIED:
|
||||
- return COGL_PIXEL_FORMAT_BGRA_8888_PRE;
|
||||
- case GLY_MEMORY_A8R8G8B8_PREMULTIPLIED:
|
||||
- return COGL_PIXEL_FORMAT_ARGB_8888_PRE;
|
||||
- case GLY_MEMORY_R8G8B8A8_PREMULTIPLIED:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_8888_PRE;
|
||||
- case GLY_MEMORY_B8G8R8A8:
|
||||
- return COGL_PIXEL_FORMAT_BGRA_8888;
|
||||
- case GLY_MEMORY_A8R8G8B8:
|
||||
- return COGL_PIXEL_FORMAT_ARGB_8888;
|
||||
- case GLY_MEMORY_R8G8B8A8:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_8888;
|
||||
- case GLY_MEMORY_A8B8G8R8:
|
||||
- return COGL_PIXEL_FORMAT_ABGR_8888;
|
||||
- case GLY_MEMORY_R8G8B8:
|
||||
- return COGL_PIXEL_FORMAT_RGB_888;
|
||||
- case GLY_MEMORY_B8G8R8:
|
||||
- return COGL_PIXEL_FORMAT_BGR_888;
|
||||
- case GLY_MEMORY_R16G16B16A16_PREMULTIPLIED:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_16161616_PRE;
|
||||
- case GLY_MEMORY_R16G16B16A16:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_16161616;
|
||||
- case GLY_MEMORY_R16G16B16A16_FLOAT:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_FP_16161616;
|
||||
- case GLY_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_FP_32323232_PRE;
|
||||
- case GLY_MEMORY_R32G32B32A32_FLOAT:
|
||||
- return COGL_PIXEL_FORMAT_RGBA_FP_32323232;
|
||||
- default:
|
||||
- g_assert_not_reached ();
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static GlyMemoryFormatSelection
|
||||
-glycin_supported_memory_formats (void)
|
||||
-{
|
||||
- return GLY_MEMORY_SELECTION_B8G8R8A8_PREMULTIPLIED |
|
||||
- GLY_MEMORY_SELECTION_A8R8G8B8_PREMULTIPLIED |
|
||||
- GLY_MEMORY_SELECTION_R8G8B8A8_PREMULTIPLIED |
|
||||
- GLY_MEMORY_SELECTION_B8G8R8A8 |
|
||||
- GLY_MEMORY_SELECTION_A8R8G8B8 |
|
||||
- GLY_MEMORY_SELECTION_R8G8B8A8 |
|
||||
- GLY_MEMORY_SELECTION_A8B8G8R8 |
|
||||
- GLY_MEMORY_SELECTION_R8G8B8 |
|
||||
- GLY_MEMORY_SELECTION_B8G8R8 |
|
||||
- GLY_MEMORY_SELECTION_R16G16B16A16_PREMULTIPLIED |
|
||||
- GLY_MEMORY_SELECTION_R16G16B16A16 |
|
||||
- GLY_MEMORY_SELECTION_R16G16B16A16_FLOAT |
|
||||
- GLY_MEMORY_SELECTION_R32G32B32A32_FLOAT_PREMULTIPLIED |
|
||||
- GLY_MEMORY_SELECTION_R32G32B32A32_FLOAT;
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-gly_cicp_to_clutter (const GlyCicp *gly_cicp,
|
||||
- ClutterCicp *clutter_cicp)
|
||||
-{
|
||||
- clutter_cicp->primaries = (ClutterCicpPrimaries) gly_cicp->color_primaries;
|
||||
- clutter_cicp->transfer = (ClutterCicpTransfer) gly_cicp->transfer_characteristics;
|
||||
- clutter_cicp->matrix_coefficients = gly_cicp->matrix_coefficients;
|
||||
- clutter_cicp->video_full_range_flag = gly_cicp->video_full_range_flag;
|
||||
-}
|
||||
-
|
||||
static void
|
||||
load_file (GTask *task,
|
||||
- MetaBackgroundImage *source,
|
||||
+ MetaBackgroundImage *image,
|
||||
gpointer task_data,
|
||||
GCancellable *cancellable)
|
||||
{
|
||||
- g_autoptr (GFileInputStream) stream = NULL;
|
||||
- g_autoptr (GlyLoader) loader = NULL;
|
||||
- g_autoptr (GlyImage) image = NULL;
|
||||
- GlyFrame *frame;
|
||||
GError *error = NULL;
|
||||
+ GdkPixbuf *pixbuf;
|
||||
+ GFileInputStream *stream;
|
||||
|
||||
- stream = g_file_read (source->file, NULL, &error);
|
||||
+ stream = g_file_read (image->file, NULL, &error);
|
||||
if (stream == NULL)
|
||||
{
|
||||
g_task_return_error (task, error);
|
||||
return;
|
||||
}
|
||||
|
||||
- loader = gly_loader_new_for_stream (G_INPUT_STREAM (stream));
|
||||
-
|
||||
- gly_loader_set_accepted_memory_formats (loader, glycin_supported_memory_formats ());
|
||||
-
|
||||
- image = gly_loader_load (loader, &error);
|
||||
- if (!image)
|
||||
- {
|
||||
- g_task_return_error (task, error);
|
||||
- return;
|
||||
- }
|
||||
+ pixbuf = gdk_pixbuf_new_from_stream (G_INPUT_STREAM (stream), NULL, &error);
|
||||
+ g_object_unref (stream);
|
||||
|
||||
- frame = gly_image_next_frame (image, &error);
|
||||
- if (!frame)
|
||||
+ if (pixbuf == NULL)
|
||||
{
|
||||
g_task_return_error (task, error);
|
||||
return;
|
||||
}
|
||||
|
||||
- g_task_return_pointer (task, frame, (GDestroyNotify) g_object_unref);
|
||||
+ g_task_return_pointer (task, pixbuf, (GDestroyNotify) g_object_unref);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -236,16 +156,15 @@ file_loaded (GObject *source_object,
|
||||
g_autoptr (GError) local_error = NULL;
|
||||
GTask *task;
|
||||
CoglTexture *texture;
|
||||
- g_autoptr (GlyFrame) frame = NULL;
|
||||
+ GdkPixbuf *pixbuf, *rotated;
|
||||
int width, height, row_stride;
|
||||
- GlyMemoryFormat format;
|
||||
- g_autoptr (GlyCicp) cicp = NULL;
|
||||
- GBytes *bytes;
|
||||
+ guchar *pixels;
|
||||
+ gboolean has_alpha;
|
||||
|
||||
task = G_TASK (result);
|
||||
- frame = g_task_propagate_pointer (task, &error);
|
||||
+ pixbuf = g_task_propagate_pointer (task, &error);
|
||||
|
||||
- if (frame == NULL)
|
||||
+ if (pixbuf == NULL)
|
||||
{
|
||||
char *uri = g_file_get_uri (image->file);
|
||||
g_warning ("Failed to load background '%s': %s",
|
||||
@@ -254,23 +173,27 @@ file_loaded (GObject *source_object,
|
||||
goto out;
|
||||
}
|
||||
|
||||
- width = gly_frame_get_width (frame);
|
||||
- height = gly_frame_get_height (frame);
|
||||
- row_stride = gly_frame_get_stride (frame);
|
||||
- bytes = gly_frame_get_buf_bytes (frame);
|
||||
- format = gly_frame_get_memory_format (frame);
|
||||
- cicp = gly_frame_get_color_cicp (frame);
|
||||
+ rotated = gdk_pixbuf_apply_embedded_orientation (pixbuf);
|
||||
+ if (rotated != NULL)
|
||||
+ {
|
||||
+ g_object_unref (pixbuf);
|
||||
+ pixbuf = rotated;
|
||||
+ }
|
||||
+
|
||||
+ width = gdk_pixbuf_get_width (pixbuf);
|
||||
+ height = gdk_pixbuf_get_height (pixbuf);
|
||||
+ row_stride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
|
||||
+ has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
|
||||
|
||||
texture = meta_create_texture (width, height, ctx,
|
||||
- gly_memory_format_has_alpha (format)
|
||||
- ? COGL_TEXTURE_COMPONENTS_RGBA
|
||||
- : COGL_TEXTURE_COMPONENTS_RGB,
|
||||
+ has_alpha ? COGL_TEXTURE_COMPONENTS_RGBA : COGL_TEXTURE_COMPONENTS_RGB,
|
||||
META_TEXTURE_ALLOW_SLICING);
|
||||
|
||||
if (!cogl_texture_set_data (texture,
|
||||
- gly_memory_format_to_cogl (format),
|
||||
+ has_alpha ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
|
||||
row_stride,
|
||||
- g_bytes_get_data (bytes, NULL), 0,
|
||||
+ pixels, 0,
|
||||
&local_error))
|
||||
{
|
||||
g_warning ("Failed to create texture for background: %s",
|
||||
@@ -280,28 +203,10 @@ file_loaded (GObject *source_object,
|
||||
|
||||
image->texture = texture;
|
||||
|
||||
- if (cicp)
|
||||
- {
|
||||
- ClutterCicp clutter_cicp;
|
||||
- ClutterBackend *clutter_backend = clutter_get_default_backend ();
|
||||
- ClutterContext *clutter_context = clutter_backend->context;
|
||||
- g_autoptr (GError) local_error2 = NULL;
|
||||
-
|
||||
- gly_cicp_to_clutter (cicp, &clutter_cicp);
|
||||
-
|
||||
- image->color_state =
|
||||
- clutter_color_state_params_new_from_cicp (clutter_context,
|
||||
- &clutter_cicp,
|
||||
- &local_error2);
|
||||
- if (local_error2)
|
||||
- g_warning ("%s", local_error2->message);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- image->color_state = NULL;
|
||||
- }
|
||||
-
|
||||
out:
|
||||
+ if (pixbuf != NULL)
|
||||
+ g_object_unref (pixbuf);
|
||||
+
|
||||
image->loaded = TRUE;
|
||||
g_signal_emit (image, signals[LOADED], 0);
|
||||
}
|
||||
@@ -395,8 +300,6 @@ meta_background_image_finalize (GObject *object)
|
||||
if (image->file)
|
||||
g_object_unref (image->file);
|
||||
|
||||
- g_clear_object (&image->color_state);
|
||||
-
|
||||
G_OBJECT_CLASS (meta_background_image_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
@@ -464,9 +367,10 @@ meta_background_image_get_texture (MetaBackgroundImage *image)
|
||||
}
|
||||
|
||||
ClutterColorState *
|
||||
-meta_background_image_get_color_state (MetaBackgroundImage *image)
|
||||
+meta_background_image_get_color_state (MetaBackgroundImage *image,
|
||||
+ ClutterContext *ctx)
|
||||
{
|
||||
g_return_val_if_fail (META_IS_BACKGROUND_IMAGE (image), NULL);
|
||||
|
||||
- return image->color_state;
|
||||
+ return NULL;
|
||||
}
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 508c3416da..c36efc3a1e 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -25,7 +25,7 @@ mutter_pkg_private_deps = [
|
||||
gmodule_no_export_dep,
|
||||
gnome_settings_daemon_dep,
|
||||
xkbcommon_dep,
|
||||
- glycin_dep,
|
||||
+ gdk_pixbuf_dep,
|
||||
libeis_dep,
|
||||
libdisplay_info_dep,
|
||||
]
|
||||
--
|
||||
2.51.1
|
||||
|
||||
211
0001-Revert-mdk-Use-PipeWire-damage-region-for-minimizing.patch
Normal file
211
0001-Revert-mdk-Use-PipeWire-damage-region-for-minimizing.patch
Normal file
@ -0,0 +1,211 @@
|
||||
From 24203b9306d75c3209969a6fdbb363afa51e15fd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Fri, 13 Feb 2026 11:20:51 +0100
|
||||
Subject: [PATCH] Revert "mdk: Use PipeWire damage region for minimizing
|
||||
redraws"
|
||||
|
||||
This reverts commit fc337eb0b81740388f6e4496c87dbd4b3a578439.
|
||||
---
|
||||
mdk/mdk-stream.c | 117 ++++-------------------------------------------
|
||||
1 file changed, 9 insertions(+), 108 deletions(-)
|
||||
|
||||
diff --git a/mdk/mdk-stream.c b/mdk/mdk-stream.c
|
||||
index 979f89b834..96b31ea34f 100644
|
||||
--- a/mdk/mdk-stream.c
|
||||
+++ b/mdk/mdk-stream.c
|
||||
@@ -396,8 +396,7 @@ on_stream_param_changed (void *user_data,
|
||||
MdkStream *stream = MDK_STREAM (user_data);
|
||||
uint8_t params_buffer[1024];
|
||||
struct spa_pod_builder pod_builder;
|
||||
- const struct spa_pod *params[4];
|
||||
- const size_t meta_region_size = sizeof (struct spa_meta_region);
|
||||
+ const struct spa_pod *params[3];
|
||||
int result;
|
||||
|
||||
if (!format || id != SPA_PARAM_Format)
|
||||
@@ -453,15 +452,6 @@ on_stream_param_changed (void *user_data,
|
||||
CURSOR_META_SIZE (384, 384)),
|
||||
0);
|
||||
|
||||
- params[3] = spa_pod_builder_add_object (
|
||||
- &pod_builder,
|
||||
- SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
|
||||
- SPA_PARAM_META_type, SPA_POD_Id (SPA_META_VideoDamage),
|
||||
- SPA_PARAM_META_size, SPA_POD_CHOICE_RANGE_Int (meta_region_size * 32,
|
||||
- meta_region_size * 1,
|
||||
- meta_region_size * 32),
|
||||
- 0);
|
||||
-
|
||||
pw_stream_update_params (stream->pipewire_stream,
|
||||
params, G_N_ELEMENTS (params));
|
||||
}
|
||||
@@ -547,60 +537,6 @@ read_cursor_metadata (MdkStream *stream,
|
||||
}
|
||||
}
|
||||
|
||||
-static cairo_region_t *
|
||||
-read_damage_metadata (MdkStream *stream,
|
||||
- struct spa_buffer *spa_buffer)
|
||||
-{
|
||||
- struct spa_meta *video_damage;
|
||||
- struct spa_meta_region *meta_region;
|
||||
- g_autofree cairo_rectangle_int_t *cairo_rects = NULL;
|
||||
- int num_rects = 0;
|
||||
-
|
||||
- video_damage = spa_buffer_find_meta (spa_buffer, SPA_META_VideoDamage);
|
||||
- if (!video_damage)
|
||||
- return NULL;
|
||||
-
|
||||
- meta_region = spa_meta_first (video_damage);
|
||||
- if (!meta_region)
|
||||
- return NULL;
|
||||
-
|
||||
- spa_meta_for_each (meta_region, video_damage)
|
||||
- {
|
||||
- if (!spa_meta_region_is_valid (meta_region))
|
||||
- break;
|
||||
-
|
||||
- num_rects++;
|
||||
- }
|
||||
-
|
||||
- if (!num_rects)
|
||||
- return NULL;
|
||||
-
|
||||
- g_debug ("Stream has damage with %d rectangles", num_rects);
|
||||
-
|
||||
- cairo_rects = g_new (cairo_rectangle_int_t, num_rects);
|
||||
- num_rects = 0;
|
||||
- spa_meta_for_each (meta_region, video_damage)
|
||||
- {
|
||||
- if (!spa_meta_region_is_valid (meta_region))
|
||||
- break;
|
||||
-
|
||||
- g_debug ("Stream damage rectangle %d: %ux%u +%d+%d",
|
||||
- num_rects,
|
||||
- meta_region->region.size.width,
|
||||
- meta_region->region.size.height,
|
||||
- meta_region->region.position.x,
|
||||
- meta_region->region.position.y);
|
||||
-
|
||||
- cairo_rects[num_rects].x = meta_region->region.position.x;
|
||||
- cairo_rects[num_rects].y = meta_region->region.position.y;
|
||||
- cairo_rects[num_rects].width = meta_region->region.size.width;
|
||||
- cairo_rects[num_rects].height = meta_region->region.size.height;
|
||||
- num_rects++;
|
||||
- }
|
||||
-
|
||||
- return cairo_region_create_rectangles (cairo_rects, num_rects);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
on_stream_process (void *user_data)
|
||||
{
|
||||
@@ -609,7 +545,6 @@ on_stream_process (void *user_data)
|
||||
struct pw_buffer *buffer = NULL;
|
||||
struct spa_buffer *spa_buffer;
|
||||
struct spa_meta_header *spa_header;
|
||||
- cairo_region_t *damage_region = NULL;
|
||||
gboolean hold_buffer = FALSE;
|
||||
gboolean has_buffer;
|
||||
uint32_t drm_format;
|
||||
@@ -634,13 +569,11 @@ on_stream_process (void *user_data)
|
||||
if (!has_buffer)
|
||||
goto read_metadata;
|
||||
|
||||
- damage_region = read_damage_metadata (stream, spa_buffer);
|
||||
-
|
||||
if (spa_buffer->datas[0].type == SPA_DATA_DmaBuf)
|
||||
{
|
||||
g_autoptr (GdkDmabufTextureBuilder) builder = NULL;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
unsigned int i;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
|
||||
if (!spa_pixel_format_to_drm_format (stream->format.info.raw.format,
|
||||
&drm_format))
|
||||
@@ -671,13 +604,6 @@ on_stream_process (void *user_data)
|
||||
gdk_dmabuf_texture_builder_set_stride (builder, i, spa_buffer->datas[i].chunk->stride);
|
||||
}
|
||||
|
||||
- if (GDK_IS_TEXTURE (stream->paintable))
|
||||
- {
|
||||
- gdk_dmabuf_texture_builder_set_update_region (builder, damage_region);
|
||||
- gdk_dmabuf_texture_builder_set_update_texture (builder,
|
||||
- GDK_TEXTURE (stream->paintable));
|
||||
- }
|
||||
-
|
||||
g_clear_object (&stream->paintable);
|
||||
stream->paintable =
|
||||
GDK_PAINTABLE (gdk_dmabuf_texture_builder_build (builder,
|
||||
@@ -703,10 +629,9 @@ on_stream_process (void *user_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
- g_autoptr (GdkMemoryTextureBuilder) builder = NULL;
|
||||
+ g_autoptr (GdkTexture) texture = NULL;
|
||||
g_autoptr (GBytes) bytes = NULL;
|
||||
GdkMemoryFormat gdk_format;
|
||||
- unsigned int i;
|
||||
uint8_t *map;
|
||||
void *data;
|
||||
uint32_t bpp;
|
||||
@@ -721,29 +646,6 @@ on_stream_process (void *user_data)
|
||||
goto read_metadata;
|
||||
}
|
||||
|
||||
- builder = gdk_memory_texture_builder_new ();
|
||||
- gdk_memory_texture_builder_set_width (builder,
|
||||
- stream->format.info.raw.size.width);
|
||||
- gdk_memory_texture_builder_set_height (builder,
|
||||
- stream->format.info.raw.size.height);
|
||||
- gdk_memory_texture_builder_set_format (builder,
|
||||
- gdk_format);
|
||||
-
|
||||
- for (i = 0; i < spa_buffer->n_datas; i++)
|
||||
- {
|
||||
- gdk_memory_texture_builder_set_offset (builder, i,
|
||||
- spa_buffer->datas[i].chunk->offset);
|
||||
- gdk_memory_texture_builder_set_stride_for_plane (builder, i,
|
||||
- spa_buffer->datas[i].chunk->stride);
|
||||
- }
|
||||
-
|
||||
- if (GDK_IS_TEXTURE (stream->paintable))
|
||||
- {
|
||||
- gdk_memory_texture_builder_set_update_region (builder, damage_region);
|
||||
- gdk_memory_texture_builder_set_update_texture (builder,
|
||||
- GDK_TEXTURE (stream->paintable));
|
||||
- }
|
||||
-
|
||||
size = spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset;
|
||||
|
||||
map = mmap (NULL, size, PROT_READ, MAP_PRIVATE, spa_buffer->datas[0].fd, 0);
|
||||
@@ -756,11 +658,12 @@ on_stream_process (void *user_data)
|
||||
|
||||
bytes = g_bytes_new (data, size);
|
||||
|
||||
- gdk_memory_texture_builder_set_bytes (builder, bytes);
|
||||
-
|
||||
- g_clear_object (&stream->paintable);
|
||||
- stream->paintable =
|
||||
- GDK_PAINTABLE (gdk_memory_texture_builder_build (builder));
|
||||
+ texture = gdk_memory_texture_new (stream->format.info.raw.size.width,
|
||||
+ stream->format.info.raw.size.height,
|
||||
+ gdk_format,
|
||||
+ bytes,
|
||||
+ spa_buffer->datas[0].chunk->stride);
|
||||
+ g_set_object (&stream->paintable, GDK_PAINTABLE (texture));
|
||||
|
||||
munmap (map, size);
|
||||
}
|
||||
@@ -789,8 +692,6 @@ read_metadata:
|
||||
|
||||
if (!pw_stream_is_driving (stream->pipewire_stream))
|
||||
gdk_paintable_invalidate_contents (GDK_PAINTABLE (stream));
|
||||
-
|
||||
- g_clear_pointer (&damage_region, cairo_region_destroy);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.51.0
|
||||
|
||||
790
0001-Revert-tests-monitor-backlight-Add-tests-for-the-sys.patch
Normal file
790
0001-Revert-tests-monitor-backlight-Add-tests-for-the-sys.patch
Normal file
@ -0,0 +1,790 @@
|
||||
From 4b4bfed2a0ff7bf9581a2b993c588740ff4eea34 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Fri, 13 Feb 2026 16:14:24 +0100
|
||||
Subject: [PATCH] Revert "tests/monitor-backlight: Add tests for the sysfs
|
||||
backlight"
|
||||
|
||||
This reverts commit f7338dfe1cd4d33646a619d83853e2b968793632.
|
||||
---
|
||||
.gitlab-ci.yml | 2 -
|
||||
meson.build | 2 -
|
||||
src/backends/meta-backlight-private.h | 3 -
|
||||
src/backends/meta-backlight-sysfs-private.h | 1 -
|
||||
src/backends/meta-backlight.c | 8 -
|
||||
src/backends/meta-launcher.h | 2 -
|
||||
src/tests/dbusmock-templates/logind.py | 23 --
|
||||
src/tests/meson.build | 50 ++--
|
||||
src/tests/meta-context-test-private.h | 28 --
|
||||
src/tests/meta-context-test.c | 17 +-
|
||||
src/tests/meta-monitor-test-utils.c | 59 ----
|
||||
src/tests/meta-monitor-test-utils.h | 1 -
|
||||
src/tests/monitor-backlight-tests.c | 284 +-------------------
|
||||
src/tests/mutter_dbusrunner.py | 3 -
|
||||
14 files changed, 32 insertions(+), 451 deletions(-)
|
||||
delete mode 100644 src/tests/meta-context-test-private.h
|
||||
|
||||
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
|
||||
index cab1daccc5..cea2448ef5 100644
|
||||
--- a/.gitlab-ci.yml
|
||||
+++ b/.gitlab-ci.yml
|
||||
@@ -133,7 +133,6 @@ variables:
|
||||
gnome-desktop-testing
|
||||
ruff
|
||||
mypy
|
||||
- umockdev-devel
|
||||
libheif-devel
|
||||
libjxl-devel
|
||||
lcms2-devel
|
||||
@@ -152,7 +151,6 @@ variables:
|
||||
'pkgconfig(xrender)'
|
||||
'pkgconfig(xtst)'
|
||||
|
||||
-
|
||||
FDO_DISTRIBUTION_EXEC: |
|
||||
set -e
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 2afc0774b8..f77badb9ae 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -44,7 +44,6 @@ libdisplay_info_req = '>= 0.2'
|
||||
# optional version requirements
|
||||
udev_req = '>= 228'
|
||||
gudev_req = '>= 238'
|
||||
-umockdev_req = '>= 0.3.0'
|
||||
|
||||
# wayland version requirements
|
||||
wayland_server_req = '>= 1.24'
|
||||
@@ -409,7 +408,6 @@ if have_tests
|
||||
gtk3_dep = dependency('gtk+-3.0', version: gtk3_req)
|
||||
dbusmock_dep = python.find_installation('python3', modules: ['dbusmock'], required: false)
|
||||
libevdev_dep = dependency('libevdev', required: false)
|
||||
- umockdev_dep = dependency('umockdev-1.0', version: umockdev_req)
|
||||
|
||||
if not have_native_backend
|
||||
error('Tests require the native backend to be enabled')
|
||||
diff --git a/src/backends/meta-backlight-private.h b/src/backends/meta-backlight-private.h
|
||||
index 0010751bbb..2740932dcd 100644
|
||||
--- a/src/backends/meta-backlight-private.h
|
||||
+++ b/src/backends/meta-backlight-private.h
|
||||
@@ -42,6 +42,3 @@ const char * meta_backlight_get_name (MetaBacklight *backlight);
|
||||
|
||||
void meta_backlight_update_brightness_target (MetaBacklight *backlight,
|
||||
int brightness);
|
||||
-
|
||||
-META_EXPORT_TEST
|
||||
-gboolean meta_backlight_has_pending (MetaBacklight *backlight);
|
||||
diff --git a/src/backends/meta-backlight-sysfs-private.h b/src/backends/meta-backlight-sysfs-private.h
|
||||
index 2045d8c50a..1f58c2959d 100644
|
||||
--- a/src/backends/meta-backlight-sysfs-private.h
|
||||
+++ b/src/backends/meta-backlight-sysfs-private.h
|
||||
@@ -29,7 +29,6 @@ G_DECLARE_FINAL_TYPE (MetaBacklightSysfs,
|
||||
META, BACKLIGHT_SYSFS,
|
||||
MetaBacklight)
|
||||
|
||||
-META_EXPORT_TEST
|
||||
MetaBacklightSysfs * meta_backlight_sysfs_new (MetaBackend *backend,
|
||||
const MetaOutputInfo *output_info,
|
||||
GError **error);
|
||||
diff --git a/src/backends/meta-backlight.c b/src/backends/meta-backlight.c
|
||||
index c01935ac18..88f1626851 100644
|
||||
--- a/src/backends/meta-backlight.c
|
||||
+++ b/src/backends/meta-backlight.c
|
||||
@@ -72,14 +72,6 @@ meta_backlight_get_name (MetaBacklight *backlight)
|
||||
return priv->name;
|
||||
}
|
||||
|
||||
-gboolean
|
||||
-meta_backlight_has_pending (MetaBacklight *backlight)
|
||||
-{
|
||||
- MetaBacklightPrivate *priv = meta_backlight_get_instance_private (backlight);
|
||||
-
|
||||
- return priv->pending;
|
||||
-}
|
||||
-
|
||||
void
|
||||
meta_backlight_update_brightness_target (MetaBacklight *backlight,
|
||||
int brightness)
|
||||
diff --git a/src/backends/meta-launcher.h b/src/backends/meta-launcher.h
|
||||
index 9e8b177ff3..d9e882a395 100644
|
||||
--- a/src/backends/meta-launcher.h
|
||||
+++ b/src/backends/meta-launcher.h
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "backends/meta-backend-types.h"
|
||||
-#include "core/util-private.h"
|
||||
|
||||
#define META_TYPE_LAUNCHER (meta_launcher_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaLauncher,
|
||||
@@ -44,7 +43,6 @@ gboolean meta_launcher_take_control (MetaLauncher *launcher,
|
||||
|
||||
const char * meta_launcher_get_seat_id (MetaLauncher *launcher);
|
||||
|
||||
-META_EXPORT_TEST
|
||||
MetaDBusLogin1Session * meta_launcher_get_session_proxy (MetaLauncher *launcher);
|
||||
|
||||
MetaBackend * meta_launcher_get_backend (MetaLauncher *launcher);
|
||||
diff --git a/src/tests/dbusmock-templates/logind.py b/src/tests/dbusmock-templates/logind.py
|
||||
index cdec8e1a25..5e5878f6c7 100644
|
||||
--- a/src/tests/dbusmock-templates/logind.py
|
||||
+++ b/src/tests/dbusmock-templates/logind.py
|
||||
@@ -89,8 +89,6 @@ class Login1Session(mockobject.DBusMockObject):
|
||||
bus = kwargs.get('mock_data')
|
||||
self.host_session = bus.get_object(self.bus_name.get_name(), self.path) if bus else None
|
||||
|
||||
- self.backlights = {}
|
||||
-
|
||||
@staticmethod
|
||||
def add_new(manager, session_id, seat_id, host_bus):
|
||||
session_path = f'{MAIN_OBJ}/session/{session_id}'
|
||||
@@ -149,27 +147,6 @@ class Login1Session(mockobject.DBusMockObject):
|
||||
return self.host_session.ReleaseControl(dbus_interface=SESSION_IFACE)
|
||||
# noop
|
||||
|
||||
- @dbus.service.method(SESSION_IFACE, in_signature='ssu', out_signature='')
|
||||
- def SetBrightness(self, subsystem, name, brightness):
|
||||
- self.backlights[subsystem][name] = brightness
|
||||
- pass
|
||||
-
|
||||
- @dbus.service.method(MOCK_IFACE, in_signature='ssu', out_signature='')
|
||||
- def CreateBacklight(self, subsystem, name, brightness):
|
||||
- if not subsystem in self.backlights:
|
||||
- self.backlights[subsystem] = {}
|
||||
-
|
||||
- self.backlights[subsystem][name] = brightness
|
||||
-
|
||||
- @dbus.service.method(MOCK_IFACE, in_signature='ss', out_signature='')
|
||||
- def DestroyBacklight(self, subsystem, name):
|
||||
- if subsystem in self.backlights and name in self.backlights[subsystem]:
|
||||
- del self.backlights[subsystem][name]
|
||||
-
|
||||
- @dbus.service.method(MOCK_IFACE, in_signature='ss', out_signature='u')
|
||||
- def GetBacklight(self, subsystem, name):
|
||||
- return self.backlights[subsystem][name]
|
||||
-
|
||||
|
||||
@dbus.service.method(MANAGER_IFACE, in_signature='u', out_signature='o')
|
||||
def GetUser(self, uid):
|
||||
diff --git a/src/tests/meson.build b/src/tests/meson.build
|
||||
index dd1230b47f..efd97ef24f 100644
|
||||
--- a/src/tests/meson.build
|
||||
+++ b/src/tests/meson.build
|
||||
@@ -58,7 +58,6 @@ tests_deps = [
|
||||
locally_compiled_schemas_dep,
|
||||
wayland_client_dep,
|
||||
gvdb_dep,
|
||||
- umockdev_dep,
|
||||
]
|
||||
|
||||
if libevdev_dep.found()
|
||||
@@ -264,23 +263,6 @@ privileged_test_cases = []
|
||||
|
||||
subdir('mtk')
|
||||
|
||||
-backlight_client = executable('monitor-backlight-client',
|
||||
- sources: [
|
||||
- 'monitor-backlight-client.c',
|
||||
- built_dbus_sources['meta-dbus-display-config'],
|
||||
- ],
|
||||
- include_directories: tests_includes,
|
||||
- c_args: [
|
||||
- tests_c_args,
|
||||
- '-DG_LOG_DOMAIN="mutter-monitor-backlight-test-client"',
|
||||
- ],
|
||||
- dependencies: [
|
||||
- gio_dep,
|
||||
- ],
|
||||
- install: have_installed_tests,
|
||||
- install_dir: mutter_installed_tests_libexecdir,
|
||||
-)
|
||||
-
|
||||
test_cases += [
|
||||
{
|
||||
'name': 'unit',
|
||||
@@ -430,10 +412,7 @@ test_cases += [
|
||||
{
|
||||
'name': 'monitor-backlight',
|
||||
'suite': 'backend',
|
||||
- 'sources': [ 'monitor-backlight-tests.c', ],
|
||||
- 'depends': [
|
||||
- backlight_client,
|
||||
- ],
|
||||
+ 'sources': [ 'monitor-backlight-tests.c', ]
|
||||
},
|
||||
{
|
||||
'name': 'monitor-gdctl',
|
||||
@@ -543,6 +522,23 @@ screen_cast_client_driver = executable('mutter-screen-cast-client-driver',
|
||||
install_rpath: pkglibdir,
|
||||
)
|
||||
|
||||
+backlight_client = executable('monitor-backlight-client',
|
||||
+ sources: [
|
||||
+ 'monitor-backlight-client.c',
|
||||
+ built_dbus_sources['meta-dbus-display-config'],
|
||||
+ ],
|
||||
+ include_directories: tests_includes,
|
||||
+ c_args: [
|
||||
+ tests_c_args,
|
||||
+ '-DG_LOG_DOMAIN="mutter-monitor-backlight-test-client"',
|
||||
+ ],
|
||||
+ dependencies: [
|
||||
+ gio_dep,
|
||||
+ ],
|
||||
+ install: have_installed_tests,
|
||||
+ install_dir: mutter_installed_tests_libexecdir,
|
||||
+)
|
||||
+
|
||||
input_capture_client = executable('mutter-input-capture-test-client',
|
||||
sources: [
|
||||
'input-capture-test-client.c',
|
||||
@@ -1225,13 +1221,9 @@ if have_kvm_tests or have_tty_tests
|
||||
)
|
||||
|
||||
foreach variant: variants
|
||||
- variables = variant[1] + {
|
||||
- 'META_DBUS_RUNNER_DISABLE_UMOCKDEV': '1',
|
||||
- 'META_DBUS_RUNNER_DISABLE_LOGIND_PASSTHROUGH': '1',
|
||||
- }
|
||||
-
|
||||
variant_env = environment()
|
||||
- foreach name, value: variables
|
||||
+ variant_env.set('META_DBUS_RUNNER_DISABLE_LOGIND_PASSTHROUGH', '1')
|
||||
+ foreach name, value: variant[1]
|
||||
variant_env.set(name, value)
|
||||
endforeach
|
||||
privileged_tests += [
|
||||
@@ -1239,7 +1231,7 @@ if have_kvm_tests or have_tty_tests
|
||||
'name': '@0@@1@'.format(test_case['name'], variant[0]),
|
||||
'suite': test_case['suite'],
|
||||
'executable': test_executable,
|
||||
- 'variables': variables,
|
||||
+ 'variables': variant[1],
|
||||
'env': variant_env,
|
||||
},
|
||||
]
|
||||
diff --git a/src/tests/meta-context-test-private.h b/src/tests/meta-context-test-private.h
|
||||
deleted file mode 100644
|
||||
index ebd7275350..0000000000
|
||||
--- a/src/tests/meta-context-test-private.h
|
||||
+++ /dev/null
|
||||
@@ -1,28 +0,0 @@
|
||||
-/*
|
||||
- * Copyright (C) 2025 Red Hat Inc.
|
||||
- *
|
||||
- * This program is free software; you can redistribute it and/or
|
||||
- * modify it under the terms of the GNU General Public License as
|
||||
- * published by the Free Software Foundation; either version 2 of the
|
||||
- * License, or (at your option) any later version.
|
||||
- *
|
||||
- * This program is distributed in the hope that it will be useful, but
|
||||
- * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
- * General Public License for more details.
|
||||
- *
|
||||
- * You should have received a copy of the GNU General Public License
|
||||
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
- *
|
||||
- */
|
||||
-
|
||||
-#pragma once
|
||||
-
|
||||
-#include "config.h"
|
||||
-
|
||||
-#include "meta-test/meta-context-test.h"
|
||||
-
|
||||
-#include <umockdev.h>
|
||||
-
|
||||
-META_EXPORT
|
||||
-UMockdevTestbed * meta_context_test_get_udev_testbed (MetaContextTest *context_test);
|
||||
diff --git a/src/tests/meta-context-test.c b/src/tests/meta-context-test.c
|
||||
index 8558c6b969..81fcb7afc2 100644
|
||||
--- a/src/tests/meta-context-test.c
|
||||
+++ b/src/tests/meta-context-test.c
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
-#include "tests/meta-context-test-private.h"
|
||||
+#include "meta-test/meta-context-test.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <gio/gio.h>
|
||||
@@ -57,7 +57,6 @@ typedef struct _MetaContextTestPrivate
|
||||
MetaContextTestFlag flags;
|
||||
MetaSessionManager *session_manager;
|
||||
CoglColor *background_color;
|
||||
- UMockdevTestbed *udev_testbed;
|
||||
} MetaContextTestPrivate;
|
||||
|
||||
struct _MetaContextTestClass
|
||||
@@ -101,7 +100,6 @@ meta_context_test_finalize (GObject *object)
|
||||
|
||||
g_clear_pointer (&priv->background_color, cogl_color_free);
|
||||
g_clear_object (&priv->session_manager);
|
||||
- g_clear_object (&priv->udev_testbed);
|
||||
|
||||
G_OBJECT_CLASS (meta_context_test_parent_class)->finalize (object);
|
||||
}
|
||||
@@ -396,18 +394,6 @@ meta_context_test_wait_for_x11_display (MetaContextTest *context_test)
|
||||
g_assert_nonnull (meta_display_get_x11_display (display));
|
||||
}
|
||||
|
||||
-/**
|
||||
- * meta_context_test_get_udev_testbed: (skip)
|
||||
- */
|
||||
-UMockdevTestbed *
|
||||
-meta_context_test_get_udev_testbed (MetaContextTest *context_test)
|
||||
-{
|
||||
- MetaContextTestPrivate *priv =
|
||||
- meta_context_test_get_instance_private (context_test);
|
||||
-
|
||||
- return priv->udev_testbed;
|
||||
-}
|
||||
-
|
||||
/**
|
||||
* meta_create_test_context: (skip)
|
||||
*/
|
||||
@@ -424,7 +410,6 @@ meta_create_test_context (MetaContextTestType type,
|
||||
priv = meta_context_test_get_instance_private (context_test);
|
||||
priv->type = type;
|
||||
priv->flags = flags;
|
||||
- priv->udev_testbed = umockdev_testbed_new ();
|
||||
|
||||
return META_CONTEXT (context_test);
|
||||
}
|
||||
diff --git a/src/tests/meta-monitor-test-utils.c b/src/tests/meta-monitor-test-utils.c
|
||||
index 31133e09d2..35328ba5ec 100644
|
||||
--- a/src/tests/meta-monitor-test-utils.c
|
||||
+++ b/src/tests/meta-monitor-test-utils.c
|
||||
@@ -24,12 +24,10 @@
|
||||
#include <float.h>
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
-#include "backends/meta-backlight-sysfs-private.h"
|
||||
#include "backends/meta-crtc.h"
|
||||
#include "backends/meta-logical-monitor-private.h"
|
||||
#include "backends/meta-monitor-config-manager.h"
|
||||
#include "backends/meta-monitor-config-store.h"
|
||||
-#include "tests/meta-context-test-private.h"
|
||||
#include "tests/meta-crtc-test.h"
|
||||
#include "tests/meta-output-test.h"
|
||||
#include "tests/meta-test-utils.h"
|
||||
@@ -651,8 +649,6 @@ meta_create_monitor_test_setup (MetaBackend *backend,
|
||||
MonitorTestCaseSetup *setup,
|
||||
MonitorTestFlag flags)
|
||||
{
|
||||
- MetaContextTest *context_test =
|
||||
- META_CONTEXT_TEST (meta_backend_get_context (backend));
|
||||
MetaMonitorTestSetup *test_setup;
|
||||
int i;
|
||||
#define META_N_CONNECTOR_TYPES 21
|
||||
@@ -836,61 +832,6 @@ meta_create_monitor_test_setup (MetaBackend *backend,
|
||||
NULL);
|
||||
}
|
||||
|
||||
- if (setup->outputs[i].sysfs_backlight)
|
||||
- {
|
||||
- UMockdevTestbed *udev_testbed =
|
||||
- meta_context_test_get_udev_testbed (context_test);
|
||||
- g_autofree char *max_str = NULL;
|
||||
- g_autofree char *connector_name = NULL;
|
||||
- g_autofree char *connector_udev = NULL;
|
||||
- g_autofree char *backlight_udev = NULL;
|
||||
- int min;
|
||||
-
|
||||
- g_assert_true (umockdev_in_mock_environment ());
|
||||
-
|
||||
- umockdev_testbed_clear (udev_testbed);
|
||||
-
|
||||
- max_str = g_strdup_printf ("%i", setup->outputs[i].backlight_max);
|
||||
- connector_name = g_strdup_printf ("card0-%s", output_info->name);
|
||||
-
|
||||
- /* add an enabled drm connector which will be the parent of the backlight */
|
||||
- connector_udev = umockdev_testbed_add_device (udev_testbed,
|
||||
- /* subsystem */
|
||||
- "drm",
|
||||
- /* name */
|
||||
- connector_name,
|
||||
- /* parent */
|
||||
- NULL,
|
||||
- /* attributes */
|
||||
- "enabled", "enabled",
|
||||
- NULL,
|
||||
- /* properties */
|
||||
- NULL);
|
||||
-
|
||||
- backlight_udev = umockdev_testbed_add_device (udev_testbed,
|
||||
- /* subsystem */
|
||||
- "backlight",
|
||||
- /* name */
|
||||
- setup->outputs[i].sysfs_backlight,
|
||||
- /* parent */
|
||||
- connector_udev,
|
||||
- /* attributes */
|
||||
- "type", "raw",
|
||||
- "max_brightness", max_str,
|
||||
- "brightness", max_str,
|
||||
- NULL,
|
||||
- /* properties */
|
||||
- NULL);
|
||||
-
|
||||
- backlight = META_BACKLIGHT (meta_backlight_sysfs_new (backend,
|
||||
- output_info,
|
||||
- NULL));
|
||||
- g_assert_nonnull (backlight);
|
||||
-
|
||||
- meta_backlight_get_brightness_info (backlight, &min, NULL);
|
||||
- g_assert_cmpint (min, ==, setup->outputs[i].backlight_min);
|
||||
- }
|
||||
-
|
||||
output = g_object_new (META_TYPE_OUTPUT_TEST,
|
||||
"id", (uint64_t) i,
|
||||
"gpu", meta_test_get_gpu (backend),
|
||||
diff --git a/src/tests/meta-monitor-test-utils.h b/src/tests/meta-monitor-test-utils.h
|
||||
index 4760315263..5098f67cf5 100644
|
||||
--- a/src/tests/meta-monitor-test-utils.h
|
||||
+++ b/src/tests/meta-monitor-test-utils.h
|
||||
@@ -117,7 +117,6 @@ typedef struct _MonitorTestCaseOutput
|
||||
int suggested_y;
|
||||
int backlight_min;
|
||||
int backlight_max;
|
||||
- const char *sysfs_backlight;
|
||||
gboolean has_edid_info;
|
||||
MetaEdidInfo edid_info;
|
||||
uint64_t supported_color_spaces;
|
||||
diff --git a/src/tests/monitor-backlight-tests.c b/src/tests/monitor-backlight-tests.c
|
||||
index 652e63b583..511b9fbe76 100644
|
||||
--- a/src/tests/monitor-backlight-tests.c
|
||||
+++ b/src/tests/monitor-backlight-tests.c
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
-#include "backends/meta-backlight-private.h"
|
||||
#include "tests/meta-test/meta-context-test.h"
|
||||
#include "tests/meta-monitor-test-utils.h"
|
||||
|
||||
@@ -71,55 +70,16 @@ static MonitorTestCaseSetup initial_test_case_setup = {
|
||||
.n_crtcs = 2
|
||||
};
|
||||
|
||||
-static MonitorTestCaseSetup sysfs_test_case_setup = {
|
||||
- .modes = {
|
||||
- {
|
||||
- .width = 1024,
|
||||
- .height = 768,
|
||||
- .refresh_rate = 60.0
|
||||
- }
|
||||
- },
|
||||
- .n_modes = 1,
|
||||
- .outputs = {
|
||||
- {
|
||||
- .crtc = 0,
|
||||
- .modes = { 0 },
|
||||
- .n_modes = 1,
|
||||
- .preferred_mode = 0,
|
||||
- .possible_crtcs = { 0 },
|
||||
- .n_possible_crtcs = 1,
|
||||
- .width_mm = 222,
|
||||
- .height_mm = 125,
|
||||
- .connector_type = META_CONNECTOR_TYPE_eDP,
|
||||
- .sysfs_backlight = "backlight1",
|
||||
- .backlight_min = 0,
|
||||
- .backlight_max = 90,
|
||||
- },
|
||||
- {
|
||||
- .crtc = 1,
|
||||
- .modes = { 0 },
|
||||
- .n_modes = 1,
|
||||
- .preferred_mode = 0,
|
||||
- .possible_crtcs = { 1 },
|
||||
- .n_possible_crtcs = 1,
|
||||
- .width_mm = 220,
|
||||
- .height_mm = 124
|
||||
- }
|
||||
- },
|
||||
- .n_outputs = 2,
|
||||
- .crtcs = {
|
||||
- {
|
||||
- .current_mode = 0
|
||||
- },
|
||||
- {
|
||||
- .current_mode = 0
|
||||
- }
|
||||
- },
|
||||
- .n_crtcs = 2
|
||||
-};
|
||||
-
|
||||
static MetaContext *test_context;
|
||||
|
||||
+static MetaMonitorTestSetup *
|
||||
+create_test_setup (MetaBackend *backend)
|
||||
+{
|
||||
+ return meta_create_monitor_test_setup (backend,
|
||||
+ &initial_test_case_setup,
|
||||
+ MONITOR_TEST_FLAG_NO_STORED);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
meta_test_backlight_sanity (void)
|
||||
{
|
||||
@@ -209,228 +169,6 @@ meta_test_backlight_api (void)
|
||||
g_main_context_iteration (NULL, TRUE);
|
||||
}
|
||||
|
||||
-static void
|
||||
-meta_test_backlight_sysfs_sanity (void)
|
||||
-{
|
||||
- MetaBackend *backend = meta_context_get_backend (test_context);
|
||||
- MetaMonitorManager *monitor_manager =
|
||||
- meta_backend_get_monitor_manager (backend);
|
||||
- MetaMonitorManagerTest *monitor_manager_test =
|
||||
- META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
- MetaMonitorTestSetup *test_setup;
|
||||
- GList *monitors;
|
||||
- MetaMonitor *first_monitor;
|
||||
- MetaBacklight *backlight;
|
||||
- int backlight_min;
|
||||
- int backlight_max;
|
||||
- int backlight_value;
|
||||
-
|
||||
- test_setup = meta_create_monitor_test_setup (backend,
|
||||
- &sysfs_test_case_setup,
|
||||
- MONITOR_TEST_FLAG_NO_STORED);
|
||||
- meta_monitor_manager_test_emulate_hotplug (monitor_manager_test, test_setup);
|
||||
-
|
||||
- monitors = meta_monitor_manager_get_monitors (monitor_manager);
|
||||
- g_assert_cmpuint (g_list_length (monitors), ==, 2);
|
||||
- first_monitor = g_list_nth_data (monitors, 0);
|
||||
-
|
||||
- backlight = meta_monitor_get_backlight (first_monitor);
|
||||
- g_assert_nonnull (backlight);
|
||||
-
|
||||
- meta_backlight_get_brightness_info (backlight, &backlight_min, &backlight_max);
|
||||
- backlight_value = meta_backlight_get_brightness (backlight);
|
||||
- g_assert_cmpint (backlight_min, ==, 0);
|
||||
- g_assert_cmpint (backlight_max, ==, 90);
|
||||
- g_assert_cmpint (backlight_value, >=, 0);
|
||||
- g_assert_cmpint (backlight_value, <=, 90);
|
||||
-}
|
||||
-
|
||||
-static GDBusProxy *
|
||||
-get_logind_mock_proxy (MetaBackend *backend)
|
||||
-{
|
||||
- GDBusProxy *proxy;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
-
|
||||
- MetaLauncher *launcher = meta_backend_get_launcher (backend);
|
||||
- MetaDBusLogin1Session *session_proxy = meta_launcher_get_session_proxy (launcher);
|
||||
- const char *session_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY (session_proxy));
|
||||
-
|
||||
- proxy =
|
||||
- g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
||||
- G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START |
|
||||
- G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
|
||||
- NULL,
|
||||
- "org.freedesktop.login1",
|
||||
- session_path,
|
||||
- "org.freedesktop.DBus.Mock",
|
||||
- NULL, &error);
|
||||
- if (!proxy)
|
||||
- {
|
||||
- g_error ("Failed to find mocked color manager system service, %s",
|
||||
- error->message);
|
||||
- }
|
||||
-
|
||||
- return proxy;
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-create_logind_backlight (MetaBackend *backend,
|
||||
- const char *name,
|
||||
- int brightness)
|
||||
-{
|
||||
-
|
||||
- g_autoptr (GDBusProxy) mock_proxy = NULL;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
- GVariantBuilder params_builder;
|
||||
-
|
||||
- mock_proxy = get_logind_mock_proxy (backend);
|
||||
-
|
||||
- g_variant_builder_init (¶ms_builder, G_VARIANT_TYPE ("(ssu)"));
|
||||
- g_variant_builder_add (¶ms_builder, "s", "backlight");
|
||||
- g_variant_builder_add (¶ms_builder, "s", name);
|
||||
- g_variant_builder_add (¶ms_builder, "u", brightness);
|
||||
-
|
||||
- if (!g_dbus_proxy_call_sync (mock_proxy,
|
||||
- "CreateBacklight",
|
||||
- g_variant_builder_end (¶ms_builder),
|
||||
- G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL,
|
||||
- &error))
|
||||
- g_error ("Failed to create logind backlight: %s", error->message);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-destroy_logind_backlight (MetaBackend *backend,
|
||||
- const char *name)
|
||||
-{
|
||||
-
|
||||
- g_autoptr (GDBusProxy) mock_proxy = NULL;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
- GVariantBuilder params_builder;
|
||||
-
|
||||
- mock_proxy = get_logind_mock_proxy (backend);
|
||||
-
|
||||
- g_variant_builder_init (¶ms_builder, G_VARIANT_TYPE ("(ss)"));
|
||||
- g_variant_builder_add (¶ms_builder, "s", "backlight");
|
||||
- g_variant_builder_add (¶ms_builder, "s", name);
|
||||
-
|
||||
- if (!g_dbus_proxy_call_sync (mock_proxy,
|
||||
- "DestroyBacklight",
|
||||
- g_variant_builder_end (¶ms_builder),
|
||||
- G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL,
|
||||
- &error))
|
||||
- g_error ("Failed to destroy logind backlight: %s", error->message);
|
||||
-}
|
||||
-
|
||||
-static int
|
||||
-get_logind_backlight (MetaBackend *backend,
|
||||
- const char *name)
|
||||
-{
|
||||
-
|
||||
- g_autoptr (GDBusProxy) mock_proxy = NULL;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
- GVariantBuilder params_builder;
|
||||
- g_autoptr (GVariant) result = NULL;
|
||||
- int backlight_value;
|
||||
-
|
||||
- mock_proxy = get_logind_mock_proxy (backend);
|
||||
-
|
||||
- g_variant_builder_init (¶ms_builder, G_VARIANT_TYPE ("(ss)"));
|
||||
- g_variant_builder_add (¶ms_builder, "s", "backlight");
|
||||
- g_variant_builder_add (¶ms_builder, "s", name);
|
||||
-
|
||||
- result = g_dbus_proxy_call_sync (mock_proxy,
|
||||
- "GetBacklight",
|
||||
- g_variant_builder_end (¶ms_builder),
|
||||
- G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL,
|
||||
- &error);
|
||||
- if (!result)
|
||||
- g_error ("Failed to destroy logind backlight: %s", error->message);
|
||||
-
|
||||
- g_variant_get (result, "(u)", &backlight_value);
|
||||
- return backlight_value;
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-meta_test_backlight_sysfs_set (void)
|
||||
-{
|
||||
- MetaBackend *backend = meta_context_get_backend (test_context);
|
||||
- MetaMonitorManager *monitor_manager =
|
||||
- meta_backend_get_monitor_manager (backend);
|
||||
- MetaMonitorManagerTest *monitor_manager_test =
|
||||
- META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
- MetaMonitorTestSetup *test_setup;
|
||||
- GList *monitors;
|
||||
- MetaMonitor *first_monitor;
|
||||
- MetaBacklight *backlight;
|
||||
- int backlight_value;
|
||||
-
|
||||
- destroy_logind_backlight (backend, "backlight1");
|
||||
- create_logind_backlight (backend, "backlight1", 90);
|
||||
-
|
||||
- test_setup = meta_create_monitor_test_setup (backend,
|
||||
- &sysfs_test_case_setup,
|
||||
- MONITOR_TEST_FLAG_NO_STORED);
|
||||
- meta_monitor_manager_test_emulate_hotplug (monitor_manager_test, test_setup);
|
||||
-
|
||||
- monitors = meta_monitor_manager_get_monitors (monitor_manager);
|
||||
- first_monitor = g_list_nth_data (monitors, 0);
|
||||
-
|
||||
- backlight = meta_monitor_get_backlight (first_monitor);
|
||||
- g_assert_nonnull (backlight);
|
||||
-
|
||||
- backlight_value = meta_backlight_get_brightness (backlight);
|
||||
- g_assert_cmpint (backlight_value, ==, 90);
|
||||
- g_assert_cmpint (get_logind_backlight (backend, "backlight1"), ==, 90);
|
||||
-
|
||||
- meta_backlight_set_brightness (backlight, 30);
|
||||
-
|
||||
- while (meta_backlight_has_pending (backlight))
|
||||
- g_main_context_iteration (NULL, TRUE);
|
||||
-
|
||||
- backlight_value = meta_backlight_get_brightness (backlight);
|
||||
- g_assert_cmpint (backlight_value, ==, 30);
|
||||
- g_assert_cmpint (get_logind_backlight (backend, "backlight1"), ==, 30);
|
||||
-}
|
||||
-
|
||||
-static MetaMonitorTestSetup *
|
||||
-create_test_setup (MetaBackend *backend)
|
||||
-{
|
||||
- return meta_create_monitor_test_setup (backend,
|
||||
- &initial_test_case_setup,
|
||||
- MONITOR_TEST_FLAG_NO_STORED);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-prepare_backlight_test (void)
|
||||
-{
|
||||
- MetaBackend *backend = meta_context_get_backend (test_context);
|
||||
- MetaMonitorManager *monitor_manager =
|
||||
- meta_backend_get_monitor_manager (backend);
|
||||
- MetaMonitorManagerTest *monitor_manager_test =
|
||||
- META_MONITOR_MANAGER_TEST (monitor_manager);
|
||||
- MetaMonitorTestSetup *test_setup;
|
||||
-
|
||||
- test_setup = meta_create_monitor_test_setup (backend,
|
||||
- &initial_test_case_setup,
|
||||
- MONITOR_TEST_FLAG_NO_STORED);
|
||||
- meta_monitor_manager_test_emulate_hotplug (monitor_manager_test, test_setup);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-finish_backlight_test (void)
|
||||
-{
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-add_test (const char *test_path,
|
||||
- GTestFunc test_func)
|
||||
-{
|
||||
- g_test_add_vtable (test_path, 0, NULL,
|
||||
- (GTestFixtureFunc) prepare_backlight_test,
|
||||
- (GTestFixtureFunc) test_func,
|
||||
- (GTestFixtureFunc) finish_backlight_test);
|
||||
-}
|
||||
-
|
||||
int
|
||||
main (int argc,
|
||||
char *argv[])
|
||||
@@ -444,10 +182,8 @@ main (int argc,
|
||||
test_context = context;
|
||||
|
||||
meta_init_monitor_test_setup (create_test_setup);
|
||||
- add_test ("/backends/backlight/sanity", meta_test_backlight_sanity);
|
||||
- add_test ("/backends/backlight/api", meta_test_backlight_api);
|
||||
- add_test ("/backends/backlight/sysfs/sanity", meta_test_backlight_sysfs_sanity);
|
||||
- add_test ("/backends/backlight/sysfs/set", meta_test_backlight_sysfs_set);
|
||||
+ g_test_add_func ("/backends/backlight/sanity", meta_test_backlight_sanity);
|
||||
+ g_test_add_func ("/backends/backlight/api", meta_test_backlight_api);
|
||||
|
||||
return meta_context_test_run_tests (META_CONTEXT_TEST (context),
|
||||
META_TEST_RUN_FLAG_NONE);
|
||||
diff --git a/src/tests/mutter_dbusrunner.py b/src/tests/mutter_dbusrunner.py
|
||||
index 215ab8ac57..47ec5fa4cc 100644
|
||||
--- a/src/tests/mutter_dbusrunner.py
|
||||
+++ b/src/tests/mutter_dbusrunner.py
|
||||
@@ -275,9 +275,6 @@ def run_test(args, extra_env):
|
||||
|
||||
wrapper = os.getenv('META_DBUS_RUNNER_WRAPPER')
|
||||
|
||||
- if not os.getenv('META_DBUS_RUNNER_DISABLE_UMOCKDEV'):
|
||||
- args = ['umockdev-wrapper'] + args
|
||||
-
|
||||
if wrapper == 'gdb':
|
||||
args = ['gdb', '-ex', 'r', '-ex', 'bt full', '--args'] + args
|
||||
elif wrapper == 'rr':
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@ -1,28 +1,31 @@
|
||||
From c0fda823b3f0c6802afe549379135719f86c6bfc Mon Sep 17 00:00:00 2001
|
||||
From 163bd8ef0f0cd261e34ecb7c30bc7a30a325bd6e Mon Sep 17 00:00:00 2001
|
||||
From: Adam Williamson <awilliam@redhat.com>
|
||||
Date: Tue, 9 Mar 2021 17:21:59 -0800
|
||||
Subject: [PATCH] Test: deny atomic KMS for "tegra" (RHBZ #1936991)
|
||||
Subject: [PATCH 1/6] Test: deny atomic KMS for "tegra" (RHBZ #1936991)
|
||||
|
||||
Signed-off-by: Adam Williamson <awilliam@redhat.com>
|
||||
---
|
||||
data/61-mutter.rules | 1 +
|
||||
data/61-mutter.rules | 3 ++-
|
||||
src/backends/native/meta-kms-impl-device-atomic.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/data/61-mutter.rules b/data/61-mutter.rules
|
||||
index 9262b152b9..24f9655b69 100644
|
||||
index 241424827d..b51369c89a 100644
|
||||
--- a/data/61-mutter.rules
|
||||
+++ b/data/61-mutter.rules
|
||||
@@ -114,3 +114,4 @@ DRIVERS=="i915", SUBSYSTEM=="drm", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x9b
|
||||
@@ -114,4 +114,5 @@ DRIVERS=="i915", SUBSYSTEM=="drm", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x9b
|
||||
DRIVERS=="i915", SUBSYSTEM=="drm", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x9be6", TAG+="mutter-device-disable-kms-modifiers"
|
||||
DRIVERS=="i915", SUBSYSTEM=="drm", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x9bf6", TAG+="mutter-device-disable-kms-modifiers"
|
||||
ENV{ID_PATH}=="platform-vkms", TAG+="mutter-device-ignore"
|
||||
-ENV{DEVPATH}=="/devices/faux/vkms/drm/card[0-9]*", TAG+="mutter-device-ignore"
|
||||
\ No newline at end of file
|
||||
+ENV{DEVPATH}=="/devices/faux/vkms/drm/card[0-9]*", TAG+="mutter-device-ignore"
|
||||
+DRIVER=="tegra", SUBSYSTEM=="platform", TAG+="mutter-device-disable-atomic-kms"
|
||||
diff --git a/src/backends/native/meta-kms-impl-device-atomic.c b/src/backends/native/meta-kms-impl-device-atomic.c
|
||||
index a4ffd70b6a..9fac299e14 100644
|
||||
index 7860cc2c6b..b99e32bf5d 100644
|
||||
--- a/src/backends/native/meta-kms-impl-device-atomic.c
|
||||
+++ b/src/backends/native/meta-kms-impl-device-atomic.c
|
||||
@@ -1306,6 +1306,7 @@ requires_hotspots (const char *driver_name)
|
||||
@@ -1330,6 +1330,7 @@ requires_hotspots (const char *driver_name)
|
||||
"vboxvideo",
|
||||
"virtio_gpu",
|
||||
"vmwgfx",
|
||||
@ -31,5 +34,5 @@ index a4ffd70b6a..9fac299e14 100644
|
||||
};
|
||||
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
2.51.0
|
||||
|
||||
118
0001-mtk-Take-explicit-reference-for-mtk_extrapolate_next.patch
Normal file
118
0001-mtk-Take-explicit-reference-for-mtk_extrapolate_next.patch
Normal file
@ -0,0 +1,118 @@
|
||||
From baee8ef5d24609d77c4fb3b897998f5c2a06147c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Sat, 20 Dec 2025 17:25:14 +0100
|
||||
Subject: [PATCH] mtk: Take explicit reference for
|
||||
mtk_extrapolate_next_interval_boundary
|
||||
|
||||
This avoids spurious failures of the time-utils test due to it taking
|
||||
longer than expected, and an additional g_get_monotonic_time call in
|
||||
meta_kms_crtc_determine_deadline.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4821>
|
||||
---
|
||||
clutter/clutter/clutter-frame-clock.c | 1 +
|
||||
mtk/mtk/mtk-time-utils.c | 10 +++++-----
|
||||
mtk/mtk/mtk-time-utils.h | 3 ++-
|
||||
src/backends/native/meta-kms-crtc.c | 1 +
|
||||
src/tests/mtk/time-utils-tests.c | 8 +++++---
|
||||
5 files changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/clutter/clutter/clutter-frame-clock.c b/clutter/clutter/clutter-frame-clock.c
|
||||
index e612227419..13c0a51705 100644
|
||||
--- a/clutter/clutter/clutter-frame-clock.c
|
||||
+++ b/clutter/clutter/clutter-frame-clock.c
|
||||
@@ -885,6 +885,7 @@ calculate_next_update_time_us (ClutterFrameClock *frame_clock,
|
||||
*/
|
||||
next_presentation_time_us =
|
||||
mtk_extrapolate_next_interval_boundary (next_smooth_presentation_time_us,
|
||||
+ now_us,
|
||||
refresh_interval_us);
|
||||
|
||||
if (last_presentation->target_presentation_time_us > 0)
|
||||
diff --git a/mtk/mtk/mtk-time-utils.c b/mtk/mtk/mtk-time-utils.c
|
||||
index 1538af627e..1d4669973e 100644
|
||||
--- a/mtk/mtk/mtk-time-utils.c
|
||||
+++ b/mtk/mtk/mtk-time-utils.c
|
||||
@@ -24,13 +24,13 @@
|
||||
#include "mtk-time-utils.h"
|
||||
|
||||
int64_t
|
||||
-mtk_extrapolate_next_interval_boundary (int64_t base_us,
|
||||
+mtk_extrapolate_next_interval_boundary (int64_t boundary_us,
|
||||
+ int64_t reference_us,
|
||||
int64_t interval_us)
|
||||
{
|
||||
- int64_t now_us;
|
||||
int64_t num_intervals;
|
||||
|
||||
- now_us = g_get_monotonic_time ();
|
||||
- num_intervals = MAX ((now_us - base_us + interval_us - 1) / interval_us, 0);
|
||||
- return base_us + num_intervals * interval_us;
|
||||
+ num_intervals = MAX ((reference_us - boundary_us + interval_us - 1) /
|
||||
+ interval_us, 0);
|
||||
+ return boundary_us + num_intervals * interval_us;
|
||||
}
|
||||
diff --git a/mtk/mtk/mtk-time-utils.h b/mtk/mtk/mtk-time-utils.h
|
||||
index 1c8e836c65..a4b418a922 100644
|
||||
--- a/mtk/mtk/mtk-time-utils.h
|
||||
+++ b/mtk/mtk/mtk-time-utils.h
|
||||
@@ -28,7 +28,8 @@
|
||||
#include "mtk/mtk-macros.h"
|
||||
|
||||
MTK_EXPORT
|
||||
-int64_t mtk_extrapolate_next_interval_boundary (int64_t base_us,
|
||||
+int64_t mtk_extrapolate_next_interval_boundary (int64_t boundary_us,
|
||||
+ int64_t base_us,
|
||||
int64_t interval_us);
|
||||
|
||||
static inline uint64_t
|
||||
diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c
|
||||
index cefaf17403..93463531ee 100644
|
||||
--- a/src/backends/native/meta-kms-crtc.c
|
||||
+++ b/src/backends/native/meta-kms-crtc.c
|
||||
@@ -712,6 +712,7 @@ meta_kms_crtc_determine_deadline (MetaKmsCrtc *crtc,
|
||||
|
||||
skip_us =
|
||||
mtk_extrapolate_next_interval_boundary (next_deadline_us,
|
||||
+ now_us,
|
||||
refresh_interval_us) -
|
||||
next_deadline_us;
|
||||
|
||||
diff --git a/src/tests/mtk/time-utils-tests.c b/src/tests/mtk/time-utils-tests.c
|
||||
index 792f82d056..3f54f6bdc6 100644
|
||||
--- a/src/tests/mtk/time-utils-tests.c
|
||||
+++ b/src/tests/mtk/time-utils-tests.c
|
||||
@@ -31,25 +31,27 @@ test_extrapolate_interval_boundary (void)
|
||||
now_us = g_get_monotonic_time ();
|
||||
|
||||
next_interval_boundary_us =
|
||||
- mtk_extrapolate_next_interval_boundary (now_us - 1, interval_us);
|
||||
+ mtk_extrapolate_next_interval_boundary (now_us - 1, now_us, interval_us);
|
||||
g_assert_cmpint (next_interval_boundary_us, ==, now_us + interval_us - 1);
|
||||
|
||||
next_interval_boundary_us =
|
||||
mtk_extrapolate_next_interval_boundary (now_us - interval_us - 1,
|
||||
+ now_us,
|
||||
interval_us);
|
||||
g_assert_cmpint (next_interval_boundary_us, ==, now_us + interval_us - 1);
|
||||
|
||||
next_interval_boundary_us =
|
||||
- mtk_extrapolate_next_interval_boundary (now_us, interval_us);
|
||||
+ mtk_extrapolate_next_interval_boundary (now_us, now_us + 1, interval_us);
|
||||
g_assert_cmpint (next_interval_boundary_us, ==, now_us + interval_us);
|
||||
|
||||
next_interval_boundary_us =
|
||||
mtk_extrapolate_next_interval_boundary (now_us + interval_us - 1,
|
||||
+ now_us,
|
||||
interval_us);
|
||||
g_assert_cmpint (next_interval_boundary_us, ==, now_us + interval_us - 1);
|
||||
|
||||
next_interval_boundary_us =
|
||||
- mtk_extrapolate_next_interval_boundary (0, interval_us);
|
||||
+ mtk_extrapolate_next_interval_boundary (0, now_us, interval_us);
|
||||
g_assert_cmpint (next_interval_boundary_us, >=, now_us);
|
||||
}
|
||||
|
||||
--
|
||||
2.51.0
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
From 6274d92c7da1977f7a6ba21ba490b9d1af7f34f1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Tue, 27 Jan 2026 23:00:55 +0100
|
||||
Subject: [PATCH] tests/test-runner: Do a client roundtrip after popup
|
||||
'dismiss'
|
||||
|
||||
Popups in the test runner are tracked by finding the popup that belongs
|
||||
to a certain parent. If one creates a popup immediately after dismissing
|
||||
another popup on the same parent, there is a chance that the new
|
||||
`popup_at` will find the old popup that is about to be dismissed, which
|
||||
will fail the test with an error message about the window being
|
||||
destroyed while waiting to be shown.
|
||||
|
||||
Avoid this by doing a roundtrip to the client after dismissing a popup,
|
||||
effectively ensuring the popup is gone from window tracking before
|
||||
processing the next command.
|
||||
|
||||
This aims to fix a flaky `popup-positions` test.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4867>
|
||||
(cherry picked from commit 4ea89f1e3a586cd6b4d00290f6d071e59c2fc74a)
|
||||
---
|
||||
src/tests/test-runner.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c
|
||||
index e036b16bd6..412592e608 100644
|
||||
--- a/src/tests/test-runner.c
|
||||
+++ b/src/tests/test-runner.c
|
||||
@@ -3056,6 +3056,9 @@ test_case_do (TestCase *test,
|
||||
return FALSE;
|
||||
|
||||
g_hash_table_remove (test->popups, argv[1]);
|
||||
+
|
||||
+ if (!test_case_wait (test, error))
|
||||
+ return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
--
|
||||
2.51.0
|
||||
|
||||
223
0002-Revert-background-Plumb-color-state-through-backgrou.patch
Normal file
223
0002-Revert-background-Plumb-color-state-through-backgrou.patch
Normal file
@ -0,0 +1,223 @@
|
||||
From 7525f5b32799328ef2a2e8509b64dd6b7c264e15 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Fri, 7 Nov 2025 15:31:55 +0100
|
||||
Subject: [PATCH] Revert "background: Plumb color state through backgrounds"
|
||||
|
||||
This reverts commit e1a1247fb5889181fc64367798b08b54260853cc.
|
||||
---
|
||||
src/compositor/meta-background-actor.c | 25 ------------------
|
||||
.../meta-background-content-private.h | 2 --
|
||||
src/compositor/meta-background-content.c | 12 +--------
|
||||
.../meta-background-image-private.h | 26 -------------------
|
||||
src/compositor/meta-background-image.c | 11 +-------
|
||||
src/compositor/meta-background-private.h | 2 --
|
||||
src/compositor/meta-background.c | 17 +-----------
|
||||
7 files changed, 3 insertions(+), 92 deletions(-)
|
||||
delete mode 100644 src/compositor/meta-background-image-private.h
|
||||
|
||||
diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c
|
||||
index cf3d6a037e..71591a7e0f 100644
|
||||
--- a/src/compositor/meta-background-actor.c
|
||||
+++ b/src/compositor/meta-background-actor.c
|
||||
@@ -22,7 +22,6 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "compositor/meta-background-content-private.h"
|
||||
-#include "compositor/meta-background-private.h"
|
||||
#include "compositor/meta-cullable.h"
|
||||
#include "meta/meta-background-actor.h"
|
||||
|
||||
@@ -47,26 +46,6 @@ static void cullable_iface_init (MetaCullableInterface *iface);
|
||||
G_DEFINE_TYPE_WITH_CODE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR,
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
|
||||
|
||||
-static void
|
||||
-on_background_changed (MetaBackgroundContent *content,
|
||||
- GParamSpec *pspec,
|
||||
- gpointer data)
|
||||
-{
|
||||
- MetaBackgroundActor *self = META_BACKGROUND_ACTOR (data);
|
||||
- MetaBackground *background;
|
||||
- ClutterColorState *color_state;
|
||||
-
|
||||
- background = meta_background_content_get_background (content);
|
||||
- if (!background)
|
||||
- return;
|
||||
-
|
||||
- color_state = meta_background_get_color_state (background);
|
||||
- if (!color_state)
|
||||
- return;
|
||||
-
|
||||
- clutter_actor_set_color_state (CLUTTER_ACTOR (self), color_state);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
maybe_create_content (MetaBackgroundActor *self)
|
||||
{
|
||||
@@ -78,10 +57,6 @@ maybe_create_content (MetaBackgroundActor *self)
|
||||
content = meta_background_content_new (self->display, self->monitor);
|
||||
self->content = META_BACKGROUND_CONTENT (content);
|
||||
clutter_actor_set_content (CLUTTER_ACTOR (self), content);
|
||||
- g_signal_connect_object (content, "notify::background",
|
||||
- G_CALLBACK (on_background_changed), self,
|
||||
- G_CONNECT_DEFAULT);
|
||||
- on_background_changed (self->content, NULL, self);
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/src/compositor/meta-background-content-private.h b/src/compositor/meta-background-content-private.h
|
||||
index ac83784768..36031a43e1 100644
|
||||
--- a/src/compositor/meta-background-content-private.h
|
||||
+++ b/src/compositor/meta-background-content-private.h
|
||||
@@ -11,5 +11,3 @@ void meta_background_content_cull_unobscured (MetaBackgroundContent *self,
|
||||
|
||||
void meta_background_content_cull_redraw_clip (MetaBackgroundContent *self,
|
||||
MtkRegion *clip_region);
|
||||
-
|
||||
-MetaBackground * meta_background_content_get_background (MetaBackgroundContent *self);
|
||||
diff --git a/src/compositor/meta-background-content.c b/src/compositor/meta-background-content.c
|
||||
index 918d5f8112..481765c8e9 100644
|
||||
--- a/src/compositor/meta-background-content.c
|
||||
+++ b/src/compositor/meta-background-content.c
|
||||
@@ -303,7 +303,6 @@ on_background_changed (MetaBackground *background,
|
||||
{
|
||||
invalidate_pipeline (self, CHANGED_BACKGROUND);
|
||||
clutter_content_invalidate (CLUTTER_CONTENT (self));
|
||||
- g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_BACKGROUND]);
|
||||
}
|
||||
|
||||
static CoglPipeline *
|
||||
@@ -970,9 +969,7 @@ meta_background_content_class_init (MetaBackgroundContentClass *klass)
|
||||
properties[PROP_BACKGROUND] =
|
||||
g_param_spec_object ("background", NULL, NULL,
|
||||
META_TYPE_BACKGROUND,
|
||||
- G_PARAM_READWRITE |
|
||||
- G_PARAM_STATIC_STRINGS |
|
||||
- G_PARAM_EXPLICIT_NOTIFY);
|
||||
+ G_PARAM_READWRITE);
|
||||
|
||||
properties[PROP_GRADIENT] =
|
||||
g_param_spec_boolean ("gradient", NULL, NULL,
|
||||
@@ -1075,7 +1072,6 @@ meta_background_content_set_background (MetaBackgroundContent *self,
|
||||
|
||||
invalidate_pipeline (self, CHANGED_BACKGROUND);
|
||||
clutter_content_invalidate (CLUTTER_CONTENT (self));
|
||||
- g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_BACKGROUND]);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1233,9 +1229,3 @@ meta_background_content_cull_redraw_clip (MetaBackgroundContent *self,
|
||||
{
|
||||
set_clip_region (self, clip_region);
|
||||
}
|
||||
-
|
||||
-MetaBackground *
|
||||
-meta_background_content_get_background (MetaBackgroundContent *self)
|
||||
-{
|
||||
- return self->background;
|
||||
-}
|
||||
diff --git a/src/compositor/meta-background-image-private.h b/src/compositor/meta-background-image-private.h
|
||||
deleted file mode 100644
|
||||
index d29260d389..0000000000
|
||||
--- a/src/compositor/meta-background-image-private.h
|
||||
+++ /dev/null
|
||||
@@ -1,26 +0,0 @@
|
||||
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
-/*
|
||||
- * Copyright 2025 Red Hat, Inc.
|
||||
- *
|
||||
- * This program is free software; you can redistribute it and/or
|
||||
- * modify it under the terms of the GNU General Public License as
|
||||
- * published by the Free Software Foundation; either version 2 of the
|
||||
- * License, or (at your option) any later version.
|
||||
- *
|
||||
- * This program is distributed in the hope that it will be useful, but
|
||||
- * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
- * General Public License for more details.
|
||||
- *
|
||||
- * You should have received a copy of the GNU General Public License
|
||||
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
- *
|
||||
- * Author: Matthias Clasen <mclasen@redhat.com>
|
||||
- */
|
||||
-
|
||||
-#pragma once
|
||||
-
|
||||
-#include "clutter/clutter.h"
|
||||
-#include "meta/meta-background-image.h"
|
||||
-
|
||||
-ClutterColorState * meta_background_image_get_color_state (MetaBackgroundImage *self);
|
||||
diff --git a/src/compositor/meta-background-image.c b/src/compositor/meta-background-image.c
|
||||
index e5c879c892..9ac93fd636 100644
|
||||
--- a/src/compositor/meta-background-image.c
|
||||
+++ b/src/compositor/meta-background-image.c
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
-#include "compositor/meta-background-image-private.h"
|
||||
+#include "meta/meta-background-image.h"
|
||||
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#include <gio/gio.h>
|
||||
@@ -365,12 +365,3 @@ meta_background_image_get_texture (MetaBackgroundImage *image)
|
||||
|
||||
return image->texture;
|
||||
}
|
||||
-
|
||||
-ClutterColorState *
|
||||
-meta_background_image_get_color_state (MetaBackgroundImage *image,
|
||||
- ClutterContext *ctx)
|
||||
-{
|
||||
- g_return_val_if_fail (META_IS_BACKGROUND_IMAGE (image), NULL);
|
||||
-
|
||||
- return NULL;
|
||||
-}
|
||||
diff --git a/src/compositor/meta-background-private.h b/src/compositor/meta-background-private.h
|
||||
index 056e274dba..dca3a5d94b 100644
|
||||
--- a/src/compositor/meta-background-private.h
|
||||
+++ b/src/compositor/meta-background-private.h
|
||||
@@ -9,5 +9,3 @@ CoglTexture * meta_background_get_texture (MetaBackground *self,
|
||||
int monitor_index,
|
||||
MtkRectangle *texture_area,
|
||||
CoglPipelineWrapMode *wrap_mode);
|
||||
-
|
||||
-ClutterColorState * meta_background_get_color_state (MetaBackground *self);
|
||||
diff --git a/src/compositor/meta-background.c b/src/compositor/meta-background.c
|
||||
index 18833ff2e8..7e33bc1a9a 100644
|
||||
--- a/src/compositor/meta-background.c
|
||||
+++ b/src/compositor/meta-background.c
|
||||
@@ -24,11 +24,9 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
-#include "clutter/clutter-color-state.h"
|
||||
#include "compositor/cogl-utils.h"
|
||||
-#include "compositor/meta-background-image-private.h"
|
||||
-#include "meta/compositor.h"
|
||||
#include "meta/display.h"
|
||||
+#include "meta/meta-background-image.h"
|
||||
#include "meta/meta-background.h"
|
||||
#include "meta/meta-monitor-manager.h"
|
||||
#include "meta/util.h"
|
||||
@@ -1034,16 +1032,3 @@ meta_background_refresh_all (void)
|
||||
for (l = all_backgrounds; l; l = l->next)
|
||||
mark_changed (l->data);
|
||||
}
|
||||
-
|
||||
-ClutterColorState *
|
||||
-meta_background_get_color_state (MetaBackground *self)
|
||||
-{
|
||||
- g_return_val_if_fail (META_IS_BACKGROUND (self), NULL);
|
||||
-
|
||||
- if (self->background_image1)
|
||||
- return meta_background_image_get_color_state (self->background_image1);
|
||||
- else if (self->background_image2)
|
||||
- return meta_background_image_get_color_state (self->background_image2);
|
||||
- else
|
||||
- return NULL;
|
||||
-}
|
||||
--
|
||||
2.51.1
|
||||
|
||||
@ -1,66 +0,0 @@
|
||||
From beff8f13ed0cf16fa0b22f69de75f83e0378fdf1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 22 Jul 2024 12:37:01 +0200
|
||||
Subject: [PATCH 1/3] Revert "x11/window: Compare input shape to client rect
|
||||
when undecorating"
|
||||
|
||||
This reverts commit 1f1538be764ec5018b29d31c4486c0649a4e5068.
|
||||
---
|
||||
src/x11/window-x11.c | 16 +++++++++-------
|
||||
1 file changed, 9 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
|
||||
index adf5075a9b..e7c76dd674 100644
|
||||
--- a/src/x11/window-x11.c
|
||||
+++ b/src/x11/window-x11.c
|
||||
@@ -2415,7 +2415,6 @@ meta_window_x11_update_input_region (MetaWindow *window)
|
||||
g_autoptr (MtkRegion) region = NULL;
|
||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||
MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
|
||||
- MtkRectangle bounding_rect = { 0 };
|
||||
Window xwindow;
|
||||
|
||||
if (window->decorated)
|
||||
@@ -2427,14 +2426,10 @@ meta_window_x11_update_input_region (MetaWindow *window)
|
||||
return;
|
||||
}
|
||||
xwindow = priv->frame->xwindow;
|
||||
- bounding_rect.width = window->buffer_rect.width;
|
||||
- bounding_rect.height = window->buffer_rect.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
xwindow = priv->xwindow;
|
||||
- bounding_rect.width = priv->client_rect.width;
|
||||
- bounding_rect.height = priv->client_rect.height;
|
||||
}
|
||||
|
||||
if (META_X11_DISPLAY_HAS_SHAPE (x11_display))
|
||||
@@ -2478,8 +2473,8 @@ meta_window_x11_update_input_region (MetaWindow *window)
|
||||
else if (n_rects == 1 &&
|
||||
(rects[0].x == 0 &&
|
||||
rects[0].y == 0 &&
|
||||
- rects[0].width == bounding_rect.width &&
|
||||
- rects[0].height == bounding_rect.height))
|
||||
+ rects[0].width == window->buffer_rect.width &&
|
||||
+ rects[0].height == window->buffer_rect.height))
|
||||
{
|
||||
/* This is the bounding region case. Keep the
|
||||
* region as NULL. */
|
||||
@@ -2496,6 +2491,13 @@ meta_window_x11_update_input_region (MetaWindow *window)
|
||||
|
||||
if (region != NULL)
|
||||
{
|
||||
+ MtkRectangle bounding_rect;
|
||||
+
|
||||
+ bounding_rect.x = 0;
|
||||
+ bounding_rect.y = 0;
|
||||
+ bounding_rect.width = window->buffer_rect.width;
|
||||
+ bounding_rect.height = window->buffer_rect.height;
|
||||
+
|
||||
/* The shape we get back from the client may have coordinates
|
||||
* outside of the frame. The X SHAPE Extension requires that
|
||||
* the overall shape the client provides never exceeds the
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,178 +0,0 @@
|
||||
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
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
From fac0854a4f25e90c26e7b1078a4a6ec305c53f66 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Tue, 18 Feb 2025 17:43:36 +0100
|
||||
Subject: [PATCH] cursor-renderer/native: Cast MetaGpu to MetaGpuKms only if it
|
||||
is one
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Fixes crash in gnome-shell CSS styling test.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4289>
|
||||
---
|
||||
src/backends/native/meta-cursor-renderer-native.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index f0c373e7dc..9b079be023 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -329,7 +329,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||||
MetaRendererView *renderer_view = META_RENDERER_VIEW (view);
|
||||
MetaCrtc *crtc = meta_renderer_view_get_crtc (renderer_view);
|
||||
MetaCrtcNative *crtc_native = META_CRTC_NATIVE (crtc);
|
||||
- MetaGpuKms *gpu_kms = META_GPU_KMS (meta_crtc_get_gpu (crtc));
|
||||
+ MetaGpu *gpu = meta_crtc_get_gpu (crtc);
|
||||
ClutterColorState *target_color_state =
|
||||
clutter_stage_view_get_output_color_state (CLUTTER_STAGE_VIEW (view));
|
||||
CursorStageView *cursor_stage_view = NULL;
|
||||
@@ -339,7 +339,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||||
g_assert (cursor_stage_view);
|
||||
|
||||
if (!META_IS_CRTC_KMS (crtc) ||
|
||||
- !is_hw_cursor_available_for_gpu (gpu_kms) ||
|
||||
+ !is_hw_cursor_available_for_gpu (META_GPU_KMS (gpu)) ||
|
||||
!meta_crtc_native_is_hw_cursor_supported (crtc_native))
|
||||
{
|
||||
if (cursor_stage_view->has_hw_cursor)
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,88 +0,0 @@
|
||||
From 9b44ebf3269a7838d2288753dd66d48ebce8f8e2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Thu, 13 Feb 2025 17:36:10 +0100
|
||||
Subject: [PATCH] cursor-renderer/native: Fix crash with
|
||||
MUTTER_DEBUG_DISABLE_HW_CURSORS=1
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Don't try to realize the cursor sprite for the HW cursor when it's set.
|
||||
|
||||
v2:
|
||||
* Refactor is_hw_cursor_supported helper out of
|
||||
realize_cursor_sprite_from_wl_buffer_for_crtc. (Jonas Ådahl)
|
||||
v3:
|
||||
* Keep meta_crtc_native_is_hw_cursor_supported check in
|
||||
meta_cursor_renderer_native_update_cursor, to try and avoid
|
||||
mysterious CI failure.
|
||||
v4:
|
||||
* Rename is_hw_cursor_supported → is_hw_cursor_available_for_gpu
|
||||
and take a MetaGpuKms * parameter.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4272>
|
||||
---
|
||||
.../native/meta-cursor-renderer-native.c | 20 +++++++++++++++----
|
||||
1 file changed, 16 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index 2686e811b4..f0c373e7dc 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -285,6 +285,19 @@ on_cursor_sprite_texture_changed (MetaCursorSprite *cursor_sprite,
|
||||
invalidate_cursor_gpu_state (cursor_renderer, cursor_sprite);
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+is_hw_cursor_available_for_gpu (MetaGpuKms *gpu_kms)
|
||||
+{
|
||||
+ MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
+
|
||||
+ cursor_renderer_gpu_data =
|
||||
+ meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||||
+ if (!cursor_renderer_gpu_data || cursor_renderer_gpu_data->hw_cursor_broken)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
@@ -316,6 +329,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||||
MetaRendererView *renderer_view = META_RENDERER_VIEW (view);
|
||||
MetaCrtc *crtc = meta_renderer_view_get_crtc (renderer_view);
|
||||
MetaCrtcNative *crtc_native = META_CRTC_NATIVE (crtc);
|
||||
+ MetaGpuKms *gpu_kms = META_GPU_KMS (meta_crtc_get_gpu (crtc));
|
||||
ClutterColorState *target_color_state =
|
||||
clutter_stage_view_get_output_color_state (CLUTTER_STAGE_VIEW (view));
|
||||
CursorStageView *cursor_stage_view = NULL;
|
||||
@@ -325,6 +339,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *cursor_renderer,
|
||||
g_assert (cursor_stage_view);
|
||||
|
||||
if (!META_IS_CRTC_KMS (crtc) ||
|
||||
+ !is_hw_cursor_available_for_gpu (gpu_kms) ||
|
||||
!meta_crtc_native_is_hw_cursor_supported (crtc_native))
|
||||
{
|
||||
if (cursor_stage_view->has_hw_cursor)
|
||||
@@ -1051,16 +1066,13 @@ realize_cursor_sprite_from_wl_buffer_for_crtc (MetaCursorRenderer *renderer
|
||||
MetaCursorSprite *cursor_sprite = META_CURSOR_SPRITE (sprite_wayland);
|
||||
MetaGpu *gpu = meta_crtc_get_gpu (META_CRTC (crtc_kms));
|
||||
MetaGpuKms *gpu_kms = META_GPU_KMS (gpu);
|
||||
- MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
CoglTexture *texture;
|
||||
uint width, height;
|
||||
MetaWaylandBuffer *buffer;
|
||||
struct wl_resource *buffer_resource;
|
||||
struct wl_shm_buffer *shm_buffer;
|
||||
|
||||
- cursor_renderer_gpu_data =
|
||||
- meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||||
- if (!cursor_renderer_gpu_data || cursor_renderer_gpu_data->hw_cursor_broken)
|
||||
+ if (!is_hw_cursor_available_for_gpu (gpu_kms))
|
||||
return FALSE;
|
||||
|
||||
buffer = meta_cursor_sprite_wayland_get_buffer (sprite_wayland);
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
From 7e4cae2f91f01db5083622b18d7173c8d9bf6540 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Thu, 6 Feb 2025 17:34:47 +0100
|
||||
Subject: [PATCH 1/3] cursor-renderer/native: Pass destination format to
|
||||
scale_and_transform
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Preparation for next commit, no functional change intended.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4255>
|
||||
---
|
||||
src/backends/native/meta-cursor-renderer-native.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index 103d8e66e1..0db0dde022 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -774,6 +774,7 @@ scale_and_transform_cursor_sprite_cpu (MetaCursorRendererNative *cursor_renderer
|
||||
int height,
|
||||
int rowstride,
|
||||
const graphene_matrix_t *matrix,
|
||||
+ CoglPixelFormat dst_format,
|
||||
int dst_width,
|
||||
int dst_height,
|
||||
GError **error)
|
||||
@@ -801,7 +802,7 @@ scale_and_transform_cursor_sprite_cpu (MetaCursorRendererNative *cursor_renderer
|
||||
dst_texture = cogl_texture_2d_new_with_format (cogl_context,
|
||||
dst_width,
|
||||
dst_height,
|
||||
- COGL_PIXEL_FORMAT_BGRA_8888_PRE);
|
||||
+ dst_format);
|
||||
offscreen = cogl_offscreen_new_with_texture (dst_texture);
|
||||
if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (offscreen), error))
|
||||
return NULL;
|
||||
@@ -976,6 +977,7 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
height,
|
||||
rowstride,
|
||||
&matrix,
|
||||
+ COGL_PIXEL_FORMAT_BGRA_8888_PRE,
|
||||
crtc_dst_width,
|
||||
crtc_dst_height,
|
||||
&error);
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,45 +0,0 @@
|
||||
From ba3b709e08e155a10abb3e88145fb7a4d342a0aa Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Tue, 11 Feb 2025 15:42:43 +0100
|
||||
Subject: [PATCH] cursor-renderer/native: Skip init_hw_cursor_support_for_gpu
|
||||
for headless
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
By definition, headless means no HW display output, so initializing HW
|
||||
cursor support makes no sense.
|
||||
|
||||
Fixes hitting the g_warning in tests when there's a GPU device
|
||||
available, breaking them.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4259>
|
||||
---
|
||||
src/backends/native/meta-cursor-renderer-native.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index 7581d9b492..2686e811b4 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -1350,12 +1350,17 @@ static void
|
||||
init_hw_cursor_support_for_gpu (MetaGpuKms *gpu_kms)
|
||||
{
|
||||
MetaKmsDevice *kms_device = meta_gpu_kms_get_kms_device (gpu_kms);
|
||||
+ MetaKms *kms = meta_kms_device_get_kms (kms_device);
|
||||
+ MetaBackend *backend = meta_kms_get_backend (kms);
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
const MetaFormatInfo *format_info;
|
||||
struct gbm_device *gbm_device;
|
||||
uint64_t width, height;
|
||||
MetaDrmFormatBuf tmp;
|
||||
|
||||
+ if (meta_backend_is_headless (backend))
|
||||
+ return;
|
||||
+
|
||||
cursor_renderer_gpu_data =
|
||||
meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,338 +0,0 @@
|
||||
From 406de0d6d72bcd68ccc71880e618d933537d755c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Mon, 28 Oct 2024 08:37:12 +0100
|
||||
Subject: [PATCH 1/5] monitor-manager: Add forlease config to monitors.xml
|
||||
|
||||
Allow to configure a list of monitors as available for lease in
|
||||
monitors.xml.
|
||||
|
||||
The monitors available for lease, must be disabled as well.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4112>
|
||||
---
|
||||
src/backends/meta-monitor-config-manager.c | 23 +++++++
|
||||
src/backends/meta-monitor-config-manager.h | 2 +
|
||||
src/backends/meta-monitor-config-store.c | 79 +++++++++++++++++++++-
|
||||
3 files changed, 103 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
|
||||
index 279169ace9..ecf4ee8202 100644
|
||||
--- a/src/backends/meta-monitor-config-manager.c
|
||||
+++ b/src/backends/meta-monitor-config-manager.c
|
||||
@@ -1495,6 +1495,8 @@ meta_monitors_config_key_new (GList *logical_monitor_conf
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Monitors for lease must be disabled (see meta_verify_monitors_config ()).
|
||||
+ Therefore, there is no need to include them here. */
|
||||
for (l = disabled_monitor_specs; l; l = l->next)
|
||||
{
|
||||
MetaMonitorSpec *monitor_spec = l->data;
|
||||
@@ -1598,6 +1600,7 @@ meta_monitors_config_set_parent_config (MetaMonitorsConfig *config,
|
||||
MetaMonitorsConfig *
|
||||
meta_monitors_config_new_full (GList *logical_monitor_configs,
|
||||
GList *disabled_monitor_specs,
|
||||
+ GList *for_lease_monitor_specs,
|
||||
MetaLogicalMonitorLayoutMode layout_mode,
|
||||
MetaMonitorsConfigFlag flags)
|
||||
{
|
||||
@@ -1606,6 +1609,7 @@ meta_monitors_config_new_full (GList *logical_monitor_con
|
||||
config = g_object_new (META_TYPE_MONITORS_CONFIG, NULL);
|
||||
config->logical_monitor_configs = logical_monitor_configs;
|
||||
config->disabled_monitor_specs = disabled_monitor_specs;
|
||||
+ config->for_lease_monitor_specs = for_lease_monitor_specs;
|
||||
config->layout_mode = layout_mode;
|
||||
config->key = meta_monitors_config_key_new (logical_monitor_configs,
|
||||
disabled_monitor_specs,
|
||||
@@ -1649,6 +1653,7 @@ meta_monitors_config_new (MetaMonitorManager *monitor_manager,
|
||||
|
||||
return meta_monitors_config_new_full (logical_monitor_configs,
|
||||
disabled_monitor_specs,
|
||||
+ NULL,
|
||||
layout_mode,
|
||||
flags);
|
||||
}
|
||||
@@ -1664,6 +1669,8 @@ meta_monitors_config_finalize (GObject *object)
|
||||
(GDestroyNotify) meta_logical_monitor_config_free);
|
||||
g_list_free_full (config->disabled_monitor_specs,
|
||||
(GDestroyNotify) meta_monitor_spec_free);
|
||||
+ g_list_free_full (config->for_lease_monitor_specs,
|
||||
+ (GDestroyNotify) meta_monitor_spec_free);
|
||||
|
||||
G_OBJECT_CLASS (meta_monitors_config_parent_class)->finalize (object);
|
||||
}
|
||||
@@ -1907,5 +1914,21 @@ meta_verify_monitors_config (MetaMonitorsConfig *config,
|
||||
}
|
||||
}
|
||||
|
||||
+ for (l = config->for_lease_monitor_specs; l; l = l->next)
|
||||
+ {
|
||||
+ MetaMonitorSpec *monitor_spec = l->data;
|
||||
+ gpointer disabled = NULL;
|
||||
+
|
||||
+ disabled = g_list_find_custom (config->disabled_monitor_specs,
|
||||
+ monitor_spec,
|
||||
+ (GCompareFunc) meta_monitor_spec_compare);
|
||||
+ if (!disabled)
|
||||
+ {
|
||||
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
+ "For lease monitor must be explicitly disabled");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return TRUE;
|
||||
}
|
||||
diff --git a/src/backends/meta-monitor-config-manager.h b/src/backends/meta-monitor-config-manager.h
|
||||
index 8d21c8694c..87a29bc2dd 100644
|
||||
--- a/src/backends/meta-monitor-config-manager.h
|
||||
+++ b/src/backends/meta-monitor-config-manager.h
|
||||
@@ -67,6 +67,7 @@ struct _MetaMonitorsConfig
|
||||
GList *logical_monitor_configs;
|
||||
|
||||
GList *disabled_monitor_specs;
|
||||
+ GList *for_lease_monitor_specs;
|
||||
|
||||
MetaMonitorsConfigFlag flags;
|
||||
|
||||
@@ -142,6 +143,7 @@ void meta_monitor_config_manager_save_current (MetaMonitorConfigManager *config_
|
||||
META_EXPORT_TEST
|
||||
MetaMonitorsConfig * meta_monitors_config_new_full (GList *logical_monitor_configs,
|
||||
GList *disabled_monitors,
|
||||
+ GList *for_lease_monitors,
|
||||
MetaLogicalMonitorLayoutMode layout_mode,
|
||||
MetaMonitorsConfigFlag flags);
|
||||
|
||||
diff --git a/src/backends/meta-monitor-config-store.c b/src/backends/meta-monitor-config-store.c
|
||||
index 6e8aed1f9e..eb22dc3f36 100644
|
||||
--- a/src/backends/meta-monitor-config-store.c
|
||||
+++ b/src/backends/meta-monitor-config-store.c
|
||||
@@ -89,6 +89,14 @@
|
||||
* <serial>Serial C</serial>
|
||||
* </monitorspec>
|
||||
* </disabled>
|
||||
+ * <forlease>
|
||||
+ * <monitorspec>
|
||||
+ * <connector>LVDS3</connector>
|
||||
+ * <vendor>Vendor C</vendor>
|
||||
+ * <product>Product C</product>
|
||||
+ * <serial>Serial C</serial>
|
||||
+ * </monitorspec>
|
||||
+ * </forlease>
|
||||
* </configuration>
|
||||
* </monitors>
|
||||
*
|
||||
@@ -158,6 +166,7 @@ typedef enum
|
||||
STATE_MONITOR_MAXBPC,
|
||||
STATE_MONITOR_RGB_RANGE,
|
||||
STATE_DISABLED,
|
||||
+ STATE_FOR_LEASE,
|
||||
STATE_POLICY,
|
||||
STATE_STORES,
|
||||
STATE_STORE,
|
||||
@@ -184,6 +193,7 @@ typedef struct
|
||||
MetaMonitorConfig *current_monitor_config;
|
||||
MetaLogicalMonitorConfig *current_logical_monitor_config;
|
||||
GList *current_disabled_monitor_specs;
|
||||
+ GList *current_for_lease_monitor_specs;
|
||||
gboolean seen_policy;
|
||||
gboolean seen_stores;
|
||||
gboolean seen_dbus;
|
||||
@@ -333,6 +343,10 @@ handle_start_element (GMarkupParseContext *context,
|
||||
{
|
||||
parser->state = STATE_DISABLED;
|
||||
}
|
||||
+ else if (g_str_equal (element_name, "forlease"))
|
||||
+ {
|
||||
+ parser->state = STATE_FOR_LEASE;
|
||||
+ }
|
||||
else
|
||||
{
|
||||
enter_unknown_element (parser, element_name,
|
||||
@@ -578,6 +592,22 @@ handle_start_element (GMarkupParseContext *context,
|
||||
return;
|
||||
}
|
||||
|
||||
+ case STATE_FOR_LEASE:
|
||||
+ {
|
||||
+ if (!g_str_equal (element_name, "monitorspec"))
|
||||
+ {
|
||||
+ g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT,
|
||||
+ "Invalid element '%s' under forlease", element_name);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ parser->current_monitor_spec = g_new0 (MetaMonitorSpec, 1);
|
||||
+ parser->monitor_spec_parent_state = STATE_FOR_LEASE;
|
||||
+ parser->state = STATE_MONITOR_SPEC;
|
||||
+
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
case STATE_POLICY:
|
||||
{
|
||||
if (!(parser->extra_config_flags &
|
||||
@@ -673,6 +703,15 @@ finish_monitor_spec (ConfigParser *parser)
|
||||
parser->current_monitor_spec);
|
||||
parser->current_monitor_spec = NULL;
|
||||
|
||||
+ return;
|
||||
+ }
|
||||
+ case STATE_FOR_LEASE:
|
||||
+ {
|
||||
+ parser->current_for_lease_monitor_specs =
|
||||
+ g_list_prepend (parser->current_for_lease_monitor_specs,
|
||||
+ parser->current_monitor_spec);
|
||||
+ parser->current_monitor_spec = NULL;
|
||||
+
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -729,12 +768,15 @@ static gboolean
|
||||
detect_layout_mode_configs (MetaMonitorManager *monitor_manager,
|
||||
GList *logical_monitor_configs,
|
||||
GList *disabled_monitor_specs,
|
||||
+ GList *for_lease_monitor_specs,
|
||||
MetaMonitorsConfigFlag config_flags,
|
||||
MetaMonitorsConfig **physical_layout_mode_config,
|
||||
MetaMonitorsConfig **logical_layout_mode_config,
|
||||
GError **error)
|
||||
{
|
||||
- GList *logical_monitor_configs_copy, *disabled_monitor_specs_copy;
|
||||
+ GList *logical_monitor_configs_copy;
|
||||
+ GList *disabled_monitor_specs_copy;
|
||||
+ GList *for_lease_monitor_specs_copy;
|
||||
MetaMonitorsConfig *physical_config, *logical_config;
|
||||
g_autoptr (GError) local_error_physical = NULL;
|
||||
g_autoptr (GError) local_error_logical = NULL;
|
||||
@@ -743,12 +785,15 @@ detect_layout_mode_configs (MetaMonitorManager *monitor_manager,
|
||||
meta_clone_logical_monitor_config_list (logical_monitor_configs);
|
||||
disabled_monitor_specs_copy =
|
||||
g_list_copy_deep (disabled_monitor_specs, (GCopyFunc) meta_monitor_spec_clone, NULL);
|
||||
+ for_lease_monitor_specs_copy =
|
||||
+ g_list_copy_deep (for_lease_monitor_specs, (GCopyFunc) meta_monitor_spec_clone, NULL);
|
||||
|
||||
derive_logical_monitor_layouts (logical_monitor_configs,
|
||||
META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL);
|
||||
physical_config =
|
||||
meta_monitors_config_new_full (g_steal_pointer (&logical_monitor_configs),
|
||||
g_steal_pointer (&disabled_monitor_specs),
|
||||
+ g_steal_pointer (&for_lease_monitor_specs),
|
||||
META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL,
|
||||
config_flags);
|
||||
|
||||
@@ -761,6 +806,7 @@ detect_layout_mode_configs (MetaMonitorManager *monitor_manager,
|
||||
logical_config =
|
||||
meta_monitors_config_new_full (g_steal_pointer (&logical_monitor_configs_copy),
|
||||
g_steal_pointer (&disabled_monitor_specs_copy),
|
||||
+ g_steal_pointer (&for_lease_monitor_specs_copy),
|
||||
META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL,
|
||||
config_flags);
|
||||
|
||||
@@ -1207,6 +1253,7 @@ static MetaMonitorsConfig *
|
||||
attempt_layout_mode_conversion (MetaMonitorManager *monitor_manager,
|
||||
GList *logical_monitor_configs,
|
||||
GList *disabled_monitor_specs,
|
||||
+ GList *for_lease_monitor_specs,
|
||||
MetaMonitorsConfigFlag config_flags)
|
||||
{
|
||||
GList *logical_monitor_configs_copy;
|
||||
@@ -1251,6 +1298,9 @@ create_full_config:
|
||||
g_list_copy_deep (disabled_monitor_specs,
|
||||
(GCopyFunc) meta_monitor_spec_clone,
|
||||
NULL),
|
||||
+ g_list_copy_deep (for_lease_monitor_specs,
|
||||
+ (GCopyFunc) meta_monitor_spec_clone,
|
||||
+ NULL),
|
||||
META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL,
|
||||
config_flags);
|
||||
|
||||
@@ -1438,6 +1488,14 @@ handle_end_element (GMarkupParseContext *context,
|
||||
return;
|
||||
}
|
||||
|
||||
+ case STATE_FOR_LEASE:
|
||||
+ {
|
||||
+ g_assert (g_str_equal (element_name, "forlease"));
|
||||
+
|
||||
+ parser->state = STATE_CONFIGURATION;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
case STATE_CONFIGURATION:
|
||||
{
|
||||
MetaMonitorConfigStore *store = parser->config_store;
|
||||
@@ -1458,6 +1516,7 @@ handle_end_element (GMarkupParseContext *context,
|
||||
if (!detect_layout_mode_configs (store->monitor_manager,
|
||||
parser->current_logical_monitor_configs,
|
||||
parser->current_disabled_monitor_specs,
|
||||
+ parser->current_for_lease_monitor_specs,
|
||||
config_flags,
|
||||
&physical_layout_mode_config,
|
||||
&logical_layout_mode_config,
|
||||
@@ -1465,11 +1524,13 @@ handle_end_element (GMarkupParseContext *context,
|
||||
{
|
||||
parser->current_logical_monitor_configs = NULL;
|
||||
parser->current_disabled_monitor_specs = NULL;
|
||||
+ parser->current_for_lease_monitor_specs = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
parser->current_logical_monitor_configs = NULL;
|
||||
parser->current_disabled_monitor_specs = NULL;
|
||||
+ parser->current_for_lease_monitor_specs = NULL;
|
||||
|
||||
if (physical_layout_mode_config)
|
||||
{
|
||||
@@ -1487,6 +1548,7 @@ handle_end_element (GMarkupParseContext *context,
|
||||
attempt_layout_mode_conversion (store->monitor_manager,
|
||||
physical_layout_mode_config->logical_monitor_configs,
|
||||
physical_layout_mode_config->disabled_monitor_specs,
|
||||
+ physical_layout_mode_config->for_lease_monitor_specs,
|
||||
config_flags);
|
||||
}
|
||||
}
|
||||
@@ -1508,11 +1570,13 @@ handle_end_element (GMarkupParseContext *context,
|
||||
config =
|
||||
meta_monitors_config_new_full (parser->current_logical_monitor_configs,
|
||||
parser->current_disabled_monitor_specs,
|
||||
+ parser->current_for_lease_monitor_specs,
|
||||
layout_mode,
|
||||
config_flags);
|
||||
|
||||
parser->current_logical_monitor_configs = NULL;
|
||||
parser->current_disabled_monitor_specs = NULL;
|
||||
+ parser->current_for_lease_monitor_specs = NULL;
|
||||
|
||||
if (!meta_verify_monitors_config (config, store->monitor_manager,
|
||||
error))
|
||||
@@ -1747,6 +1811,7 @@ handle_text (GMarkupParseContext *context,
|
||||
case STATE_MONITOR_MODE:
|
||||
case STATE_TRANSFORM:
|
||||
case STATE_DISABLED:
|
||||
+ case STATE_FOR_LEASE:
|
||||
case STATE_POLICY:
|
||||
case STATE_STORES:
|
||||
{
|
||||
@@ -2323,6 +2388,18 @@ generate_config_xml (MetaMonitorConfigStore *config_store)
|
||||
g_string_append (buffer, " </disabled>\n");
|
||||
}
|
||||
|
||||
+ if (config->for_lease_monitor_specs)
|
||||
+ {
|
||||
+ g_string_append (buffer, " <forlease>\n");
|
||||
+ for (l = config->for_lease_monitor_specs; l; l = l->next)
|
||||
+ {
|
||||
+ MetaMonitorSpec *monitor_spec = l->data;
|
||||
+
|
||||
+ append_monitor_spec (buffer, monitor_spec, " ");
|
||||
+ }
|
||||
+ g_string_append (buffer, " </forlease>\n");
|
||||
+ }
|
||||
+
|
||||
g_string_append (buffer, " </configuration>\n");
|
||||
}
|
||||
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,201 +0,0 @@
|
||||
From c93e06696fea37303e4d9143ed62a31a97532c51 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Mon, 4 Nov 2024 19:12:19 +0100
|
||||
Subject: [PATCH 1/3] monitor-manager: Return for lease status in
|
||||
GetCurrentState
|
||||
|
||||
Add a new property to the list of monitors returned by the
|
||||
GetCurrentState D-Bus API indicating whether the monitor is available
|
||||
for lease or not.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4121>
|
||||
---
|
||||
.../org.gnome.Mutter.DisplayConfig.xml | 1 +
|
||||
src/backends/meta-monitor-manager.c | 6 +
|
||||
src/tests/monitor-unit-tests.c | 127 ++++++++++++++++++
|
||||
3 files changed, 134 insertions(+)
|
||||
|
||||
diff --git a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
|
||||
index 3c28814b16..192c08a796 100644
|
||||
--- a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
|
||||
+++ b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
|
||||
@@ -392,6 +392,7 @@
|
||||
- "min-refresh-rate" (i): minimum refresh rate of monitor when
|
||||
Variable Refresh Rate is active (absence
|
||||
of this means unknown)
|
||||
+ - "is-for-lease" (b): whether the monitor is for lease or not
|
||||
|
||||
Possible mode flags:
|
||||
1 : preferred mode
|
||||
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
|
||||
index 55816ed7bb..127181df60 100644
|
||||
--- a/src/backends/meta-monitor-manager.c
|
||||
+++ b/src/backends/meta-monitor-manager.c
|
||||
@@ -2032,6 +2032,7 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
|
||||
GVariantBuilder monitor_properties_builder;
|
||||
GList *k;
|
||||
gboolean is_builtin;
|
||||
+ gboolean is_for_lease;
|
||||
const char *display_name;
|
||||
|
||||
current_mode = meta_monitor_get_current_mode (monitor);
|
||||
@@ -2153,6 +2154,11 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
|
||||
g_variant_new_int32 (min_refresh_rate));
|
||||
}
|
||||
|
||||
+ is_for_lease = meta_monitor_is_for_lease (monitor);
|
||||
+ g_variant_builder_add (&monitor_properties_builder, "{sv}",
|
||||
+ "is-for-lease",
|
||||
+ g_variant_new_boolean (is_for_lease));
|
||||
+
|
||||
g_variant_builder_add (&monitors_builder, MONITOR_FORMAT,
|
||||
monitor_spec->connector,
|
||||
monitor_spec->vendor,
|
||||
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
|
||||
index 0d5d1511ea..1f87c36528 100644
|
||||
--- a/src/tests/monitor-unit-tests.c
|
||||
+++ b/src/tests/monitor-unit-tests.c
|
||||
@@ -9474,6 +9474,131 @@ meta_test_monitor_custom_for_lease_invalid_config (void)
|
||||
g_test_assert_expected_messages ();
|
||||
}
|
||||
|
||||
+static void
|
||||
+on_proxy_call_cb (GObject *object,
|
||||
+ GAsyncResult *res,
|
||||
+ gpointer user_data)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ GVariant **ret = user_data;
|
||||
+
|
||||
+ *ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (object), res, &error);
|
||||
+ g_assert_no_error (error);
|
||||
+ g_assert_nonnull (ret);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+assert_monitor_state (GVariant *state,
|
||||
+ guint monitor_index,
|
||||
+ const char *connector,
|
||||
+ gboolean is_for_lease)
|
||||
+{
|
||||
+ g_autoptr (GVariant) monitors = NULL;
|
||||
+ g_autoptr (GVariant) monitor = NULL;
|
||||
+ g_autoptr (GVariant) monitor_spec = NULL;
|
||||
+ g_autoptr (GVariant) spec_connector = NULL;
|
||||
+ g_autoptr (GVariant) monitor_properties = NULL;
|
||||
+ g_autoptr (GVariant) for_lease_property = NULL;
|
||||
+
|
||||
+ monitors = g_variant_get_child_value (state, 1);
|
||||
+ monitor = g_variant_get_child_value (monitors, monitor_index);
|
||||
+
|
||||
+ monitor_spec = g_variant_get_child_value (monitor, 0);
|
||||
+ spec_connector = g_variant_get_child_value (monitor_spec, 0);
|
||||
+ g_assert_cmpstr (g_variant_get_string (spec_connector, NULL), ==, connector);
|
||||
+
|
||||
+ monitor_properties = g_variant_get_child_value (monitor, 2);
|
||||
+ for_lease_property = g_variant_lookup_value (monitor_properties,
|
||||
+ "is-for-lease",
|
||||
+ G_VARIANT_TYPE_BOOLEAN);
|
||||
+ g_assert (g_variant_get_boolean (for_lease_property) == is_for_lease);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+meta_test_monitor_custom_for_lease_config_dbus (void)
|
||||
+{
|
||||
+ MonitorTestCaseSetup test_case_setup = {
|
||||
+ .modes = {
|
||||
+ {
|
||||
+ .width = 800,
|
||||
+ .height = 600,
|
||||
+ .refresh_rate = 60.0
|
||||
+ }
|
||||
+ },
|
||||
+ .n_modes = 1,
|
||||
+ .outputs = {
|
||||
+ {
|
||||
+ .crtc = -1,
|
||||
+ .modes = { 0 },
|
||||
+ .n_modes = 1,
|
||||
+ .preferred_mode = 0,
|
||||
+ .possible_crtcs = { 0, 1 },
|
||||
+ .n_possible_crtcs = 2,
|
||||
+ .width_mm = 222,
|
||||
+ .height_mm = 125,
|
||||
+ .serial = "0x123456",
|
||||
+ },
|
||||
+ {
|
||||
+ .crtc = -1,
|
||||
+ .modes = { 0 },
|
||||
+ .n_modes = 1,
|
||||
+ .preferred_mode = 0,
|
||||
+ .possible_crtcs = { 0, 1 },
|
||||
+ .n_possible_crtcs = 2,
|
||||
+ .width_mm = 222,
|
||||
+ .height_mm = 125,
|
||||
+ .serial = "0x654321"
|
||||
+ }
|
||||
+ },
|
||||
+ .n_outputs = 2,
|
||||
+ .crtcs = {
|
||||
+ {
|
||||
+ .current_mode = -1
|
||||
+ },
|
||||
+ {
|
||||
+ .current_mode = -1
|
||||
+ }
|
||||
+ },
|
||||
+ .n_crtcs = 2
|
||||
+ };
|
||||
+ MetaMonitorTestSetup *test_setup;
|
||||
+ g_autoptr (GDBusProxy) display_config_proxy = NULL;
|
||||
+ g_autoptr (GVariant) state = NULL;
|
||||
+
|
||||
+ test_setup = meta_create_monitor_test_setup (test_backend,
|
||||
+ &test_case_setup,
|
||||
+ MONITOR_TEST_FLAG_NONE);
|
||||
+ meta_set_custom_monitor_config (test_context, "forlease.xml");
|
||||
+ emulate_hotplug (test_setup);
|
||||
+ check_monitor_test_clients_state ();
|
||||
+
|
||||
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
|
||||
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||
+ NULL,
|
||||
+ "org.gnome.Mutter.DisplayConfig",
|
||||
+ "/org/gnome/Mutter/DisplayConfig",
|
||||
+ "org.gnome.Mutter.DisplayConfig",
|
||||
+ NULL,
|
||||
+ proxy_ready_cb,
|
||||
+ &display_config_proxy);
|
||||
+ while (!display_config_proxy)
|
||||
+ g_main_context_iteration (NULL, TRUE);
|
||||
+
|
||||
+ g_dbus_proxy_call (display_config_proxy,
|
||||
+ "GetCurrentState",
|
||||
+ NULL,
|
||||
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
|
||||
+ -1,
|
||||
+ NULL,
|
||||
+ on_proxy_call_cb,
|
||||
+ &state);
|
||||
+ while (!state)
|
||||
+ g_main_context_iteration (NULL, TRUE);
|
||||
+
|
||||
+ assert_monitor_state (state, 0, "DP-1", FALSE);
|
||||
+ assert_monitor_state (state, 1, "DP-2", TRUE);
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
quit_main_loop (gpointer data)
|
||||
{
|
||||
@@ -10704,6 +10829,8 @@ init_monitor_tests (void)
|
||||
meta_test_monitor_custom_for_lease_config);
|
||||
add_monitor_test ("/backends/monitor/custom/for-lease-invalid-config",
|
||||
meta_test_monitor_custom_for_lease_invalid_config);
|
||||
+ add_monitor_test ("/backends/monitor/custom/for-lease-config-dbus",
|
||||
+ meta_test_monitor_custom_for_lease_config_dbus);
|
||||
|
||||
add_monitor_test ("/backends/monitor/migrated/rotated",
|
||||
meta_test_monitor_migrated_rotated);
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
From cbe6fb86ce1e71c7360974a960db6bf79eb1ebde Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Fri, 2 Dec 2022 22:49:41 +0100
|
||||
Subject: [PATCH] place: Always center initial-setup/fedora-welcome
|
||||
|
||||
---
|
||||
src/core/place.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/core/place.c b/src/core/place.c
|
||||
index 8a06ccb667..f34ae7f43d 100644
|
||||
--- a/src/core/place.c
|
||||
+++ b/src/core/place.c
|
||||
@@ -377,6 +377,11 @@ window_place_centered (MetaWindow *window)
|
||||
|
||||
type = window->type;
|
||||
|
||||
+ if (g_strcmp0 (meta_window_get_wm_class (window), "org.gnome.InitialSetup") == 0 ||
|
||||
+ g_strcmp0 (meta_window_get_wm_class (window), "org.fedoraproject.welcome-screen") == 0 ||
|
||||
+ g_strcmp0 (meta_window_get_wm_class (window), "fedora-welcome") == 0)
|
||||
+ return TRUE;
|
||||
+
|
||||
return (type == META_WINDOW_DIALOG ||
|
||||
type == META_WINDOW_MODAL_DIALOG ||
|
||||
type == META_WINDOW_SPLASHSCREEN ||
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,81 +0,0 @@
|
||||
From cadb4cdbb15a58cc38cc15cfe1ad457ffda7d7a0 Mon Sep 17 00:00:00 2001
|
||||
From: Dudemanguy <random342@airmail.cc>
|
||||
Date: Thu, 6 Feb 2025 08:21:16 -0600
|
||||
Subject: [PATCH 1/2] wayland: Fix refresh interval reporting in
|
||||
presentation-time version 1
|
||||
|
||||
Version 1 of the presentation protocol requires that 0 be sent for the
|
||||
refresh rate for variable refresh rate. Fix this by checking the mode
|
||||
during the presentation event.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4227>
|
||||
---
|
||||
src/wayland/meta-wayland-outputs.c | 6 ++++++
|
||||
src/wayland/meta-wayland-outputs.h | 2 ++
|
||||
src/wayland/meta-wayland-presentation-time.c | 13 ++++++++++++-
|
||||
3 files changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-outputs.c b/src/wayland/meta-wayland-outputs.c
|
||||
index d860ac91f7..1c09f6f101 100644
|
||||
--- a/src/wayland/meta-wayland-outputs.c
|
||||
+++ b/src/wayland/meta-wayland-outputs.c
|
||||
@@ -92,6 +92,12 @@ meta_wayland_output_get_monitor (MetaWaylandOutput *wayland_output)
|
||||
return wayland_output->monitor;
|
||||
}
|
||||
|
||||
+MetaMonitorMode *
|
||||
+meta_wayland_output_get_monitor_mode (MetaWaylandOutput *wayland_output)
|
||||
+{
|
||||
+ return wayland_output->mode;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
output_resource_destroy (struct wl_resource *res)
|
||||
{
|
||||
diff --git a/src/wayland/meta-wayland-outputs.h b/src/wayland/meta-wayland-outputs.h
|
||||
index f28b591220..d27948d153 100644
|
||||
--- a/src/wayland/meta-wayland-outputs.h
|
||||
+++ b/src/wayland/meta-wayland-outputs.h
|
||||
@@ -33,6 +33,8 @@ const GList * meta_wayland_output_get_resources (MetaWaylandOutput *wayland_outp
|
||||
|
||||
MetaMonitor * meta_wayland_output_get_monitor (MetaWaylandOutput *wayland_output);
|
||||
|
||||
+MetaMonitorMode * meta_wayland_output_get_monitor_mode (MetaWaylandOutput *wayland_output);
|
||||
+
|
||||
void meta_wayland_outputs_finalize (MetaWaylandCompositor *compositor);
|
||||
|
||||
void meta_wayland_outputs_init (MetaWaylandCompositor *compositor);
|
||||
diff --git a/src/wayland/meta-wayland-presentation-time.c b/src/wayland/meta-wayland-presentation-time.c
|
||||
index abddb63b12..13a98a984b 100644
|
||||
--- a/src/wayland/meta-wayland-presentation-time.c
|
||||
+++ b/src/wayland/meta-wayland-presentation-time.c
|
||||
@@ -323,6 +323,8 @@ meta_wayland_presentation_feedback_present (MetaWaylandPresentationFeedback *fee
|
||||
uint32_t seq_hi, seq_lo;
|
||||
uint32_t flags;
|
||||
const GList *l;
|
||||
+ MetaMonitorMode *mode;
|
||||
+ gboolean is_vrr;
|
||||
|
||||
if (output == NULL)
|
||||
{
|
||||
@@ -337,7 +339,16 @@ meta_wayland_presentation_feedback_present (MetaWaylandPresentationFeedback *fee
|
||||
tv_sec_lo = time_s;
|
||||
tv_nsec = (uint32_t) us2ns (time_us - s2us (time_s));
|
||||
|
||||
- refresh_interval_ns = (uint32_t) (0.5 + s2ns (1) / frame_info->refresh_rate);
|
||||
+ mode = meta_wayland_output_get_monitor_mode (output);
|
||||
+
|
||||
+ is_vrr = meta_monitor_mode_get_refresh_rate_mode (mode) ==
|
||||
+ META_CRTC_REFRESH_RATE_MODE_VARIABLE;
|
||||
+
|
||||
+ /* The refresh rate interval is required to be 0 for vrr. */
|
||||
+ if (is_vrr)
|
||||
+ refresh_interval_ns = 0;
|
||||
+ else
|
||||
+ refresh_interval_ns = (uint32_t) (0.5 + s2ns (1) / frame_info->refresh_rate);
|
||||
|
||||
maybe_update_presentation_sequence (surface, frame_info, output);
|
||||
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
From 51e378c8f28b96b94c8da338b1b0f26cbc32c7f0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Fri, 12 May 2017 13:40:31 +0200
|
||||
Subject: [PATCH] window-actor: Special-case shaped Java windows
|
||||
|
||||
OpenJDK wrongly assumes that shaping a window implies no shadows.
|
||||
They got lucky until commit b975676c changed the fallback case,
|
||||
but now their compliance tests are broken. Make them happy again
|
||||
by special-casing shaped Java windows.
|
||||
---
|
||||
src/compositor/meta-window-actor-x11.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
|
||||
index 2781df09cc..8748f3aa3a 100644
|
||||
--- a/src/compositor/meta-window-actor-x11.c
|
||||
+++ b/src/compositor/meta-window-actor-x11.c
|
||||
@@ -431,6 +431,14 @@ has_shadow (MetaWindowActorX11 *actor_x11)
|
||||
if (priv->has_custom_frame_extents)
|
||||
return FALSE;
|
||||
|
||||
+ /*
|
||||
+ * OpenJDK wrongly assumes that shaping a window implies no compositor
|
||||
+ * shadows; make its compliance tests happy to give it what it wants ...
|
||||
+ */
|
||||
+ if (g_strcmp0 (window->res_name, "sun-awt-X11-XWindowPeer") == 0 &&
|
||||
+ priv->shape_region != NULL)
|
||||
+ return FALSE;
|
||||
+
|
||||
/*
|
||||
* Generate shadows for all other windows.
|
||||
*/
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
From 3a73958f7eab973189441ec9b4a4c96ee6bb8ec7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 22 Jul 2024 12:55:30 +0200
|
||||
Subject: [PATCH 2/3] Revert "x11/window: Update comment and variable name to
|
||||
reflect current behavior"
|
||||
|
||||
This reverts commit e4763d00e8512aeb408ae118597d753f12217487.
|
||||
---
|
||||
src/x11/window-x11.c | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
|
||||
index e7c76dd674..b358b64bf2 100644
|
||||
--- a/src/x11/window-x11.c
|
||||
+++ b/src/x11/window-x11.c
|
||||
@@ -2491,20 +2491,21 @@ meta_window_x11_update_input_region (MetaWindow *window)
|
||||
|
||||
if (region != NULL)
|
||||
{
|
||||
- MtkRectangle bounding_rect;
|
||||
+ MtkRectangle client_area;
|
||||
|
||||
- bounding_rect.x = 0;
|
||||
- bounding_rect.y = 0;
|
||||
- bounding_rect.width = window->buffer_rect.width;
|
||||
- bounding_rect.height = window->buffer_rect.height;
|
||||
+ client_area.x = 0;
|
||||
+ client_area.y = 0;
|
||||
+ client_area.width = window->buffer_rect.width;
|
||||
+ client_area.height = window->buffer_rect.height;
|
||||
|
||||
/* The shape we get back from the client may have coordinates
|
||||
* outside of the frame. The X SHAPE Extension requires that
|
||||
* the overall shape the client provides never exceeds the
|
||||
* "bounding rectangle" of the window -- the shape that the
|
||||
- * window would have gotten if it was unshaped.
|
||||
+ * window would have gotten if it was unshaped. In our case,
|
||||
+ * this is simply the client area.
|
||||
*/
|
||||
- mtk_region_intersect_rectangle (region, &bounding_rect);
|
||||
+ mtk_region_intersect_rectangle (region, &client_area);
|
||||
}
|
||||
|
||||
meta_window_set_input_region (window, region);
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,115 +0,0 @@
|
||||
From 7c447b2627c3a8050a5189dd876b82ddcf317666 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Thu, 6 Feb 2025 17:43:46 +0100
|
||||
Subject: [PATCH 2/3] cursor-renderer/native: Store formats in
|
||||
MetaCursorRendererNativeGpuData
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Instead of hard-coding them everywhere.
|
||||
|
||||
Preparation for next commit, no behaviour change intended.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4255>
|
||||
---
|
||||
.../native/meta-cursor-renderer-native.c | 23 ++++++++++++++-----
|
||||
1 file changed, 17 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index 0db0dde022..b4a45bfca7 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -99,6 +99,8 @@ typedef struct _MetaCursorRendererNativeGpuData
|
||||
{
|
||||
gboolean hw_cursor_broken;
|
||||
|
||||
+ uint32_t drm_format;
|
||||
+ CoglPixelFormat cogl_format;
|
||||
uint64_t cursor_width;
|
||||
uint64_t cursor_height;
|
||||
} MetaCursorRendererNativeGpuData;
|
||||
@@ -849,7 +851,10 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
+ MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
MetaCrtc *crtc = META_CRTC (crtc_kms);
|
||||
+ MetaGpu *gpu = meta_crtc_get_gpu (crtc);
|
||||
+ MetaGpuKms *gpu_kms = META_GPU_KMS (gpu);
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
MetaMonitor *monitor;
|
||||
float monitor_scale;
|
||||
@@ -873,6 +878,9 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
graphene_point_t hotspot;
|
||||
int hot_x, hot_y;
|
||||
|
||||
+ cursor_renderer_gpu_data =
|
||||
+ meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||||
+
|
||||
monitor = meta_output_get_monitor (meta_crtc_get_outputs (crtc)->data);
|
||||
logical_monitor = meta_monitor_get_logical_monitor (monitor);
|
||||
|
||||
@@ -954,7 +962,7 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
|
||||
if (width != crtc_dst_width || height != crtc_dst_height ||
|
||||
!graphene_matrix_is_identity (&matrix) ||
|
||||
- gbm_format != GBM_FORMAT_ARGB8888 ||
|
||||
+ gbm_format != cursor_renderer_gpu_data->drm_format ||
|
||||
!clutter_color_state_equals (cursor_color_state, target_color_state))
|
||||
{
|
||||
const MetaFormatInfo *format_info;
|
||||
@@ -977,7 +985,7 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
height,
|
||||
rowstride,
|
||||
&matrix,
|
||||
- COGL_PIXEL_FORMAT_BGRA_8888_PRE,
|
||||
+ cursor_renderer_gpu_data->cogl_format,
|
||||
crtc_dst_width,
|
||||
crtc_dst_height,
|
||||
&error);
|
||||
@@ -989,11 +997,11 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
}
|
||||
|
||||
bpp =
|
||||
- cogl_pixel_format_get_bytes_per_pixel (COGL_PIXEL_FORMAT_BGRA_8888_PRE,
|
||||
+ cogl_pixel_format_get_bytes_per_pixel (cursor_renderer_gpu_data->cogl_format,
|
||||
0);
|
||||
cursor_rowstride = crtc_dst_width * bpp;
|
||||
cursor_data = g_malloc (crtc_dst_height * cursor_rowstride);
|
||||
- cogl_texture_get_data (texture, COGL_PIXEL_FORMAT_BGRA_8888_PRE,
|
||||
+ cogl_texture_get_data (texture, cursor_renderer_gpu_data->cogl_format,
|
||||
cursor_rowstride,
|
||||
cursor_data);
|
||||
|
||||
@@ -1007,7 +1015,7 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
cursor_rowstride,
|
||||
&hotspot,
|
||||
relative_transform,
|
||||
- GBM_FORMAT_ARGB8888);
|
||||
+ cursor_renderer_gpu_data->drm_format);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1020,7 +1028,7 @@ load_scaled_and_transformed_cursor_sprite (MetaCursorRendererNative *native,
|
||||
rowstride,
|
||||
&hotspot,
|
||||
MTK_MONITOR_TRANSFORM_NORMAL,
|
||||
- GBM_FORMAT_ARGB8888);
|
||||
+ cursor_renderer_gpu_data->drm_format);
|
||||
}
|
||||
|
||||
return retval;
|
||||
@@ -1285,6 +1293,9 @@ init_hw_cursor_support_for_gpu (MetaGpuKms *gpu_kms)
|
||||
cursor_renderer_gpu_data =
|
||||
meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||
|
||||
+ cursor_renderer_gpu_data->drm_format = DRM_FORMAT_ARGB8888;
|
||||
+ cursor_renderer_gpu_data->cogl_format = COGL_PIXEL_FORMAT_BGRA_8888_PRE;
|
||||
+
|
||||
if (!meta_kms_device_get_cursor_size (kms_device, &width, &height))
|
||||
{
|
||||
width = 64;
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,41 +0,0 @@
|
||||
From 05c722d66dda0c55d3c58ccf5c7c321445664a45 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Wed, 12 Feb 2025 07:52:14 +0000
|
||||
Subject: [PATCH 2/2] input-capture/session: Disconnect on_keymap_changed on
|
||||
session finalize
|
||||
|
||||
When Input Capture was enabled on Input Leap server startup and then
|
||||
finalized when Input Leap server was stopped, switching keymap was
|
||||
still triggering its on_keymap_changed callback, but on a freed session
|
||||
thus triggering use after free a segfault.
|
||||
|
||||
Fixes: 2fb3bdf77 - input-capture: Hook up capturing of events to active session
|
||||
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3360
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4257>
|
||||
|
||||
|
||||
(cherry picked from commit 99dbcf1b8caba93acb5479d1c7ad754ff3fd0540)
|
||||
|
||||
Co-authored-by: Alban Browaeys <alban.browaeys@gmail.com>
|
||||
---
|
||||
src/backends/meta-input-capture-session.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/backends/meta-input-capture-session.c b/src/backends/meta-input-capture-session.c
|
||||
index 14973e3e75..4f9d854273 100644
|
||||
--- a/src/backends/meta-input-capture-session.c
|
||||
+++ b/src/backends/meta-input-capture-session.c
|
||||
@@ -1188,6 +1188,10 @@ static void
|
||||
meta_input_capture_session_finalize (GObject *object)
|
||||
{
|
||||
MetaInputCaptureSession *session = META_INPUT_CAPTURE_SESSION (object);
|
||||
+ MetaBackend *backend =
|
||||
+ meta_dbus_session_manager_get_backend (session->session_manager);
|
||||
+
|
||||
+ g_signal_handlers_disconnect_by_func (backend, on_keymap_changed, session);
|
||||
|
||||
g_clear_pointer (&session->barriers, g_hash_table_unref);
|
||||
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,462 +0,0 @@
|
||||
From f93e85f69b9d63d4bedeaf778d5f620ad64ddab4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Mon, 28 Oct 2024 08:44:35 +0100
|
||||
Subject: [PATCH 2/5] monitor: Keep track of the for lease status
|
||||
|
||||
Add a flag to MetaMonitor indicating if the monitor is available for
|
||||
lease and store/update it from the monitor configuration.
|
||||
|
||||
Also, add unit tests validating that the configuration is applied and
|
||||
that invalid configurations fail.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4112>
|
||||
---
|
||||
src/backends/meta-monitor-config-manager.c | 10 +-
|
||||
src/backends/meta-monitor-manager-private.h | 3 +
|
||||
src/backends/meta-monitor-manager.c | 41 +++++
|
||||
src/backends/meta-monitor.c | 19 ++
|
||||
src/backends/meta-monitor.h | 6 +
|
||||
.../native/meta-monitor-manager-native.c | 1 +
|
||||
.../monitor-configs/forlease-invalid.xml | 32 ++++
|
||||
src/tests/monitor-configs/forlease.xml | 40 +++++
|
||||
src/tests/monitor-unit-tests.c | 165 ++++++++++++++++++
|
||||
9 files changed, 316 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/tests/monitor-configs/forlease-invalid.xml
|
||||
create mode 100644 src/tests/monitor-configs/forlease.xml
|
||||
|
||||
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
|
||||
index ecf4ee8202..0df193f0a4 100644
|
||||
--- a/src/backends/meta-monitor-config-manager.c
|
||||
+++ b/src/backends/meta-monitor-config-manager.c
|
||||
@@ -1628,6 +1628,7 @@ meta_monitors_config_new (MetaMonitorManager *monitor_manager,
|
||||
MetaMonitorsConfigFlag flags)
|
||||
{
|
||||
GList *disabled_monitor_specs = NULL;
|
||||
+ GList *for_lease_monitor_specs = NULL;
|
||||
GList *monitors;
|
||||
GList *l;
|
||||
|
||||
@@ -1649,11 +1650,18 @@ meta_monitors_config_new (MetaMonitorManager *monitor_manager,
|
||||
disabled_monitor_specs =
|
||||
g_list_prepend (disabled_monitor_specs,
|
||||
meta_monitor_spec_clone (monitor_spec));
|
||||
+
|
||||
+ if (meta_monitor_is_for_lease (monitor))
|
||||
+ {
|
||||
+ for_lease_monitor_specs =
|
||||
+ g_list_prepend (for_lease_monitor_specs,
|
||||
+ meta_monitor_spec_clone (monitor_spec));
|
||||
+ }
|
||||
}
|
||||
|
||||
return meta_monitors_config_new_full (logical_monitor_configs,
|
||||
disabled_monitor_specs,
|
||||
- NULL,
|
||||
+ for_lease_monitor_specs,
|
||||
layout_mode,
|
||||
flags);
|
||||
}
|
||||
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
|
||||
index 977ce417cc..66492c2a5f 100644
|
||||
--- a/src/backends/meta-monitor-manager-private.h
|
||||
+++ b/src/backends/meta-monitor-manager-private.h
|
||||
@@ -345,6 +345,9 @@ META_EXPORT_TEST
|
||||
void meta_monitor_manager_update_logical_state (MetaMonitorManager *manager,
|
||||
MetaMonitorsConfig *config);
|
||||
|
||||
+void meta_monitor_manager_update_for_lease_state (MetaMonitorManager *manager,
|
||||
+ MetaMonitorsConfig *config);
|
||||
+
|
||||
META_EXPORT_TEST
|
||||
void meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
|
||||
MetaMonitorsConfig *config);
|
||||
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
|
||||
index 4fcc8a696c..55816ed7bb 100644
|
||||
--- a/src/backends/meta-monitor-manager.c
|
||||
+++ b/src/backends/meta-monitor-manager.c
|
||||
@@ -3824,6 +3824,46 @@ meta_monitor_manager_update_logical_state (MetaMonitorManager *manager,
|
||||
meta_monitor_manager_rebuild_logical_monitors (manager, config);
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+is_monitor_configured_for_lease (MetaMonitor *monitor,
|
||||
+ MetaMonitorsConfig *config)
|
||||
+{
|
||||
+ MetaMonitorSpec *monitor_spec;
|
||||
+ GList *l;
|
||||
+
|
||||
+ monitor_spec = meta_monitor_get_spec (monitor);
|
||||
+
|
||||
+ for (l = config->for_lease_monitor_specs; l; l = l->next)
|
||||
+ {
|
||||
+ MetaMonitorSpec *spec = l->data;
|
||||
+
|
||||
+ if (meta_monitor_spec_equals (monitor_spec, spec))
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+meta_monitor_manager_update_for_lease_state (MetaMonitorManager *manager,
|
||||
+ MetaMonitorsConfig *config)
|
||||
+{
|
||||
+ GList *l;
|
||||
+
|
||||
+ for (l = manager->monitors; l; l = l->next)
|
||||
+ {
|
||||
+ MetaMonitor *monitor = l->data;
|
||||
+ gboolean is_for_lease;
|
||||
+
|
||||
+ if (config)
|
||||
+ is_for_lease = is_monitor_configured_for_lease (monitor, config);
|
||||
+ else
|
||||
+ is_for_lease = FALSE;
|
||||
+
|
||||
+ meta_monitor_set_for_lease (monitor, is_for_lease);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void
|
||||
meta_monitor_manager_rebuild (MetaMonitorManager *manager,
|
||||
MetaMonitorsConfig *config)
|
||||
@@ -3838,6 +3878,7 @@ meta_monitor_manager_rebuild (MetaMonitorManager *manager,
|
||||
old_logical_monitors = manager->logical_monitors;
|
||||
|
||||
meta_monitor_manager_update_logical_state (manager, config);
|
||||
+ meta_monitor_manager_update_for_lease_state (manager, config);
|
||||
|
||||
ensure_privacy_screen_settings (manager);
|
||||
|
||||
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
|
||||
index b7efabda2c..badde7cea2 100644
|
||||
--- a/src/backends/meta-monitor.c
|
||||
+++ b/src/backends/meta-monitor.c
|
||||
@@ -67,6 +67,8 @@ typedef struct _MetaMonitorPrivate
|
||||
MetaLogicalMonitor *logical_monitor;
|
||||
|
||||
char *display_name;
|
||||
+
|
||||
+ gboolean is_for_lease;
|
||||
} MetaMonitorPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaMonitor, meta_monitor, G_TYPE_OBJECT)
|
||||
@@ -2459,3 +2461,20 @@ meta_monitor_get_backlight (MetaMonitor *monitor,
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
+
|
||||
+void
|
||||
+meta_monitor_set_for_lease (MetaMonitor *monitor,
|
||||
+ gboolean for_lease)
|
||||
+{
|
||||
+ MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||
+
|
||||
+ priv->is_for_lease = for_lease;
|
||||
+}
|
||||
+
|
||||
+gboolean
|
||||
+meta_monitor_is_for_lease (MetaMonitor *monitor)
|
||||
+{
|
||||
+ MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||
+
|
||||
+ return priv->is_for_lease;
|
||||
+}
|
||||
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
|
||||
index 01836dc0e7..cc11348b35 100644
|
||||
--- a/src/backends/meta-monitor.h
|
||||
+++ b/src/backends/meta-monitor.h
|
||||
@@ -349,4 +349,10 @@ META_EXPORT_TEST
|
||||
gboolean meta_monitor_get_backlight (MetaMonitor *monitor,
|
||||
int *value);
|
||||
|
||||
+void meta_monitor_set_for_lease (MetaMonitor *monitor,
|
||||
+ gboolean for_lease);
|
||||
+
|
||||
+META_EXPORT_TEST
|
||||
+gboolean meta_monitor_is_for_lease (MetaMonitor *monitor);
|
||||
+
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaMonitorSpec, meta_monitor_spec_free)
|
||||
diff --git a/src/backends/native/meta-monitor-manager-native.c b/src/backends/native/meta-monitor-manager-native.c
|
||||
index 668f4e0eb4..21cc1b95be 100644
|
||||
--- a/src/backends/native/meta-monitor-manager-native.c
|
||||
+++ b/src/backends/native/meta-monitor-manager-native.c
|
||||
@@ -156,6 +156,7 @@ meta_monitor_manager_native_ensure_initial_config (MetaMonitorManager *manager)
|
||||
config = meta_monitor_manager_ensure_configured (manager);
|
||||
|
||||
meta_monitor_manager_update_logical_state (manager, config);
|
||||
+ meta_monitor_manager_update_for_lease_state (manager, config);
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/src/tests/monitor-configs/forlease-invalid.xml b/src/tests/monitor-configs/forlease-invalid.xml
|
||||
new file mode 100644
|
||||
index 0000000000..4a7ff9d5da
|
||||
--- /dev/null
|
||||
+++ b/src/tests/monitor-configs/forlease-invalid.xml
|
||||
@@ -0,0 +1,32 @@
|
||||
+<monitors version="2">
|
||||
+ <configuration>
|
||||
+ <layoutmode>logical</layoutmode>
|
||||
+ <logicalmonitor>
|
||||
+ <x>0</x>
|
||||
+ <y>0</y>
|
||||
+ <scale>1</scale>
|
||||
+ <primary>yes</primary>
|
||||
+ <monitor>
|
||||
+ <monitorspec>
|
||||
+ <connector>DP-1</connector>
|
||||
+ <vendor>MetaProduct's Inc.</vendor>
|
||||
+ <product>MetaMonitor</product>
|
||||
+ <serial>0x123456</serial>
|
||||
+ </monitorspec>
|
||||
+ <mode>
|
||||
+ <width>800</width>
|
||||
+ <height>600</height>
|
||||
+ <rate>60</rate>
|
||||
+ </mode>
|
||||
+ </monitor>
|
||||
+ </logicalmonitor>
|
||||
+ <forlease>
|
||||
+ <monitorspec>
|
||||
+ <connector>DP-1</connector>
|
||||
+ <vendor>MetaProduct's Inc.</vendor>
|
||||
+ <product>MetaMonitor</product>
|
||||
+ <serial>0x123456</serial>
|
||||
+ </monitorspec>
|
||||
+ </forlease>
|
||||
+ </configuration>
|
||||
+</monitors>
|
||||
diff --git a/src/tests/monitor-configs/forlease.xml b/src/tests/monitor-configs/forlease.xml
|
||||
new file mode 100644
|
||||
index 0000000000..482f095a6d
|
||||
--- /dev/null
|
||||
+++ b/src/tests/monitor-configs/forlease.xml
|
||||
@@ -0,0 +1,40 @@
|
||||
+<monitors version="2">
|
||||
+ <configuration>
|
||||
+ <layoutmode>logical</layoutmode>
|
||||
+ <logicalmonitor>
|
||||
+ <x>0</x>
|
||||
+ <y>0</y>
|
||||
+ <scale>1</scale>
|
||||
+ <primary>yes</primary>
|
||||
+ <monitor>
|
||||
+ <monitorspec>
|
||||
+ <connector>DP-1</connector>
|
||||
+ <vendor>MetaProduct's Inc.</vendor>
|
||||
+ <product>MetaMonitor</product>
|
||||
+ <serial>0x123456</serial>
|
||||
+ </monitorspec>
|
||||
+ <mode>
|
||||
+ <width>800</width>
|
||||
+ <height>600</height>
|
||||
+ <rate>60</rate>
|
||||
+ </mode>
|
||||
+ </monitor>
|
||||
+ </logicalmonitor>
|
||||
+ <disabled>
|
||||
+ <monitorspec>
|
||||
+ <connector>DP-2</connector>
|
||||
+ <vendor>MetaProduct's Inc.</vendor>
|
||||
+ <product>MetaMonitor</product>
|
||||
+ <serial>0x654321</serial>
|
||||
+ </monitorspec>
|
||||
+ </disabled>
|
||||
+ <forlease>
|
||||
+ <monitorspec>
|
||||
+ <connector>DP-2</connector>
|
||||
+ <vendor>MetaProduct's Inc.</vendor>
|
||||
+ <product>MetaMonitor</product>
|
||||
+ <serial>0x654321</serial>
|
||||
+ </monitorspec>
|
||||
+ </forlease>
|
||||
+ </configuration>
|
||||
+</monitors>
|
||||
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
|
||||
index 2414789bab..326dd83855 100644
|
||||
--- a/src/tests/monitor-unit-tests.c
|
||||
+++ b/src/tests/monitor-unit-tests.c
|
||||
@@ -9176,6 +9176,167 @@ meta_test_monitor_custom_detached_groups (void)
|
||||
g_assert_cmpstr (error->message, ==, "Logical monitors not adjacent");
|
||||
}
|
||||
|
||||
+static void
|
||||
+meta_test_monitor_custom_for_lease_config (void)
|
||||
+{
|
||||
+ MonitorTestCase test_case = {
|
||||
+ .setup = {
|
||||
+ .modes = {
|
||||
+ {
|
||||
+ .width = 800,
|
||||
+ .height = 600,
|
||||
+ .refresh_rate = 60.0
|
||||
+ }
|
||||
+ },
|
||||
+ .n_modes = 1,
|
||||
+ .outputs = {
|
||||
+ {
|
||||
+ .crtc = -1,
|
||||
+ .modes = { 0 },
|
||||
+ .n_modes = 1,
|
||||
+ .preferred_mode = 0,
|
||||
+ .possible_crtcs = { 0, 1 },
|
||||
+ .n_possible_crtcs = 2,
|
||||
+ .width_mm = 222,
|
||||
+ .height_mm = 125,
|
||||
+ .serial = "0x123456",
|
||||
+ },
|
||||
+ {
|
||||
+ .crtc = -1,
|
||||
+ .modes = { 0 },
|
||||
+ .n_modes = 1,
|
||||
+ .preferred_mode = 0,
|
||||
+ .possible_crtcs = { 0, 1 },
|
||||
+ .n_possible_crtcs = 2,
|
||||
+ .width_mm = 222,
|
||||
+ .height_mm = 125,
|
||||
+ .serial = "0x654321"
|
||||
+ }
|
||||
+ },
|
||||
+ .n_outputs = 2,
|
||||
+ .crtcs = {
|
||||
+ {
|
||||
+ .current_mode = -1
|
||||
+ },
|
||||
+ {
|
||||
+ .current_mode = -1
|
||||
+ }
|
||||
+ },
|
||||
+ .n_crtcs = 2
|
||||
+ },
|
||||
+
|
||||
+ .expect = {
|
||||
+ .monitors = {
|
||||
+ {
|
||||
+ .outputs = { 0 },
|
||||
+ .n_outputs = 1,
|
||||
+ .modes = {
|
||||
+ {
|
||||
+ .width = 800,
|
||||
+ .height = 600,
|
||||
+ .refresh_rate = 60.0,
|
||||
+ .crtc_modes = {
|
||||
+ {
|
||||
+ .output = 0,
|
||||
+ .crtc_mode = 0
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ },
|
||||
+ .n_modes = 1,
|
||||
+ .current_mode = 0,
|
||||
+ .width_mm = 222,
|
||||
+ .height_mm = 125
|
||||
+ },
|
||||
+ {
|
||||
+ .outputs = { 1 },
|
||||
+ .n_outputs = 1,
|
||||
+ .modes = {
|
||||
+ {
|
||||
+ .width = 800,
|
||||
+ .height = 600,
|
||||
+ .refresh_rate = 60.0,
|
||||
+ .crtc_modes = {
|
||||
+ {
|
||||
+ .output = 1,
|
||||
+ .crtc_mode = 0
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ },
|
||||
+ .n_modes = 1,
|
||||
+ .current_mode = -1,
|
||||
+ .width_mm = 222,
|
||||
+ .height_mm = 125
|
||||
+ }
|
||||
+ },
|
||||
+ .n_monitors = 2,
|
||||
+ .logical_monitors = {
|
||||
+ {
|
||||
+ .monitors = { 0 },
|
||||
+ .n_monitors = 1,
|
||||
+ .layout = { .x = 0, .y = 0, .width = 800, .height = 600 },
|
||||
+ .scale = 1,
|
||||
+ .transform = MTK_MONITOR_TRANSFORM_NORMAL
|
||||
+ },
|
||||
+ },
|
||||
+ .n_logical_monitors = 1,
|
||||
+ .primary_logical_monitor = 0,
|
||||
+ .n_outputs = 2,
|
||||
+ .crtcs = {
|
||||
+ {
|
||||
+ .current_mode = 0,
|
||||
+ },
|
||||
+ {
|
||||
+ .current_mode = -1,
|
||||
+ }
|
||||
+ },
|
||||
+ .n_crtcs = 2,
|
||||
+ .screen_width = 800,
|
||||
+ .screen_height = 600,
|
||||
+ }
|
||||
+ };
|
||||
+ MetaMonitorTestSetup *test_setup;
|
||||
+ MetaBackend *backend = meta_context_get_backend (test_context);
|
||||
+ MetaMonitorManager *monitor_manager =
|
||||
+ meta_backend_get_monitor_manager (backend);
|
||||
+ GList *monitors;
|
||||
+ MetaMonitor *first_monitor;
|
||||
+ MetaMonitor *second_monitor;
|
||||
+
|
||||
+ test_setup = meta_create_monitor_test_setup (test_backend,
|
||||
+ &test_case.setup,
|
||||
+ MONITOR_TEST_FLAG_NONE);
|
||||
+ meta_set_custom_monitor_config (test_context, "forlease.xml");
|
||||
+ emulate_hotplug (test_setup);
|
||||
+
|
||||
+ META_TEST_LOG_CALL ("Checking monitor configuration",
|
||||
+ meta_check_monitor_configuration (test_context,
|
||||
+ &test_case.expect));
|
||||
+ check_monitor_test_clients_state ();
|
||||
+
|
||||
+ monitors = meta_monitor_manager_get_monitors (monitor_manager);
|
||||
+ g_assert_cmpuint (g_list_length (monitors), ==, 2);
|
||||
+
|
||||
+ first_monitor = g_list_nth_data (monitors, 0);
|
||||
+ second_monitor = g_list_nth_data (monitors, 1);
|
||||
+
|
||||
+ g_assert_true (meta_monitor_is_active (first_monitor));
|
||||
+ g_assert_false (meta_monitor_is_for_lease (first_monitor));
|
||||
+
|
||||
+ g_assert_false (meta_monitor_is_active (second_monitor));
|
||||
+ g_assert_true (meta_monitor_is_for_lease (second_monitor));
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+meta_test_monitor_custom_for_lease_invalid_config (void)
|
||||
+{
|
||||
+ g_test_expect_message ("libmutter-test", G_LOG_LEVEL_WARNING,
|
||||
+ "*For lease monitor must be explicitly disabled");
|
||||
+ meta_set_custom_monitor_config (test_context, "forlease-invalid.xml");
|
||||
+ g_test_assert_expected_messages ();
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
quit_main_loop (gpointer data)
|
||||
{
|
||||
@@ -10400,6 +10561,10 @@ init_monitor_tests (void)
|
||||
meta_test_monitor_custom_lid_switch_config);
|
||||
add_monitor_test ("/backends/monitor/custom/detached-groups",
|
||||
meta_test_monitor_custom_detached_groups);
|
||||
+ add_monitor_test ("/backends/monitor/custom/for-lease-config",
|
||||
+ meta_test_monitor_custom_for_lease_config);
|
||||
+ add_monitor_test ("/backends/monitor/custom/for-lease-invalid-config",
|
||||
+ meta_test_monitor_custom_for_lease_invalid_config);
|
||||
|
||||
add_monitor_test ("/backends/monitor/migrated/rotated",
|
||||
meta_test_monitor_migrated_rotated);
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,80 +0,0 @@
|
||||
From 80a19134ffb5ddd6577f00986aafcaf9db6505b9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Tue, 5 Nov 2024 12:03:49 +0100
|
||||
Subject: [PATCH 2/3] monitor-manager: Allow to check if config has a visible
|
||||
monitor
|
||||
|
||||
Add a new function, similar to meta_logical_monitor_configs_have_monitor()
|
||||
that, in addition, checks if the monitor is visible.
|
||||
|
||||
Refactor, no functional change.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4121>
|
||||
---
|
||||
src/backends/meta-monitor-config-manager.c | 24 +++++++++++++++++-----
|
||||
src/backends/meta-monitor-config-manager.h | 4 ++++
|
||||
2 files changed, 23 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
|
||||
index 0df193f0a4..74aa2df4b1 100644
|
||||
--- a/src/backends/meta-monitor-config-manager.c
|
||||
+++ b/src/backends/meta-monitor-config-manager.c
|
||||
@@ -1638,14 +1638,12 @@ meta_monitors_config_new (MetaMonitorManager *monitor_manager,
|
||||
MetaMonitor *monitor = l->data;
|
||||
MetaMonitorSpec *monitor_spec;
|
||||
|
||||
- if (!monitor_matches_rule (monitor, monitor_manager,
|
||||
- MONITOR_MATCH_VISIBLE))
|
||||
+ if (meta_logical_monitor_configs_have_visible_monitor (monitor_manager,
|
||||
+ logical_monitor_configs,
|
||||
+ monitor))
|
||||
continue;
|
||||
|
||||
monitor_spec = meta_monitor_get_spec (monitor);
|
||||
- if (meta_logical_monitor_configs_have_monitor (logical_monitor_configs,
|
||||
- monitor_spec))
|
||||
- continue;
|
||||
|
||||
disabled_monitor_specs =
|
||||
g_list_prepend (disabled_monitor_specs,
|
||||
@@ -1889,6 +1887,22 @@ meta_logical_monitor_configs_have_monitor (GList *logical_monitor_conf
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+gboolean
|
||||
+meta_logical_monitor_configs_have_visible_monitor (MetaMonitorManager *monitor_manager,
|
||||
+ GList *logical_monitor_configs,
|
||||
+ MetaMonitor *monitor)
|
||||
+{
|
||||
+ MetaMonitorSpec *monitor_spec;
|
||||
+
|
||||
+ if (!monitor_matches_rule (monitor, monitor_manager, MONITOR_MATCH_VISIBLE))
|
||||
+ return TRUE;
|
||||
+
|
||||
+ monitor_spec = meta_monitor_get_spec (monitor);
|
||||
+
|
||||
+ return meta_logical_monitor_configs_have_monitor (logical_monitor_configs,
|
||||
+ monitor_spec);
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
meta_monitors_config_is_monitor_enabled (MetaMonitorsConfig *config,
|
||||
MetaMonitorSpec *monitor_spec)
|
||||
diff --git a/src/backends/meta-monitor-config-manager.h b/src/backends/meta-monitor-config-manager.h
|
||||
index 87a29bc2dd..f033ac6555 100644
|
||||
--- a/src/backends/meta-monitor-config-manager.h
|
||||
+++ b/src/backends/meta-monitor-config-manager.h
|
||||
@@ -187,6 +187,10 @@ META_EXPORT_TEST
|
||||
gboolean meta_logical_monitor_configs_have_monitor (GList *logical_monitor_configs,
|
||||
MetaMonitorSpec *monitor_spec);
|
||||
|
||||
+gboolean meta_logical_monitor_configs_have_visible_monitor (MetaMonitorManager *monitor_manager,
|
||||
+ GList *logical_monitor_configs,
|
||||
+ MetaMonitor *monitor);
|
||||
+
|
||||
META_EXPORT_TEST
|
||||
gboolean meta_verify_monitor_mode_spec (MetaMonitorModeSpec *monitor_mode_spec,
|
||||
GError **error);
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,266 +0,0 @@
|
||||
From 3e09a7f1717d8c4b0a815fd9673471a52d6328b9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Wed, 12 Mar 2025 11:56:46 +0800
|
||||
Subject: [PATCH 2/2] stage: Track overlay damage per view
|
||||
|
||||
The previously painted rectangle of an overlay is not a global state,
|
||||
but depends on what view it was painted on. There was also an issue
|
||||
where an overlay being updated but not changing position, e.g. due to a
|
||||
0,0 pointer movement or an absolute pointer movement with the position
|
||||
not changing, not properly triggering damage of the old position when it
|
||||
eventually actually moved.
|
||||
|
||||
Fix this by tracking damage per view, while also fixing the state
|
||||
tracking to handle unchanged positions.
|
||||
---
|
||||
src/backends/meta-stage.c | 163 +++++++++++++++++++++++++-------------
|
||||
1 file changed, 107 insertions(+), 56 deletions(-)
|
||||
|
||||
diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c
|
||||
index 32f681c8c5..58f15bbb33 100644
|
||||
--- a/src/backends/meta-stage.c
|
||||
+++ b/src/backends/meta-stage.c
|
||||
@@ -38,6 +38,12 @@ struct _MetaStageWatch
|
||||
gpointer user_data;
|
||||
};
|
||||
|
||||
+typedef struct _MetaOverlayViewState
|
||||
+{
|
||||
+ graphene_rect_t painted_rect;
|
||||
+ gboolean has_painted_rect;
|
||||
+} MetaOverlayViewState;
|
||||
+
|
||||
struct _MetaOverlay
|
||||
{
|
||||
MetaStage *stage;
|
||||
@@ -49,8 +55,8 @@ struct _MetaOverlay
|
||||
|
||||
graphene_matrix_t transform;
|
||||
graphene_rect_t current_rect;
|
||||
- graphene_rect_t previous_rect;
|
||||
- gboolean previous_is_valid;
|
||||
+
|
||||
+ GHashTable *view_states;
|
||||
};
|
||||
|
||||
struct _MetaStage
|
||||
@@ -77,6 +83,7 @@ meta_overlay_new (MetaStage *stage)
|
||||
overlay = g_new0 (MetaOverlay, 1);
|
||||
overlay->stage = stage;
|
||||
overlay->pipeline = cogl_pipeline_new (ctx);
|
||||
+ overlay->view_states = g_hash_table_new_full (NULL, NULL, NULL, g_free);
|
||||
|
||||
return overlay;
|
||||
}
|
||||
@@ -86,6 +93,7 @@ meta_overlay_free (MetaOverlay *overlay)
|
||||
{
|
||||
if (overlay->pipeline)
|
||||
g_object_unref (overlay->pipeline);
|
||||
+ g_hash_table_unref (overlay->view_states);
|
||||
|
||||
g_free (overlay);
|
||||
}
|
||||
@@ -115,19 +123,57 @@ meta_overlay_set (MetaOverlay *overlay,
|
||||
overlay->current_rect = *dst_rect;
|
||||
}
|
||||
|
||||
+static MetaOverlayViewState *
|
||||
+get_view_state (MetaOverlay *overlay,
|
||||
+ ClutterStageView *view)
|
||||
+{
|
||||
+ return g_hash_table_lookup (overlay->view_states, view);
|
||||
+}
|
||||
+
|
||||
+static MetaOverlayViewState *
|
||||
+ensure_view_state (MetaOverlay *overlay,
|
||||
+ ClutterStageView *view)
|
||||
+{
|
||||
+ MetaOverlayViewState *view_state;
|
||||
+
|
||||
+ view_state = get_view_state (overlay, view);
|
||||
+
|
||||
+ if (!view_state)
|
||||
+ {
|
||||
+ view_state = g_new0 (MetaOverlayViewState, 1);
|
||||
+ g_hash_table_insert (overlay->view_states, view, view_state);
|
||||
+ }
|
||||
+
|
||||
+ return view_state;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+meta_overlay_invalidate_views (MetaOverlay *overlay)
|
||||
+{
|
||||
+ g_hash_table_remove_all (overlay->view_states);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
meta_overlay_paint (MetaOverlay *overlay,
|
||||
ClutterPaintContext *paint_context)
|
||||
{
|
||||
+ ClutterStageView *view;
|
||||
+ MetaOverlayViewState *view_state = NULL;
|
||||
CoglFramebuffer *framebuffer;
|
||||
|
||||
- if (!overlay->texture)
|
||||
- return;
|
||||
+ view = clutter_paint_context_get_stage_view (paint_context);
|
||||
+ if (view)
|
||||
+ view_state = ensure_view_state (overlay, view);
|
||||
|
||||
- if (!overlay->is_visible &&
|
||||
+ if ((!overlay->texture ||
|
||||
+ !overlay->is_visible) &&
|
||||
!(clutter_paint_context_get_paint_flags (paint_context) &
|
||||
CLUTTER_PAINT_FLAG_FORCE_CURSORS))
|
||||
- return;
|
||||
+ {
|
||||
+ if (view_state)
|
||||
+ view_state->has_painted_rect = FALSE;
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
framebuffer = clutter_paint_context_get_framebuffer (paint_context);
|
||||
cogl_framebuffer_draw_rectangle (framebuffer,
|
||||
@@ -139,10 +185,10 @@ meta_overlay_paint (MetaOverlay *overlay,
|
||||
(overlay->current_rect.origin.y +
|
||||
overlay->current_rect.size.height));
|
||||
|
||||
- if (!graphene_rect_equal (&overlay->previous_rect, &overlay->current_rect))
|
||||
+ if (view_state)
|
||||
{
|
||||
- overlay->previous_rect = overlay->current_rect;
|
||||
- overlay->previous_is_valid = TRUE;
|
||||
+ view_state->painted_rect = overlay->current_rect;
|
||||
+ view_state->has_painted_rect = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -343,67 +389,68 @@ meta_stage_new (MetaBackend *backend)
|
||||
}
|
||||
|
||||
static void
|
||||
-queue_cursor_overlay_redraw_clutter_rect (MetaStage *stage,
|
||||
- MetaOverlay *overlay,
|
||||
- graphene_rect_t *rect)
|
||||
+intersect_and_queue_redraw (ClutterStageView *view,
|
||||
+ const MtkRectangle *clip)
|
||||
{
|
||||
- MtkRectangle clip = {
|
||||
- .x = (int) floorf (rect->origin.x),
|
||||
- .y = (int) floorf (rect->origin.y),
|
||||
- .width = (int) ceilf (rect->size.width),
|
||||
- .height = (int) ceilf (rect->size.height)
|
||||
- };
|
||||
- GList *l;
|
||||
+ MtkRectangle view_layout;
|
||||
+ MtkRectangle view_clip;
|
||||
|
||||
- /* Since we're flooring the coordinates, we need to enlarge the clip by the
|
||||
- * difference between the actual coordinate and the floored value */
|
||||
- clip.width += (int) ceilf (rect->origin.x - clip.x) * 2;
|
||||
- clip.height += (int) ceilf (rect->origin.y - clip.y) * 2;
|
||||
+ clutter_stage_view_get_layout (view, &view_layout);
|
||||
|
||||
- for (l = clutter_stage_peek_stage_views (CLUTTER_STAGE (stage));
|
||||
- l;
|
||||
- l = l->next)
|
||||
+ if (mtk_rectangle_intersect (clip, &view_layout, &view_clip))
|
||||
{
|
||||
- ClutterStageView *view = l->data;
|
||||
- MtkRectangle view_layout;
|
||||
- MtkRectangle view_clip;
|
||||
-
|
||||
- if (clutter_stage_view_get_default_paint_flags (view) &
|
||||
- CLUTTER_PAINT_FLAG_NO_CURSORS)
|
||||
- continue;
|
||||
-
|
||||
- if (meta_stage_view_is_cursor_overlay_inhibited (META_STAGE_VIEW (view)))
|
||||
- return;
|
||||
+ clutter_stage_view_add_redraw_clip (view, &view_clip);
|
||||
+ clutter_stage_view_schedule_update (view);
|
||||
+ }
|
||||
+}
|
||||
|
||||
- clutter_stage_view_get_layout (view, &view_layout);
|
||||
+static void
|
||||
+cursor_rect_to_clip (const graphene_rect_t *cursor_rect,
|
||||
+ MtkRectangle *clip_rect)
|
||||
+{
|
||||
+ mtk_rectangle_from_graphene_rect (cursor_rect,
|
||||
+ MTK_ROUNDING_STRATEGY_GROW,
|
||||
+ clip_rect);
|
||||
|
||||
- if (mtk_rectangle_intersect (&clip, &view_layout, &view_clip))
|
||||
- {
|
||||
- clutter_stage_view_add_redraw_clip (view, &view_clip);
|
||||
- clutter_stage_view_schedule_update (view);
|
||||
- }
|
||||
- }
|
||||
+ /* Since we're flooring the coordinates, we need to enlarge the clip by the
|
||||
+ * difference between the actual coordinate and the floored value */
|
||||
+ clip_rect->width += (int) ceilf (cursor_rect->origin.x - clip_rect->x) * 2;
|
||||
+ clip_rect->height += (int) ceilf (cursor_rect->origin.y - clip_rect->y) * 2;
|
||||
}
|
||||
|
||||
static void
|
||||
queue_redraw_for_cursor_overlay (MetaStage *stage,
|
||||
MetaOverlay *overlay)
|
||||
{
|
||||
- /* Clear the location the overlay was at before, if we need to. */
|
||||
- if (overlay->previous_is_valid)
|
||||
- {
|
||||
- queue_cursor_overlay_redraw_clutter_rect (stage,
|
||||
- overlay,
|
||||
- &overlay->previous_rect);
|
||||
- overlay->previous_is_valid = FALSE;
|
||||
- }
|
||||
+ GList *l;
|
||||
|
||||
- /* Draw the overlay at the new position */
|
||||
- if (overlay->is_visible && overlay->texture)
|
||||
+ for (l = clutter_stage_peek_stage_views (CLUTTER_STAGE (stage));
|
||||
+ l;
|
||||
+ l = l->next)
|
||||
{
|
||||
- queue_cursor_overlay_redraw_clutter_rect (stage,
|
||||
- overlay,
|
||||
- &overlay->current_rect);
|
||||
+ ClutterStageView *view = CLUTTER_STAGE_VIEW (l->data);
|
||||
+ MetaOverlayViewState *view_state;
|
||||
+
|
||||
+ view_state = ensure_view_state (overlay, view);
|
||||
+ if (view_state->has_painted_rect)
|
||||
+ {
|
||||
+ MtkRectangle clip;
|
||||
+
|
||||
+ cursor_rect_to_clip (&view_state->painted_rect, &clip);
|
||||
+ intersect_and_queue_redraw (view, &clip);
|
||||
+ }
|
||||
+
|
||||
+ if (overlay->is_visible &&
|
||||
+ overlay->texture &&
|
||||
+ !(clutter_stage_view_get_default_paint_flags (view) &
|
||||
+ CLUTTER_PAINT_FLAG_NO_CURSORS) &&
|
||||
+ !meta_stage_view_is_cursor_overlay_inhibited (META_STAGE_VIEW (view)))
|
||||
+ {
|
||||
+ MtkRectangle clip;
|
||||
+
|
||||
+ cursor_rect_to_clip (&overlay->current_rect, &clip);
|
||||
+ intersect_and_queue_redraw (view, &clip);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -509,4 +556,8 @@ meta_stage_rebuild_views (MetaStage *stage)
|
||||
|
||||
meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
|
||||
clutter_actor_set_size (CLUTTER_ACTOR (stage), width, height);
|
||||
+
|
||||
+ g_list_foreach (stage->overlays,
|
||||
+ (GFunc) meta_overlay_invalidate_views,
|
||||
+ NULL);
|
||||
}
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
From 3e6ba58c875055037e45f651bbcf866d2d47d82f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Mon, 22 Jul 2024 12:55:44 +0200
|
||||
Subject: [PATCH 3/3] Revert "x11/window: Use correct bounding rect to
|
||||
determine NULL input region"
|
||||
|
||||
This reverts commit 6bd920b355d12395dbf00b99374fc1f23783caaf.
|
||||
---
|
||||
src/x11/window-x11.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
|
||||
index b358b64bf2..16dc57eec2 100644
|
||||
--- a/src/x11/window-x11.c
|
||||
+++ b/src/x11/window-x11.c
|
||||
@@ -2473,8 +2473,8 @@ meta_window_x11_update_input_region (MetaWindow *window)
|
||||
else if (n_rects == 1 &&
|
||||
(rects[0].x == 0 &&
|
||||
rects[0].y == 0 &&
|
||||
- rects[0].width == window->buffer_rect.width &&
|
||||
- rects[0].height == window->buffer_rect.height))
|
||||
+ rects[0].width == priv->client_rect.width &&
|
||||
+ rects[0].height == priv->client_rect.height))
|
||||
{
|
||||
/* This is the bounding region case. Keep the
|
||||
* region as NULL. */
|
||||
--
|
||||
2.44.0.501.g19981daefd.dirty
|
||||
|
||||
@ -1,176 +0,0 @@
|
||||
From f459472cfe121d491ee97fd09a8abdd970dc900a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
|
||||
Date: Thu, 6 Feb 2025 18:31:16 +0100
|
||||
Subject: [PATCH 3/3] cursor-renderer/native: Probe formats supported by cursor
|
||||
planes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Probe all RGBA 8888 variants.
|
||||
|
||||
If there's a GBM device, prefer a format also supported by GBM, if any.
|
||||
Fall back to dumb BOs otherwise.
|
||||
|
||||
This allows the HW cursor to work correctly using BGRA8888 on s390x.
|
||||
|
||||
v2:
|
||||
* Rename get_cursor_format_info → find_cursor_format_info.
|
||||
* Log device path if we can't find any suitable cursor plane format.
|
||||
v3:
|
||||
* Split cursor_planes_support_format helper out of
|
||||
find_cursor_format_info to make logic clearer. (Sebastian Wick)
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4255>
|
||||
---
|
||||
.../native/meta-cursor-renderer-native.c | 101 +++++++++++++++++-
|
||||
1 file changed, 96 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c
|
||||
index b4a45bfca7..7581d9b492 100644
|
||||
--- a/src/backends/native/meta-cursor-renderer-native.c
|
||||
+++ b/src/backends/native/meta-cursor-renderer-native.c
|
||||
@@ -51,6 +51,7 @@
|
||||
#include "backends/native/meta-renderer-native.h"
|
||||
#include "backends/native/meta-seat-native.h"
|
||||
#include "common/meta-cogl-drm-formats.h"
|
||||
+#include "common/meta-drm-format-helpers.h"
|
||||
#include "core/boxes-private.h"
|
||||
#include "meta/boxes.h"
|
||||
#include "meta/meta-backend.h"
|
||||
@@ -99,6 +100,7 @@ typedef struct _MetaCursorRendererNativeGpuData
|
||||
{
|
||||
gboolean hw_cursor_broken;
|
||||
|
||||
+ gboolean use_gbm;
|
||||
uint32_t drm_format;
|
||||
CoglPixelFormat cogl_format;
|
||||
uint64_t cursor_width;
|
||||
@@ -546,11 +548,13 @@ create_cursor_drm_buffer (MetaGpuKms *gpu_kms,
|
||||
uint32_t format,
|
||||
GError **error)
|
||||
{
|
||||
- struct gbm_device *gbm_device;
|
||||
+ MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data =
|
||||
+ meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||||
|
||||
- gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||
- if (gbm_device)
|
||||
+ if (cursor_renderer_gpu_data->use_gbm)
|
||||
{
|
||||
+ struct gbm_device *gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||
+
|
||||
return create_cursor_drm_buffer_gbm (gpu_kms, device_file, gbm_device,
|
||||
pixels,
|
||||
width, height, stride,
|
||||
@@ -1283,18 +1287,105 @@ on_monitors_changed (MetaMonitorManager *monitors,
|
||||
meta_cursor_renderer_force_update (renderer);
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+cursor_planes_support_format (MetaKmsDevice *kms_device,
|
||||
+ const uint32_t format)
|
||||
+{
|
||||
+ gboolean supported = FALSE;
|
||||
+ GList *l;
|
||||
+
|
||||
+ for (l = meta_kms_device_get_planes (kms_device); l; l = l->next)
|
||||
+ {
|
||||
+ MetaKmsPlane *plane = l->data;
|
||||
+
|
||||
+ if (meta_kms_plane_get_plane_type (plane) != META_KMS_PLANE_TYPE_CURSOR)
|
||||
+ continue;
|
||||
+
|
||||
+ if (!meta_kms_plane_is_format_supported (plane, format))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ supported = TRUE;
|
||||
+ }
|
||||
+
|
||||
+ return supported;
|
||||
+}
|
||||
+
|
||||
+static const MetaFormatInfo *
|
||||
+find_cursor_format_info (MetaGpuKms *gpu_kms,
|
||||
+ struct gbm_device *gbm_device)
|
||||
+{
|
||||
+ MetaKmsDevice *kms_device = meta_gpu_kms_get_kms_device (gpu_kms);
|
||||
+ uint32_t formats[] = {
|
||||
+ DRM_FORMAT_ARGB8888,
|
||||
+ DRM_FORMAT_RGBA8888,
|
||||
+ DRM_FORMAT_BGRA8888,
|
||||
+ DRM_FORMAT_ABGR8888
|
||||
+ };
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < G_N_ELEMENTS (formats); i++)
|
||||
+ {
|
||||
+ if (gbm_device &&
|
||||
+ !gbm_device_is_format_supported (gbm_device, formats[i],
|
||||
+ GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE))
|
||||
+ {
|
||||
+ meta_topic (META_DEBUG_KMS,
|
||||
+ "GBM doesn't support format 0x%x for %s",
|
||||
+ formats[i], meta_kms_device_get_path (kms_device));
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (cursor_planes_support_format (kms_device, formats[i]))
|
||||
+ return meta_format_info_from_drm_format (formats[i]);
|
||||
+
|
||||
+ meta_topic (META_DEBUG_KMS,
|
||||
+ "Cursor plane doesn't support format 0x%x for %s",
|
||||
+ formats[i], meta_kms_device_get_path (kms_device));
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
init_hw_cursor_support_for_gpu (MetaGpuKms *gpu_kms)
|
||||
{
|
||||
MetaKmsDevice *kms_device = meta_gpu_kms_get_kms_device (gpu_kms);
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
+ const MetaFormatInfo *format_info;
|
||||
+ struct gbm_device *gbm_device;
|
||||
uint64_t width, height;
|
||||
+ MetaDrmFormatBuf tmp;
|
||||
|
||||
cursor_renderer_gpu_data =
|
||||
meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||
|
||||
- cursor_renderer_gpu_data->drm_format = DRM_FORMAT_ARGB8888;
|
||||
- cursor_renderer_gpu_data->cogl_format = COGL_PIXEL_FORMAT_BGRA_8888_PRE;
|
||||
+ gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||
+ format_info = find_cursor_format_info (gpu_kms, gbm_device);
|
||||
+ if (!format_info && gbm_device)
|
||||
+ {
|
||||
+ gbm_device = NULL;
|
||||
+ format_info = find_cursor_format_info (gpu_kms, NULL);
|
||||
+ }
|
||||
+
|
||||
+ if (!format_info)
|
||||
+ {
|
||||
+ g_warning ("Couldn't find suitable cursor plane format for %s, "
|
||||
+ "disabling HW cursor",
|
||||
+ meta_kms_device_get_path (kms_device));
|
||||
+ cursor_renderer_gpu_data->hw_cursor_broken = TRUE;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ cursor_renderer_gpu_data->use_gbm = gbm_device != NULL;
|
||||
+ cursor_renderer_gpu_data->drm_format = format_info->drm_format;
|
||||
+ cursor_renderer_gpu_data->cogl_format = format_info->cogl_format;
|
||||
+
|
||||
+ meta_topic (META_DEBUG_KMS,
|
||||
+ "Using cursor plane format %s (0x%x) for %s, use_gbm=%d",
|
||||
+ meta_drm_format_to_string (&tmp, format_info->drm_format),
|
||||
+ format_info->drm_format,
|
||||
+ meta_kms_device_get_path (kms_device),
|
||||
+ cursor_renderer_gpu_data->use_gbm);
|
||||
|
||||
if (!meta_kms_device_get_cursor_size (kms_device, &width, &height))
|
||||
{
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,224 +0,0 @@
|
||||
From 479bb6921da3d7004a74c4c7db999534b32ff214 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Tue, 5 Nov 2024 12:26:42 +0100
|
||||
Subject: [PATCH 3/3] monitor-manager: Configure for lease monitors in
|
||||
ApplyMonitorsConfig
|
||||
|
||||
Add a new property to the ApplyMonitorsConfig D-Bus API allowing to set
|
||||
a list of monitors for lease.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4121>
|
||||
---
|
||||
.../org.gnome.Mutter.DisplayConfig.xml | 6 ++
|
||||
src/backends/meta-monitor-manager.c | 85 ++++++++++++++++++-
|
||||
src/tests/monitor-unit-tests.c | 60 +++++++++++++
|
||||
3 files changed, 147 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
|
||||
index 192c08a796..fec38a34a8 100644
|
||||
--- a/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
|
||||
+++ b/data/dbus-interfaces/org.gnome.Mutter.DisplayConfig.xml
|
||||
@@ -501,6 +501,12 @@
|
||||
* "layout-mode" (u): layout mode the passed configuration is in; may
|
||||
only be set when changing the layout mode is
|
||||
supported (see GetCurrentState).
|
||||
+ * "monitors-for-lease" (a(ssss)): a list of monitors to be made available for
|
||||
+ lease. Monitors listed here must not be listed in @logical_monitors:
|
||||
+ * s connector: connector name (e.g. HDMI-1, DP-1, etc)
|
||||
+ * s vendor: vendor name
|
||||
+ * s product: product name
|
||||
+ * s serial: product serial
|
||||
-->
|
||||
<method name="ApplyMonitorsConfig">
|
||||
<arg name="serial" direction="in" type="u" />
|
||||
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
|
||||
index 127181df60..abe1db6649 100644
|
||||
--- a/src/backends/meta-monitor-manager.c
|
||||
+++ b/src/backends/meta-monitor-manager.c
|
||||
@@ -2713,6 +2713,74 @@ is_valid_layout_mode (MetaLogicalMonitorLayoutMode layout_mode)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+static GList *
|
||||
+create_disabled_monitor_specs_for_config (MetaMonitorManager *monitor_manager,
|
||||
+ GList *logical_monitor_configs)
|
||||
+{
|
||||
+ GList *disabled_monitor_specs = NULL;
|
||||
+ GList *monitors;
|
||||
+ GList *l;
|
||||
+
|
||||
+ monitors = meta_monitor_manager_get_monitors (monitor_manager);
|
||||
+ for (l = monitors; l; l = l->next)
|
||||
+ {
|
||||
+ MetaMonitor *monitor = l->data;
|
||||
+
|
||||
+ if (!meta_logical_monitor_configs_have_visible_monitor (monitor_manager,
|
||||
+ logical_monitor_configs,
|
||||
+ monitor))
|
||||
+ {
|
||||
+ MetaMonitorSpec *monitor_spec = meta_monitor_get_spec (monitor);
|
||||
+
|
||||
+ disabled_monitor_specs =
|
||||
+ g_list_prepend (disabled_monitor_specs,
|
||||
+ meta_monitor_spec_clone (monitor_spec));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return disabled_monitor_specs;
|
||||
+}
|
||||
+
|
||||
+static GList *
|
||||
+create_for_lease_monitor_specs_from_variant (GVariant *properties_variant)
|
||||
+{
|
||||
+ GList *for_lease_monitor_specs = NULL;
|
||||
+ g_autoptr (GVariant) for_lease_variant = NULL;
|
||||
+ GVariantIter iter;
|
||||
+ char *connector = NULL;
|
||||
+ char *vendor = NULL;
|
||||
+ char *product = NULL;
|
||||
+ char *serial = NULL;
|
||||
+
|
||||
+ if (!properties_variant)
|
||||
+ return NULL;
|
||||
+
|
||||
+ for_lease_variant = g_variant_lookup_value (properties_variant,
|
||||
+ "monitors-for-lease",
|
||||
+ G_VARIANT_TYPE ("a(ssss)"));
|
||||
+ if (!for_lease_variant)
|
||||
+ return NULL;
|
||||
+
|
||||
+ g_variant_iter_init (&iter, for_lease_variant);
|
||||
+ while (g_variant_iter_next (&iter, "(ssss)", &connector, &vendor, &product, &serial))
|
||||
+ {
|
||||
+ MetaMonitorSpec *monitor_spec;
|
||||
+
|
||||
+ monitor_spec = g_new0 (MetaMonitorSpec, 1);
|
||||
+ *monitor_spec = (MetaMonitorSpec) {
|
||||
+ .connector = connector,
|
||||
+ .vendor = vendor,
|
||||
+ .product = product,
|
||||
+ .serial = serial
|
||||
+ };
|
||||
+
|
||||
+ for_lease_monitor_specs =
|
||||
+ g_list_append (for_lease_monitor_specs, monitor_spec);
|
||||
+ }
|
||||
+
|
||||
+ return for_lease_monitor_specs;
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skeleton,
|
||||
GDBusMethodInvocation *invocation,
|
||||
@@ -2730,6 +2798,8 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
|
||||
GVariantIter logical_monitor_configs_iter;
|
||||
MetaMonitorsConfig *config;
|
||||
GList *logical_monitor_configs = NULL;
|
||||
+ GList *disabled_monitor_specs = NULL;
|
||||
+ GList *for_lease_monitor_specs = NULL;
|
||||
GError *error = NULL;
|
||||
|
||||
if (serial != manager->serial)
|
||||
@@ -2818,10 +2888,17 @@ meta_monitor_manager_handle_apply_monitors_config (MetaDBusDisplayConfig *skelet
|
||||
logical_monitor_config);
|
||||
}
|
||||
|
||||
- config = meta_monitors_config_new (manager,
|
||||
- logical_monitor_configs,
|
||||
- layout_mode,
|
||||
- META_MONITORS_CONFIG_FLAG_NONE);
|
||||
+ disabled_monitor_specs =
|
||||
+ create_disabled_monitor_specs_for_config (manager,
|
||||
+ logical_monitor_configs);
|
||||
+ for_lease_monitor_specs =
|
||||
+ create_for_lease_monitor_specs_from_variant (properties_variant);
|
||||
+
|
||||
+ config = meta_monitors_config_new_full (logical_monitor_configs,
|
||||
+ disabled_monitor_specs,
|
||||
+ for_lease_monitor_specs,
|
||||
+ layout_mode,
|
||||
+ META_MONITORS_CONFIG_FLAG_NONE);
|
||||
if (!meta_verify_monitors_config (config, manager, &error))
|
||||
{
|
||||
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
|
||||
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
|
||||
index 1f87c36528..380f55cc75 100644
|
||||
--- a/src/tests/monitor-unit-tests.c
|
||||
+++ b/src/tests/monitor-unit-tests.c
|
||||
@@ -9564,6 +9564,10 @@ meta_test_monitor_custom_for_lease_config_dbus (void)
|
||||
MetaMonitorTestSetup *test_setup;
|
||||
g_autoptr (GDBusProxy) display_config_proxy = NULL;
|
||||
g_autoptr (GVariant) state = NULL;
|
||||
+ uint32_t serial;
|
||||
+ GVariantBuilder b;
|
||||
+ g_autoptr (GVariant) apply_config_ret = NULL;
|
||||
+ g_autoptr (GVariant) new_state = NULL;
|
||||
|
||||
test_setup = meta_create_monitor_test_setup (test_backend,
|
||||
&test_case_setup,
|
||||
@@ -9597,6 +9601,62 @@ meta_test_monitor_custom_for_lease_config_dbus (void)
|
||||
|
||||
assert_monitor_state (state, 0, "DP-1", FALSE);
|
||||
assert_monitor_state (state, 1, "DP-2", TRUE);
|
||||
+
|
||||
+ /* Swap monitor for lease */
|
||||
+ serial = g_variant_get_uint32 (g_variant_get_child_value (state, 0));
|
||||
+
|
||||
+ g_variant_builder_init (&b, G_VARIANT_TYPE ("(uua(iiduba(ssa{sv}))a{sv})"));
|
||||
+ g_variant_builder_add (&b, "u", serial); /* Serial from GetCurrentState */
|
||||
+ g_variant_builder_add (&b, "u", 1); /* Method: Temporary */
|
||||
+
|
||||
+ /* Logical monitors */
|
||||
+ g_variant_builder_open (&b, G_VARIANT_TYPE ("a(iiduba(ssa{sv}))"));
|
||||
+ g_variant_builder_open (&b, G_VARIANT_TYPE ("(iiduba(ssa{sv}))"));
|
||||
+ g_variant_builder_add (&b, "i", 0); /* x */
|
||||
+ g_variant_builder_add (&b, "i", 0); /* y */
|
||||
+ g_variant_builder_add (&b, "d", 1.0); /* Scale */
|
||||
+ g_variant_builder_add (&b, "u", 0); /* Transform */
|
||||
+ g_variant_builder_add (&b, "b", TRUE); /* Primary */
|
||||
+ g_variant_builder_add_parsed (&b, "[(%s, %s, @a{sv} {})]", /* Monitors */
|
||||
+ "DP-2",
|
||||
+ "800x600@60.000");
|
||||
+ g_variant_builder_close (&b);
|
||||
+ g_variant_builder_close (&b);
|
||||
+
|
||||
+ /* Properties */
|
||||
+ g_variant_builder_open (&b, G_VARIANT_TYPE ("a{sv}"));
|
||||
+ g_variant_builder_add_parsed (&b, "{'monitors-for-lease', <[(%s, %s, %s, %s)]>}",
|
||||
+ "DP-1",
|
||||
+ "MetaProduct\'s Inc.",
|
||||
+ "MetaMonitor",
|
||||
+ "0x123456");
|
||||
+ g_variant_builder_close (&b);
|
||||
+
|
||||
+ g_dbus_proxy_call (display_config_proxy,
|
||||
+ "ApplyMonitorsConfig",
|
||||
+ g_variant_builder_end (&b),
|
||||
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
|
||||
+ -1,
|
||||
+ NULL,
|
||||
+ on_proxy_call_cb,
|
||||
+ &apply_config_ret);
|
||||
+ while (!apply_config_ret)
|
||||
+ g_main_context_iteration (NULL, TRUE);
|
||||
+
|
||||
+ /* Check that monitors changed */
|
||||
+ g_dbus_proxy_call (display_config_proxy,
|
||||
+ "GetCurrentState",
|
||||
+ NULL,
|
||||
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
|
||||
+ -1,
|
||||
+ NULL,
|
||||
+ on_proxy_call_cb,
|
||||
+ &new_state);
|
||||
+ while (!new_state)
|
||||
+ g_main_context_iteration (NULL, TRUE);
|
||||
+
|
||||
+ assert_monitor_state (new_state, 0, "DP-1", TRUE);
|
||||
+ assert_monitor_state (new_state, 1, "DP-2", FALSE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,74 +0,0 @@
|
||||
From 863b31cae9be5e8e0467f1a9f93e7348d41f7e88 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Tue, 29 Oct 2024 11:35:17 +0100
|
||||
Subject: [PATCH 3/5] output/kms: Add meta_output_kms_from_kms_connector()
|
||||
|
||||
Add a function that returns a MetaOutputKms (if any) from a
|
||||
MetaKmsConnector.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4112>
|
||||
---
|
||||
src/backends/native/meta-output-kms.c | 19 +++++++++++++++++++
|
||||
src/backends/native/meta-output-kms.h | 2 ++
|
||||
2 files changed, 21 insertions(+)
|
||||
|
||||
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
|
||||
index 684cf0e094..27b7533a5e 100644
|
||||
--- a/src/backends/native/meta-output-kms.c
|
||||
+++ b/src/backends/native/meta-output-kms.c
|
||||
@@ -47,6 +47,8 @@ struct _MetaOutputKms
|
||||
|
||||
G_DEFINE_TYPE (MetaOutputKms, meta_output_kms, META_TYPE_OUTPUT_NATIVE)
|
||||
|
||||
+static GQuark kms_connector_output_kms_quark;
|
||||
+
|
||||
MetaKmsConnector *
|
||||
meta_output_kms_get_kms_connector (MetaOutputKms *output_kms)
|
||||
{
|
||||
@@ -90,6 +92,13 @@ meta_output_kms_can_clone (MetaOutputKms *output_kms,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+MetaOutputKms *
|
||||
+meta_output_kms_from_kms_connector (MetaKmsConnector *connector)
|
||||
+{
|
||||
+ return g_object_get_qdata (G_OBJECT (connector),
|
||||
+ kms_connector_output_kms_quark);
|
||||
+}
|
||||
+
|
||||
static GBytes *
|
||||
meta_output_kms_read_edid (MetaOutputNative *output_native)
|
||||
{
|
||||
@@ -534,6 +543,16 @@ meta_output_kms_new (MetaGpuKms *gpu_kms,
|
||||
meta_output_unassign_crtc (output);
|
||||
}
|
||||
|
||||
+ if (!kms_connector_output_kms_quark)
|
||||
+ {
|
||||
+ kms_connector_output_kms_quark =
|
||||
+ g_quark_from_static_string ("kms-connector-output-kms-quark");
|
||||
+ }
|
||||
+
|
||||
+ g_object_set_qdata (G_OBJECT (kms_connector),
|
||||
+ kms_connector_output_kms_quark,
|
||||
+ output_kms);
|
||||
+
|
||||
return output_kms;
|
||||
}
|
||||
|
||||
diff --git a/src/backends/native/meta-output-kms.h b/src/backends/native/meta-output-kms.h
|
||||
index e0eb60eb4d..4391dc1899 100644
|
||||
--- a/src/backends/native/meta-output-kms.h
|
||||
+++ b/src/backends/native/meta-output-kms.h
|
||||
@@ -39,6 +39,8 @@ MetaKmsConnector * meta_output_kms_get_kms_connector (MetaOutputKms *output_kms)
|
||||
|
||||
uint32_t meta_output_kms_get_connector_id (MetaOutputKms *output_kms);
|
||||
|
||||
+MetaOutputKms * meta_output_kms_from_kms_connector (MetaKmsConnector *connector);
|
||||
+
|
||||
MetaOutputKms * meta_output_kms_new (MetaGpuKms *gpu_kms,
|
||||
MetaKmsConnector *kms_connector,
|
||||
MetaOutput *old_output,
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,78 +0,0 @@
|
||||
From 63b7d958f226b05694eeeed7d1a7bc77d84464ae Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Tue, 29 Oct 2024 12:09:21 +0100
|
||||
Subject: [PATCH 4/5] kms/connector: Rename meta_kms_connector_is_for_lease()
|
||||
|
||||
Now that connectors can be configured as for lease, rename the function
|
||||
to meta_kms_connector_is_non_desktop() to make clear that it returns
|
||||
the hardware configuration rather than the user configuration.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4112>
|
||||
---
|
||||
src/backends/native/meta-drm-lease.c | 4 ++--
|
||||
src/backends/native/meta-gpu-kms.c | 2 +-
|
||||
src/backends/native/meta-kms-connector.c | 2 +-
|
||||
src/backends/native/meta-kms-connector.h | 2 +-
|
||||
4 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-drm-lease.c b/src/backends/native/meta-drm-lease.c
|
||||
index 7cddb6c8ed..302147e9bb 100644
|
||||
--- a/src/backends/native/meta-drm-lease.c
|
||||
+++ b/src/backends/native/meta-drm-lease.c
|
||||
@@ -227,7 +227,7 @@ find_resources_to_lease (MetaDrmLeaseManager *lease_manager,
|
||||
MetaKmsDevice *connector_device;
|
||||
|
||||
if (!g_list_find (available_connectors, connector) ||
|
||||
- !meta_kms_connector_is_for_lease (connector))
|
||||
+ !meta_kms_connector_is_non_desktop (connector))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
"Failed to find connector %u (%s)",
|
||||
@@ -645,7 +645,7 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
||||
kms_connector = o->data;
|
||||
lease = NULL;
|
||||
|
||||
- if (!meta_kms_connector_is_for_lease (kms_connector))
|
||||
+ if (!meta_kms_connector_is_non_desktop (kms_connector))
|
||||
continue;
|
||||
|
||||
if (g_list_find (lease_manager->connectors, kms_connector))
|
||||
diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c
|
||||
index 3b4356ca6b..c633d6d68e 100644
|
||||
--- a/src/backends/native/meta-gpu-kms.c
|
||||
+++ b/src/backends/native/meta-gpu-kms.c
|
||||
@@ -355,7 +355,7 @@ init_outputs (MetaGpuKms *gpu_kms)
|
||||
if (!meta_kms_connector_get_current_state (kms_connector))
|
||||
continue;
|
||||
|
||||
- if (meta_kms_connector_is_for_lease (kms_connector))
|
||||
+ if (meta_kms_connector_is_non_desktop (kms_connector))
|
||||
continue;
|
||||
|
||||
old_output =
|
||||
diff --git a/src/backends/native/meta-kms-connector.c b/src/backends/native/meta-kms-connector.c
|
||||
index cc6cd89f56..7723416aa3 100644
|
||||
--- a/src/backends/native/meta-kms-connector.c
|
||||
+++ b/src/backends/native/meta-kms-connector.c
|
||||
@@ -165,7 +165,7 @@ meta_kms_connector_get_current_state (MetaKmsConnector *connector)
|
||||
}
|
||||
|
||||
gboolean
|
||||
-meta_kms_connector_is_for_lease (MetaKmsConnector *connector)
|
||||
+meta_kms_connector_is_non_desktop (MetaKmsConnector *connector)
|
||||
{
|
||||
const char *lease_connectors_str;
|
||||
|
||||
diff --git a/src/backends/native/meta-kms-connector.h b/src/backends/native/meta-kms-connector.h
|
||||
index 84ee7f5c26..328465d0fa 100644
|
||||
--- a/src/backends/native/meta-kms-connector.h
|
||||
+++ b/src/backends/native/meta-kms-connector.h
|
||||
@@ -102,4 +102,4 @@ MetaKmsMode * meta_kms_connector_get_preferred_mode (MetaKmsConnector *connector
|
||||
META_EXPORT_TEST
|
||||
const MetaKmsConnectorState * meta_kms_connector_get_current_state (MetaKmsConnector *connector);
|
||||
|
||||
-gboolean meta_kms_connector_is_for_lease (MetaKmsConnector *connector);
|
||||
+gboolean meta_kms_connector_is_non_desktop (MetaKmsConnector *connector);
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,130 +0,0 @@
|
||||
From 55910e467f42ce9d6e761afd8f50110cb1cc3164 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= <jexposit@redhat.com>
|
||||
Date: Mon, 28 Oct 2024 08:54:45 +0100
|
||||
Subject: [PATCH 5/5] native/drm-lease: Handle monitors configured for lease
|
||||
|
||||
Follow the configuration stored in MetaMonitor and make connectors
|
||||
configured as for lease available to Wayland clients.
|
||||
|
||||
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4112>
|
||||
---
|
||||
src/backends/native/meta-drm-lease.c | 45 ++++++++++++++++++++++++++--
|
||||
1 file changed, 43 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/backends/native/meta-drm-lease.c b/src/backends/native/meta-drm-lease.c
|
||||
index 302147e9bb..582f869b3b 100644
|
||||
--- a/src/backends/native/meta-drm-lease.c
|
||||
+++ b/src/backends/native/meta-drm-lease.c
|
||||
@@ -21,12 +21,14 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
+#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/native/meta-crtc-kms.h"
|
||||
#include "backends/native/meta-kms.h"
|
||||
#include "backends/native/meta-kms-connector.h"
|
||||
#include "backends/native/meta-kms-crtc-private.h"
|
||||
#include "backends/native/meta-kms-device.h"
|
||||
#include "backends/native/meta-kms-plane.h"
|
||||
+#include "backends/native/meta-output-kms.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -68,6 +70,7 @@ struct _MetaDrmLeaseManager
|
||||
|
||||
gulong resources_changed_handler_id;
|
||||
gulong lease_changed_handler_id;
|
||||
+ gulong monitors_changed_handler_id;
|
||||
|
||||
/* MetaKmsDevice *kms_device */
|
||||
GList *devices;
|
||||
@@ -179,6 +182,32 @@ find_plane_to_lease (MetaKmsCrtc *kms_crtc,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+is_connector_configured_for_lease (MetaKmsConnector *connector)
|
||||
+{
|
||||
+ const MetaKmsConnectorState *connector_state;
|
||||
+ MetaOutputKms *output_kms;
|
||||
+ MetaMonitor *monitor;
|
||||
+
|
||||
+ connector_state = meta_kms_connector_get_current_state (connector);
|
||||
+ if (!connector_state)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ output_kms = meta_output_kms_from_kms_connector (connector);
|
||||
+ if (!output_kms)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ monitor = meta_output_get_monitor (META_OUTPUT (output_kms));
|
||||
+ return meta_monitor_is_for_lease (monitor);
|
||||
+}
|
||||
+
|
||||
+static gboolean
|
||||
+is_connector_for_lease (MetaKmsConnector *connector)
|
||||
+{
|
||||
+ return meta_kms_connector_is_non_desktop (connector) ||
|
||||
+ is_connector_configured_for_lease (connector);
|
||||
+}
|
||||
+
|
||||
static gboolean
|
||||
find_resources_to_lease (MetaDrmLeaseManager *lease_manager,
|
||||
MetaKmsDevice *kms_device,
|
||||
@@ -227,7 +256,7 @@ find_resources_to_lease (MetaDrmLeaseManager *lease_manager,
|
||||
MetaKmsDevice *connector_device;
|
||||
|
||||
if (!g_list_find (available_connectors, connector) ||
|
||||
- !meta_kms_connector_is_non_desktop (connector))
|
||||
+ !is_connector_for_lease (connector))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
"Failed to find connector %u (%s)",
|
||||
@@ -645,7 +674,7 @@ update_connectors (MetaDrmLeaseManager *lease_manager,
|
||||
kms_connector = o->data;
|
||||
lease = NULL;
|
||||
|
||||
- if (!meta_kms_connector_is_non_desktop (kms_connector))
|
||||
+ if (!is_connector_for_lease (kms_connector))
|
||||
continue;
|
||||
|
||||
if (g_list_find (lease_manager->connectors, kms_connector))
|
||||
@@ -845,6 +874,9 @@ meta_drm_lease_manager_constructed (GObject *object)
|
||||
{
|
||||
MetaDrmLeaseManager *lease_manager = META_DRM_LEASE_MANAGER (object);
|
||||
MetaKms *kms = lease_manager->kms;
|
||||
+ MetaBackend *backend = meta_kms_get_backend (kms);
|
||||
+ MetaMonitorManager *monitor_manager =
|
||||
+ meta_backend_get_monitor_manager (backend);
|
||||
|
||||
lease_manager->resources_changed_handler_id =
|
||||
g_signal_connect (kms, "resources-changed",
|
||||
@@ -854,6 +886,10 @@ meta_drm_lease_manager_constructed (GObject *object)
|
||||
g_signal_connect (kms, "lease-changed",
|
||||
G_CALLBACK (on_lease_changed),
|
||||
lease_manager);
|
||||
+ lease_manager->monitors_changed_handler_id =
|
||||
+ g_signal_connect_swapped (monitor_manager, "monitors-changed-internal",
|
||||
+ G_CALLBACK (update_resources),
|
||||
+ lease_manager);
|
||||
|
||||
lease_manager->leases =
|
||||
g_hash_table_new_full (NULL, NULL,
|
||||
@@ -905,9 +941,14 @@ meta_drm_lease_manager_dispose (GObject *object)
|
||||
{
|
||||
MetaDrmLeaseManager *lease_manager = META_DRM_LEASE_MANAGER (object);
|
||||
MetaKms *kms = lease_manager->kms;
|
||||
+ MetaBackend *backend = meta_kms_get_backend (kms);
|
||||
+ MetaMonitorManager *monitor_manager =
|
||||
+ meta_backend_get_monitor_manager (backend);
|
||||
|
||||
g_clear_signal_handler (&lease_manager->resources_changed_handler_id, kms);
|
||||
g_clear_signal_handler (&lease_manager->lease_changed_handler_id, kms);
|
||||
+ g_clear_signal_handler (&lease_manager->monitors_changed_handler_id,
|
||||
+ monitor_manager);
|
||||
|
||||
g_list_free_full (g_steal_pointer (&lease_manager->devices), g_object_unref);
|
||||
g_list_free_full (g_steal_pointer (&lease_manager->connectors),
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -1,76 +1,67 @@
|
||||
## START: Set by rpmautospec
|
||||
## (rpmautospec version 0.8.3)
|
||||
## RPMAUTOSPEC: autorelease, autochangelog
|
||||
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
|
||||
release_number = 4;
|
||||
base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
|
||||
print(release_number + base_release_number - 1);
|
||||
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
|
||||
## END: Set by rpmautospec
|
||||
|
||||
%global glib_version 2.75.1
|
||||
%global gtk3_version 3.19.8
|
||||
%global gtk4_version 4.0.0
|
||||
%global gsettings_desktop_schemas_version 47~beta
|
||||
%global libinput_version 1.19.0
|
||||
%global pipewire_version 0.3.33
|
||||
%global libinput_version 1.27.0
|
||||
%global pipewire_version 1.2.7
|
||||
%global lcms2_version 2.6
|
||||
%global colord_version 1.4.5
|
||||
%global libei_version 1.0.901
|
||||
%global mutter_api_version 15
|
||||
%global libei_version 1.3.901
|
||||
%global mutter_api_version 17
|
||||
|
||||
%global major_version %%(echo %{version} | cut -d '.' -f1 | cut -d '~' -f 1)
|
||||
%global tarball_version %%(echo %{version} | tr '~' '.')
|
||||
|
||||
Name: mutter
|
||||
Version: 47.5
|
||||
Release: 8%{?dist}
|
||||
Version: 49.4
|
||||
Release: %autorelease
|
||||
Summary: Window and compositing manager based on Clutter
|
||||
|
||||
License: GPLv2+
|
||||
License: GPL-2.0-or-later
|
||||
URL: http://www.gnome.org
|
||||
Source0: http://download.gnome.org/sources/%{name}/47/%{name}-%{tarball_version}.tar.xz
|
||||
Source0: http://download.gnome.org/sources/%{name}/%{major_version}/%{name}-%{tarball_version}.tar.xz
|
||||
|
||||
# Work-around for OpenJDK's compliance test
|
||||
Patch: 0001-window-actor-Special-case-shaped-Java-windows.patch
|
||||
# meson >= 1.5.0 is required
|
||||
%global meson_ver 1.5.0
|
||||
Source2: https://github.com/mesonbuild/meson/releases/download/%{meson_ver}/meson-%{meson_ver}.tar.gz
|
||||
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1936991
|
||||
Patch: 0001-Test-deny-atomic-KMS-for-tegra-RHBZ-1936991.patch
|
||||
|
||||
# https://pagure.io/fedora-workstation/issue/79
|
||||
Patch: 0001-place-Always-center-initial-setup-fedora-welcome.patch
|
||||
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2239128
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/issues/3068
|
||||
# not upstreamed because for upstream we'd really want to find a way
|
||||
# to fix *both* problems
|
||||
Patch: 0001-Revert-x11-window-Compare-input-shape-to-client-rect.patch
|
||||
Patch: 0002-Revert-x11-window-Update-comment-and-variable-name-t.patch
|
||||
Patch: 0003-Revert-x11-window-Use-correct-bounding-rect-to-deter.patch
|
||||
|
||||
# Revert deprecation fix to avoid newer glib requirement
|
||||
Patch: 0001-Revert-Replace-deprecated-g_qsort_with_data-with-g_s.patch
|
||||
|
||||
# RHEL-74359
|
||||
Patch: 0001-cursor-renderer-native-Pass-destination-format-to-sc.patch
|
||||
Patch: 0002-cursor-renderer-native-Store-formats-in-MetaCursorRe.patch
|
||||
Patch: 0003-cursor-renderer-native-Probe-formats-supported-by-cu.patch
|
||||
Patch: 0001-cursor-renderer-native-Skip-init_hw_cursor_support_f.patch
|
||||
Patch: 0001-cursor-renderer-native-Fix-crash-with-MUTTER_DEBUG_D.patch
|
||||
Patch: 0001-cursor-renderer-native-Cast-MetaGpu-to-MetaGpuKms-on.patch
|
||||
# Avoid glycin dependency (only needed for HDR backgrounds)
|
||||
Patch: 0001-Revert-background-Port-from-gdk-pixbuf-to-glycin.patch
|
||||
Patch: 0002-Revert-background-Plumb-color-state-through-backgrou.patch
|
||||
|
||||
# RHEL-62220
|
||||
# DRM lease configuration via monitors.xml and D-Bus:
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4112
|
||||
Patch: 0001-monitor-manager-Add-forlease-config-to-monitors.xml.patch
|
||||
Patch: 0002-monitor-Keep-track-of-the-for-lease-status.patch
|
||||
Patch: 0003-output-kms-Add-meta_output_kms_from_kms_connector.patch
|
||||
Patch: 0004-kms-connector-Rename-meta_kms_connector_is_for_lease.patch
|
||||
Patch: 0005-native-drm-lease-Handle-monitors-configured-for-leas.patch
|
||||
# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4121
|
||||
Patch: 0001-monitor-manager-Return-for-lease-status-in-GetCurren.patch
|
||||
Patch: 0002-monitor-manager-Allow-to-check-if-config-has-a-visib.patch
|
||||
Patch: 0003-monitor-manager-Configure-for-lease-monitors-in-Appl.patch
|
||||
# Revert upstream devkit commit that depends on newer gtk4
|
||||
Patch: 0001-Revert-mdk-Use-PipeWire-damage-region-for-minimizing.patch
|
||||
|
||||
# Backports from gnome-47 branch between 47.5 and 47.6
|
||||
Patch: 0001-wayland-Fix-refresh-interval-reporting-in-presentati.patch
|
||||
Patch: 0002-input-capture-session-Disconnect-on_keymap_changed-o.patch
|
||||
# Revert upstream test suite patch that depends on umockdev, which isn't
|
||||
# available in the appropriate repository.
|
||||
Patch: 0001-Revert-tests-monitor-backlight-Add-tests-for-the-sys.patch
|
||||
|
||||
# Overlay cursor damage fix: RHEL-58079, RHEL-81897
|
||||
Patch: 0001-backends-Update-stage-views-and-stage-dimension-from.patch
|
||||
Patch: 0002-stage-Track-overlay-damage-per-view.patch
|
||||
# Fix flaky tests
|
||||
Patch: 0001-mtk-Take-explicit-reference-for-mtk_extrapolate_next.patch
|
||||
Patch: 0001-tests-test-runner-Do-a-client-roundtrip-after-popup-.patch
|
||||
|
||||
# Handle unmaximize when headless
|
||||
# https://redhat.atlassian.net/browse/RHEL-156728
|
||||
Patch: unmaximize-when-headless.patch
|
||||
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.41.0
|
||||
BuildRequires: pkgconfig(sm)
|
||||
BuildRequires: pkgconfig(libadwaita-1)
|
||||
BuildRequires: pkgconfig(libwacom)
|
||||
BuildRequires: pkgconfig(x11)
|
||||
BuildRequires: pkgconfig(xdamage)
|
||||
@ -101,10 +92,12 @@ BuildRequires: pkgconfig(libsystemd)
|
||||
BuildRequires: pkgconfig(xkeyboard-config)
|
||||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: cvt
|
||||
BuildRequires: python3-argcomplete
|
||||
BuildRequires: python3-docutils
|
||||
# Bootstrap requirements
|
||||
BuildRequires: gettext-devel git-core
|
||||
BuildRequires: pkgconfig(libcanberra)
|
||||
BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_version}
|
||||
BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version}
|
||||
BuildRequires: pkgconfig(gnome-settings-daemon)
|
||||
BuildRequires: meson
|
||||
BuildRequires: pkgconfig(gbm)
|
||||
@ -121,9 +114,13 @@ BuildRequires: pkgconfig(libeis-1.0) >= %{libei_version}
|
||||
|
||||
BuildRequires: pkgconfig(libinput) >= %{libinput_version}
|
||||
BuildRequires: pkgconfig(xwayland)
|
||||
BuildRequires: pkgconfig(bash-completion)
|
||||
|
||||
BuildRequires: python3-dbusmock
|
||||
|
||||
# for meson
|
||||
BuildRequires: python3-devel
|
||||
|
||||
Requires: control-center-filesystem
|
||||
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
|
||||
Requires: gnome-settings-daemon
|
||||
@ -132,6 +129,7 @@ Requires: libinput%{?_isa} >= %{libinput_version}
|
||||
Requires: pipewire%{_isa} >= %{pipewire_version}
|
||||
Requires: startup-notification
|
||||
Requires: dbus
|
||||
Requires: python3-argcomplete
|
||||
|
||||
# Need common
|
||||
Requires: %{name}-common = %{version}-%{release}
|
||||
@ -194,24 +192,57 @@ the functionality of the installed %{name} package.
|
||||
%prep
|
||||
%autosetup -S git -n %{name}-%{tarball_version}
|
||||
|
||||
# Extract meson
|
||||
tar -xvf %{SOURCE2}
|
||||
|
||||
%build
|
||||
%meson -Degl_device=true
|
||||
# Build meson
|
||||
cd meson-%{meson_ver}
|
||||
%py3_build
|
||||
%py3_install
|
||||
%global __meson %{buildroot}%{_bindir}/meson
|
||||
export PYTHONPATH=%{buildroot}%{python3_sitelib}:%{python3_sitelib}
|
||||
cd -
|
||||
|
||||
%meson -Degl_device=true -Dx11=true
|
||||
%meson_build
|
||||
|
||||
%install
|
||||
cd meson-%{meson_ver}
|
||||
%py3_build
|
||||
%py3_install
|
||||
%global __meson %{buildroot}%{_bindir}/meson
|
||||
export PYTHONPATH=%{buildroot}%{python3_sitelib}:%{python3_sitelib}
|
||||
cd -
|
||||
|
||||
%meson_install
|
||||
|
||||
# Delete files installed by meson
|
||||
rm -f %{buildroot}%{_bindir}/meson
|
||||
rm -rf %{buildroot}%{_mandir}/man1/meson.1*
|
||||
rm -f %{buildroot}%{_datadir}/polkit-1/actions/com.mesonbuild.install.policy
|
||||
rm -f %{buildroot}%{_datadir}/bash-completion/completions/meson
|
||||
rm -f %{buildroot}%{_datadir}/zsh/site-functions/_meson
|
||||
rm -rf %{buildroot}%{python3_sitelib}
|
||||
|
||||
%find_lang %{name}
|
||||
|
||||
%files -f %{name}.lang
|
||||
%license COPYING
|
||||
%doc NEWS
|
||||
%{_bindir}/mutter
|
||||
%{_datadir}/polkit-1/actions/org.gnome.mutter.*.policy
|
||||
%{_bindir}/gdctl
|
||||
%{_bindir}/gnome-service-client
|
||||
%{_datadir}/bash-completion/completions/gdctl
|
||||
%{_libdir}/lib*.so.*
|
||||
%{_libdir}/mutter-%{mutter_api_version}/
|
||||
%{_libexecdir}/mutter-backlight-helper
|
||||
%{_libexecdir}/mutter-restart-helper
|
||||
%{_libexecdir}/mutter-x11-frames
|
||||
%{_mandir}/man1/mutter.1*
|
||||
%{_mandir}/man1/gdctl.1*
|
||||
%{_mandir}/man1/gnome-service-client.1*
|
||||
|
||||
%files common
|
||||
%{_datadir}/GConf/gsettings/mutter-schemas.convert
|
||||
@ -221,9 +252,14 @@ the functionality of the installed %{name} package.
|
||||
%{_udevrulesdir}/61-mutter.rules
|
||||
|
||||
%files devel
|
||||
%{_datadir}/applications/org.gnome.Mutter.Mdk.desktop
|
||||
%{_datadir}/glib-2.0/schemas/org.gnome.mutter.devkit.gschema.xml
|
||||
%{_datadir}/icons/hicolor/*/apps/org.gnome.Mutter.Mdk*
|
||||
%{_includedir}/*
|
||||
%{_libdir}/lib*.so
|
||||
%{_libdir}/mutter-%{mutter_api_version}/*.gir
|
||||
%{_libdir}/pkgconfig/*
|
||||
%{_libexecdir}/mutter-devkit
|
||||
|
||||
%files tests
|
||||
%{_libexecdir}/installed-tests/mutter-%{mutter_api_version}
|
||||
@ -231,8 +267,51 @@ the functionality of the installed %{name} package.
|
||||
%{_datadir}/mutter-%{mutter_api_version}/tests
|
||||
|
||||
%changelog
|
||||
* Tue Jul 01 2025 Craig Guiller <craig.guiller@oracle.com> - 47.5.8
|
||||
- Bump release
|
||||
## START: Generated by rpmautospec
|
||||
* Thu Apr 23 2026 Tomas Pelka <tpelka@redhat.com> - 49.4-4
|
||||
- Handle unmaximize when headless
|
||||
|
||||
* Tue Feb 17 2026 Jonas Ådahl <jadahl@redhat.com> - 49.4-3
|
||||
- Fix flaky popup test
|
||||
|
||||
* Mon Feb 16 2026 Jonas Ådahl <jadahl@redhat.com> - 49.4-2
|
||||
- Fix flaky test case
|
||||
|
||||
* Fri Feb 13 2026 Jonas Ådahl <jadahl@redhat.com> - 49.4-1
|
||||
- Update to 49.4
|
||||
|
||||
* Tue Nov 11 2025 Florian Müllner <fmuellner@redhat.com> - 49.1.1-1
|
||||
- Update to 49.1.1
|
||||
|
||||
* Mon Nov 10 2025 Florian Müllner <fmuellner@redhat.com> - 47.5-16
|
||||
- Bundle newer meson
|
||||
|
||||
* Fri Nov 07 2025 Florian Müllner <fmuellner@redhat.com> - 47.5-15
|
||||
- Use SPDX license
|
||||
|
||||
* Fri Nov 07 2025 Florian Müllner <fmuellner@redhat.com> - 47.5-14
|
||||
- Deduce source URL from version
|
||||
|
||||
* Mon Aug 18 2025 Jonas Ådahl <jadahl@redhat.com> - 47.5-13
|
||||
- Fix path to gdctl when running installed test
|
||||
|
||||
* Fri Aug 15 2025 Jonas Ådahl <jadahl@redhat.com> - 47.5-12
|
||||
- Backport gdctl utility
|
||||
|
||||
* Thu Jun 26 2025 Olivier Fourdan <ofourdan@redhat.com> - 47.5-11
|
||||
- Fix polyinstantiation preventing Xwayland to start
|
||||
|
||||
* Wed May 21 2025 Michel Dänzer <mdaenzer@redhat.com> - 47.5-10
|
||||
- Backport "Fix race hotplug race conditions in DRM lease manager"
|
||||
|
||||
* Tue Apr 01 2025 Olivier Fourdan <ofourdan@redhat.com> - 47.5-9
|
||||
- Backport the pre-configure mechanism
|
||||
|
||||
* Wed Mar 26 2025 Jonas Ådahl <jadahl@redhat.com> - 47.5-8
|
||||
- Compensate for backend initialization order change in backport
|
||||
|
||||
* Tue Mar 25 2025 Jonas Ådahl <jadahl@redhat.com> - 47.5-7
|
||||
- Backport Accessibility manager patches
|
||||
|
||||
* Wed Mar 12 2025 Jonas Ådahl <jadahl@redhat.com> - 47.5-6
|
||||
- Backport fix for software cursors artifacts
|
||||
@ -1724,3 +1803,4 @@ the functionality of the installed %{name} package.
|
||||
- Initial packaging
|
||||
|
||||
|
||||
## END: Generated by rpmautospec
|
||||
2
sources
Normal file
2
sources
Normal file
@ -0,0 +1,2 @@
|
||||
SHA512 (meson-1.5.0.tar.gz) = f0a25cf134949739c698eddaea602bf7852866b3fee3d2c11c1e6b6e48c944cf92abc3d171a2e42e21077edc01f1e7079d451f5624e2b6131382e114e814db3e
|
||||
SHA512 (mutter-49.4.tar.xz) = d4cc6f9bd5367644a121bec23cfee30aa736e692cf5bdaba638635817d34f00eed6fa31e9dcbffae0c58bf7c0483d58a2c595e210071646ce361fb86650cd301
|
||||
298
unmaximize-when-headless.patch
Normal file
298
unmaximize-when-headless.patch
Normal file
@ -0,0 +1,298 @@
|
||||
From b14301e520c15fc2c5166bfbed06e14d03bbe878 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Tue, 17 Mar 2026 16:50:04 +0100
|
||||
Subject: [PATCH 1/4] tests/test-runner: Add 'remove_monitor' command
|
||||
|
||||
This allows removing any added monitor, or the monitor added by default.
|
||||
---
|
||||
src/tests/test-runner.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c
|
||||
index e036b16bd6..6a8375144d 100644
|
||||
--- a/src/tests/test-runner.c
|
||||
+++ b/src/tests/test-runner.c
|
||||
@@ -2324,6 +2324,18 @@ test_case_do (TestCase *test,
|
||||
|
||||
g_hash_table_insert (test->virtual_monitors, g_strdup (argv[1]), monitor);
|
||||
}
|
||||
+ else if (strcmp (argv[0], "remove_monitor") == 0)
|
||||
+ {
|
||||
+ MetaBackend *backend = meta_context_get_backend (test->context);
|
||||
+ MetaMonitorManager *monitor_manager =
|
||||
+ meta_backend_get_monitor_manager (backend);
|
||||
+
|
||||
+ if (argc != 2)
|
||||
+ BAD_COMMAND ("usage: %s <monitor-id>", argv[0]);
|
||||
+
|
||||
+ g_hash_table_remove (test->virtual_monitors, g_strdup (argv[1]));
|
||||
+ meta_monitor_manager_reload (monitor_manager);
|
||||
+ }
|
||||
else if (strcmp (argv[0], "set_monitor_order") == 0)
|
||||
{
|
||||
MetaBackend *backend = meta_context_get_backend (test->context);
|
||||
--
|
||||
2.51.0
|
||||
|
||||
|
||||
From b4f6e1b3fac0440216c319ec4936df8cd4108f61 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Tue, 17 Mar 2026 16:50:44 +0100
|
||||
Subject: [PATCH 2/4] tests/test-runner: Handle sanity checking while headless
|
||||
|
||||
When headless, monitors will not have a current monitor, as there is
|
||||
none. Handle this.
|
||||
---
|
||||
src/backends/meta-monitor-manager-private.h | 1 +
|
||||
src/tests/test-runner.c | 21 +++++++++++++++++----
|
||||
2 files changed, 18 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
|
||||
index e219c95aaf..522730c904 100644
|
||||
--- a/src/backends/meta-monitor-manager-private.h
|
||||
+++ b/src/backends/meta-monitor-manager-private.h
|
||||
@@ -353,6 +353,7 @@ void meta_monitor_manager_update_logical_state_derived (MetaMonito
|
||||
META_EXPORT_TEST
|
||||
void meta_monitor_manager_lid_is_closed_changed (MetaMonitorManager *manager);
|
||||
|
||||
+META_EXPORT_TEST
|
||||
gboolean meta_monitor_manager_is_headless (MetaMonitorManager *manager);
|
||||
|
||||
float meta_monitor_manager_calculate_monitor_mode_scale (MetaMonitorManager *manager,
|
||||
diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c
|
||||
index 6a8375144d..551ac15357 100644
|
||||
--- a/src/tests/test-runner.c
|
||||
+++ b/src/tests/test-runner.c
|
||||
@@ -3183,11 +3183,24 @@ sanity_check_monitor (MetaWindow *window)
|
||||
{
|
||||
if (!meta_window_is_hidden (window))
|
||||
{
|
||||
- MtkRectangle rect;
|
||||
+ MetaContext *context = meta_display_get_context (window->display);
|
||||
+ MetaBackend *backend = meta_context_get_backend (context);
|
||||
+ MetaMonitorManager *monitor_manager =
|
||||
+ meta_backend_get_monitor_manager (backend);
|
||||
|
||||
- g_assert_nonnull (window->monitor);
|
||||
- rect = meta_window_config_get_rect (window->config);
|
||||
- g_assert_true (mtk_rectangle_overlap (&rect, &window->monitor->rect));
|
||||
+ if (meta_monitor_manager_is_headless (monitor_manager))
|
||||
+ {
|
||||
+ g_assert_null (window->monitor);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ MtkRectangle rect;
|
||||
+
|
||||
+ g_assert_nonnull (window->monitor);
|
||||
+
|
||||
+ rect = meta_window_config_get_rect (window->config);
|
||||
+ g_assert_true (mtk_rectangle_overlap (&rect, &window->monitor->rect));
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.51.0
|
||||
|
||||
|
||||
From dd0811b6a1576df8d1d8fd9c0fdb0381fec805e0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Fri, 17 Apr 2026 09:37:43 +0200
|
||||
Subject: [PATCH 3/4] window: Bail proper unmaximizing when headless
|
||||
|
||||
We don't have any information to handle placing a window when
|
||||
unmaximizing and headless, so just place it at 0,0.
|
||||
---
|
||||
src/core/window.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/core/window.c b/src/core/window.c
|
||||
index 8f44f60d22..2b2ad8b0ac 100644
|
||||
--- a/src/core/window.c
|
||||
+++ b/src/core/window.c
|
||||
@@ -3443,6 +3443,7 @@ meta_window_set_unmaximize_flags (MetaWindow *window,
|
||||
gboolean has_desired_rect = FALSE;
|
||||
MtkRectangle target_rect;
|
||||
MtkRectangle work_area;
|
||||
+ gboolean has_work_area = FALSE;
|
||||
MtkRectangle old_frame_rect, old_buffer_rect;
|
||||
gboolean has_target_size;
|
||||
MetaPlaceFlag place_flags = META_PLACE_FLAG_NONE;
|
||||
@@ -3452,7 +3453,11 @@ meta_window_set_unmaximize_flags (MetaWindow *window,
|
||||
|
||||
reset_pending_auto_maximize (window);
|
||||
|
||||
- meta_window_get_work_area_current_monitor (window, &work_area);
|
||||
+ if (window->monitor)
|
||||
+ {
|
||||
+ meta_window_get_work_area_current_monitor (window, &work_area);
|
||||
+ has_work_area = TRUE;
|
||||
+ }
|
||||
meta_window_get_frame_rect (window, &old_frame_rect);
|
||||
meta_window_get_buffer_rect (window, &old_buffer_rect);
|
||||
|
||||
@@ -3508,6 +3513,7 @@ meta_window_set_unmaximize_flags (MetaWindow *window,
|
||||
*/
|
||||
if (unmaximize_horizontally && unmaximize_vertically &&
|
||||
has_desired_rect &&
|
||||
+ has_work_area &&
|
||||
desired_rect.width * desired_rect.height >
|
||||
work_area.width * work_area.height * MAX_UNMAXIMIZED_WINDOW_AREA)
|
||||
{
|
||||
@@ -3572,7 +3578,7 @@ meta_window_set_unmaximize_flags (MetaWindow *window,
|
||||
|
||||
meta_window_recalc_features (window);
|
||||
set_net_wm_state (window);
|
||||
- if (!window->monitor->in_fullscreen)
|
||||
+ if (window->monitor && !window->monitor->in_fullscreen)
|
||||
meta_display_queue_check_fullscreen (window->display);
|
||||
}
|
||||
|
||||
--
|
||||
2.51.0
|
||||
|
||||
|
||||
From 0c410fe7c31a9cbc1c9c2a5a1f115f509a97332f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
Date: Thu, 16 Apr 2026 23:38:28 +0200
|
||||
Subject: [PATCH 4/4] tests: Add test for unmaximizing while headless
|
||||
|
||||
A test is added that verifies the behavior when unmaximizing while no
|
||||
monitor is connected. The 'dispatch' test runner command had to be
|
||||
adapted to handle not getting any frame clock dispatches, since there
|
||||
are no frame CRTC associated frame clocks to dispatch from.
|
||||
---
|
||||
src/tests/meson.build | 1 +
|
||||
.../stacking/unmaximize-headless.metatest | 61 +++++++++++++++++++
|
||||
src/tests/test-runner.c | 32 ++++++----
|
||||
3 files changed, 83 insertions(+), 11 deletions(-)
|
||||
create mode 100644 src/tests/stacking/unmaximize-headless.metatest
|
||||
|
||||
diff --git a/src/tests/meson.build b/src/tests/meson.build
|
||||
index 8c3773033f..64ea5303b1 100644
|
||||
--- a/src/tests/meson.build
|
||||
+++ b/src/tests/meson.build
|
||||
@@ -1181,6 +1181,7 @@ stacking_tests = [
|
||||
'partially-maximized',
|
||||
'move-to-monitor',
|
||||
'keyboard-resize',
|
||||
+ 'unmaximize-headless',
|
||||
]
|
||||
|
||||
foreach stacking_test: stacking_tests
|
||||
diff --git a/src/tests/stacking/unmaximize-headless.metatest b/src/tests/stacking/unmaximize-headless.metatest
|
||||
new file mode 100644
|
||||
index 0000000000..0a738c35d0
|
||||
--- /dev/null
|
||||
+++ b/src/tests/stacking/unmaximize-headless.metatest
|
||||
@@ -0,0 +1,61 @@
|
||||
+set_pref center-new-windows true
|
||||
+
|
||||
+# Test unmaximizing when there is no monitor to place on
|
||||
+
|
||||
+new_client w wayland
|
||||
+create w/1 csd
|
||||
+resize w/1 200 200
|
||||
+maximize w/1
|
||||
+show w/1
|
||||
+wait
|
||||
+
|
||||
+remove_monitor default
|
||||
+
|
||||
+unmaximize w/1
|
||||
+wait_reconfigure w/1
|
||||
+
|
||||
+add_monitor default 800 600
|
||||
+wait_reconfigure w/1
|
||||
+assert_size w/1 200 200
|
||||
+# Incorrect placement expected.
|
||||
+#assert_position w/1 300 200
|
||||
+
|
||||
+remove_monitor default
|
||||
+
|
||||
+maximize w/1
|
||||
+wait_reconfigure w/1
|
||||
+
|
||||
+add_monitor default 1024 768
|
||||
+wait_reconfigure w/1
|
||||
+assert_size w/1 1024 768
|
||||
+assert_position w/1 0 0
|
||||
+
|
||||
+# Same test with an X11 client
|
||||
+
|
||||
+new_client x x11
|
||||
+create x/1 csd
|
||||
+resize x/1 200 200
|
||||
+maximize x/1
|
||||
+show x/1
|
||||
+wait
|
||||
+
|
||||
+remove_monitor default
|
||||
+
|
||||
+unmaximize x/1
|
||||
+wait_reconfigure x/1
|
||||
+
|
||||
+add_monitor default 800 600
|
||||
+wait_reconfigure x/1
|
||||
+assert_size x/1 200 200
|
||||
+# Incorrect placement expected.
|
||||
+#assert_position x/1 300 200
|
||||
+
|
||||
+remove_monitor default
|
||||
+
|
||||
+maximize x/1
|
||||
+wait_reconfigure x/1
|
||||
+
|
||||
+add_monitor default 1024 768
|
||||
+wait_reconfigure x/1
|
||||
+assert_size x/1 1024 768
|
||||
+assert_position x/1 0 0
|
||||
diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c
|
||||
index 551ac15357..235575660f 100644
|
||||
--- a/src/tests/test-runner.c
|
||||
+++ b/src/tests/test-runner.c
|
||||
@@ -163,19 +163,29 @@ test_case_dispatch (TestCase *test,
|
||||
MetaDisplay *display = meta_context_get_display (test->context);
|
||||
MetaCompositor *compositor = meta_display_get_compositor (display);
|
||||
MetaLaters *laters = meta_compositor_get_laters (compositor);
|
||||
+ MetaMonitorManager *monitor_manager =
|
||||
+ meta_backend_get_monitor_manager (backend);
|
||||
|
||||
- /* Wait until we've done any outstanding queued up work.
|
||||
- * Though we add this as BEFORE_REDRAW, the iteration that runs the
|
||||
- * BEFORE_REDRAW idles will proceed on and do the redraw, so we're
|
||||
- * waiting until after *all* frame processing.
|
||||
- */
|
||||
- meta_laters_add (laters, META_LATER_BEFORE_REDRAW,
|
||||
- test_case_loop_quit,
|
||||
- test,
|
||||
- NULL);
|
||||
+ if (meta_monitor_manager_is_headless (monitor_manager))
|
||||
+ {
|
||||
+ while (g_main_context_iteration (NULL, FALSE))
|
||||
+ ;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* Wait until we've done any outstanding queued up work.
|
||||
+ * Though we add this as BEFORE_REDRAW, the iteration that runs the
|
||||
+ * BEFORE_REDRAW idles will proceed on and do the redraw, so we're
|
||||
+ * waiting until after *all* frame processing.
|
||||
+ */
|
||||
+ meta_laters_add (laters, META_LATER_BEFORE_REDRAW,
|
||||
+ test_case_loop_quit,
|
||||
+ test,
|
||||
+ NULL);
|
||||
|
||||
- clutter_stage_schedule_update (CLUTTER_STAGE (stage));
|
||||
- g_main_loop_run (test->loop);
|
||||
+ clutter_stage_schedule_update (CLUTTER_STAGE (stage));
|
||||
+ g_main_loop_run (test->loop);
|
||||
+ }
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
--
|
||||
2.51.0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user