From 6ca58583b7a53daa4ff97df403c20161a6da17a4 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan 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: (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 #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