59 lines
2.1 KiB
Diff
59 lines
2.1 KiB
Diff
From 4008ed2f55d4621a4ed2230799c1ab2d012b3545 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
|
Date: Wed, 27 Sep 2023 22:59:13 +0800
|
|
Subject: [PATCH] monitor-config-store: Discard config with fractional scale
|
|
when unusable
|
|
|
|
When a configuration has a fractional scale, but we're using a physical
|
|
monitor layout, we can't use the scale, but if we do, we end up with
|
|
wierd issues down the line. Just discard the config if we run into this.
|
|
|
|
Eventually we probably want to store the layout mode in the
|
|
configuration so we can handle more seamless switching between physical
|
|
and logical layout mode, but first do this.
|
|
|
|
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3057
|
|
---
|
|
src/backends/meta-monitor-config-store.c | 13 +++++++++++--
|
|
1 file changed, 11 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/backends/meta-monitor-config-store.c b/src/backends/meta-monitor-config-store.c
|
|
index fe9406fd3f7..53a32cd2aaf 100644
|
|
--- a/src/backends/meta-monitor-config-store.c
|
|
+++ b/src/backends/meta-monitor-config-store.c
|
|
@@ -653,6 +653,7 @@ derive_logical_monitor_layout (MetaLogicalMonitorConfig *logical_monitor_conf
|
|
MetaMonitorConfig *monitor_config;
|
|
int mode_width, mode_height;
|
|
int width = 0, height = 0;
|
|
+ float scale;
|
|
GList *l;
|
|
|
|
monitor_config = logical_monitor_config->monitor_configs->data;
|
|
@@ -683,13 +684,21 @@ derive_logical_monitor_layout (MetaLogicalMonitorConfig *logical_monitor_conf
|
|
height = mode_height;
|
|
}
|
|
|
|
+ scale = logical_monitor_config->scale;
|
|
+
|
|
switch (layout_mode)
|
|
{
|
|
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
|
|
- width = roundf (width / logical_monitor_config->scale);
|
|
- height = roundf (height / logical_monitor_config->scale);
|
|
+ width = roundf (width / scale);
|
|
+ height = roundf (height / scale);
|
|
break;
|
|
case META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL:
|
|
+ if (!G_APPROX_VALUE (scale, roundf (scale), FLT_EPSILON))
|
|
+ {
|
|
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
+ "A fractional scale with physical layout mode not allowed");
|
|
+ return FALSE;
|
|
+ }
|
|
break;
|
|
}
|
|
|
|
--
|
|
GitLab
|
|
|