127 lines
5.1 KiB
Diff
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
|
|
|