mutter/0008-wayland-window-configuration-Add-MetaWindowConfig-su.patch

127 lines
5.1 KiB
Diff

From 6ca58583b7a53daa4ff97df403c20161a6da17a4 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Wed, 16 Oct 2024 14:58:37 +0200
Subject: [PATCH 08/10] wayland/window-configuration: Add MetaWindowConfig
support
This allows to bridge MetaWaylandWindowConfiguration and
MetaWindowConfig.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4076>
(cherry picked from commit c597feaa67fdcaa971a561e82b9937970c741bbf)
---
.../meta-wayland-window-configuration.c | 69 +++++++++++++++++++
.../meta-wayland-window-configuration.h | 8 +++
2 files changed, 77 insertions(+)
diff --git a/src/wayland/meta-wayland-window-configuration.c b/src/wayland/meta-wayland-window-configuration.c
index 889072da44..f92c1b34a7 100644
--- a/src/wayland/meta-wayland-window-configuration.c
+++ b/src/wayland/meta-wayland-window-configuration.c
@@ -18,6 +18,8 @@
#include "config.h"
+#include "core/meta-window-config-private.h"
+#include "core/window-private.h"
#include "wayland/meta-wayland-window-configuration.h"
#include "wayland/meta-window-wayland.h"
@@ -123,3 +125,70 @@ meta_wayland_window_configuration_free (MetaWaylandWindowConfiguration *configur
{
g_free (configuration);
}
+
+MetaWindowConfig *
+meta_window_config_new_from_wayland_window_configuration (MetaWindow *window,
+ MetaWaylandWindowConfiguration *configuration)
+{
+ MetaWindowConfig *window_config;
+ MtkRectangle rect;
+
+ window_config = meta_window_new_window_config (window);
+ rect = meta_window_config_get_rect (window->config);
+ meta_window_config_set_rect (window_config, rect);
+ meta_window_config_set_is_fullscreen (window_config,
+ meta_window_config_get_is_fullscreen (window->config));
+
+ if (configuration->has_position)
+ meta_window_config_set_position (window_config,
+ configuration->x,
+ configuration->y);
+
+ if (configuration->has_size &&
+ configuration->width > 0 &&
+ configuration->height > 0)
+ meta_window_config_set_size (window_config,
+ configuration->width,
+ configuration->height);
+
+ return window_config;
+}
+
+MetaWaylandWindowConfiguration *
+meta_wayland_window_configuration_apply_window_config (MetaWindow *window,
+ MetaWaylandWindowConfiguration *configuration,
+ MetaWindowConfig *window_config)
+{
+ MtkRectangle rect;
+ int prev_x = configuration->x;
+ int prev_y = configuration->y;
+ int prev_width = configuration->width;
+ int prev_height = configuration->height;
+ gboolean is_fullscreen;
+
+ rect = meta_window_config_get_rect (window_config);
+ configuration->x = rect.x;
+ configuration->y = rect.y;
+ configuration->width = rect.width;
+ configuration->height = rect.height;
+
+ is_fullscreen = meta_window_config_get_is_fullscreen (window_config);
+ meta_window_config_set_is_fullscreen (window->config, is_fullscreen);
+ configuration->is_fullscreen = is_fullscreen;
+
+ if (prev_x != configuration->x || prev_y != configuration->y)
+ {
+ configuration->has_position = TRUE;
+ meta_window_config_set_position (window->config,
+ configuration->x,
+ configuration->y);
+ window->placed = TRUE;
+ }
+
+ if (prev_width != configuration->width ||
+ prev_height != configuration->height)
+ configuration->has_size = (configuration->width > 0 &&
+ configuration->height > 0);
+
+ return configuration;
+}
diff --git a/src/wayland/meta-wayland-window-configuration.h b/src/wayland/meta-wayland-window-configuration.h
index fb26344bb0..762816e5ac 100644
--- a/src/wayland/meta-wayland-window-configuration.h
+++ b/src/wayland/meta-wayland-window-configuration.h
@@ -22,6 +22,7 @@
#include <stdint.h>
#include "core/window-private.h"
+#include "meta/meta-window-config.h"
#include "wayland/meta-wayland-types.h"
struct _MetaWaylandWindowConfiguration
@@ -72,3 +73,10 @@ MetaWaylandWindowConfiguration * meta_wayland_window_configuration_new_empty (in
int scale);
void meta_wayland_window_configuration_free (MetaWaylandWindowConfiguration *configuration);
+
+MetaWindowConfig * meta_window_config_new_from_wayland_window_configuration (MetaWindow *window,
+ MetaWaylandWindowConfiguration *configuration);
+
+MetaWaylandWindowConfiguration * meta_wayland_window_configuration_apply_window_config (MetaWindow *window,
+ MetaWaylandWindowConfiguration *configuration,
+ MetaWindowConfig *window_config);
--
2.49.0