r54483 - in /desktop/unstable/mutter/debian: changelog patches/0012-Use-a-single-supported-scales.patch patches/series
jbicha at users.alioth.debian.org
jbicha at users.alioth.debian.org
Tue Oct 17 00:17:02 UTC 2017
Author: jbicha
Date: Tue Oct 17 00:17:00 2017
New Revision: 54483
URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=54483
Log:
Allow HiDPI scaling even when non-HiDPI displays are connected
Added:
desktop/unstable/mutter/debian/patches/0012-Use-a-single-supported-scales.patch
Modified:
desktop/unstable/mutter/debian/changelog
desktop/unstable/mutter/debian/patches/series
Modified: desktop/unstable/mutter/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/mutter/debian/changelog?rev=54483&op=diff
==============================================================================
--- desktop/unstable/mutter/debian/changelog [utf-8] (original)
+++ desktop/unstable/mutter/debian/changelog [utf-8] Tue Oct 17 00:17:00 2017
@@ -1,3 +1,11 @@
+mutter (3.26.1-5) UNRELEASED; urgency=medium
+
+ * Add 0012-Use-a-single-supported-scales.patch:
+ - Allow HiDPI scaling even when non-HiDPI displays are connected
+ (LP: #1724024)
+
+ -- Jeremy Bicha <jbicha at debian.org> Mon, 16 Oct 2017 19:43:51 -0400
+
mutter (3.26.1-4) unstable; urgency=medium
* Release to unstable
Added: desktop/unstable/mutter/debian/patches/0012-Use-a-single-supported-scales.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/mutter/debian/patches/0012-Use-a-single-supported-scales.patch?rev=54483&op=file
==============================================================================
--- desktop/unstable/mutter/debian/patches/0012-Use-a-single-supported-scales.patch (added)
+++ desktop/unstable/mutter/debian/patches/0012-Use-a-single-supported-scales.patch [utf-8] Tue Oct 17 00:17:00 2017
@@ -0,0 +1,187 @@
+From fbaf309ac6dc08fe4e01785fcbf96f7b0fcaf7c2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl at gmail.com>
+Date: Fri, 13 Oct 2017 14:34:19 +0800
+Subject: [PATCH] monitor-manager/xrandr: Use a single supported scales list
+ for all
+
+Under X11 we can only ever have the same scale configured on all
+monitors. In order to use e.g. scale 2 when there is a HiDPI monitor
+connected, we must not disallow it because there is a monitor that does
+not support scale 2. Thus we must show the same scale for every monitor
+and monitor mode, even though it might result in a bad experience.
+
+Do this by iterating through all the monitors adding all supported
+scales by the preferred mode, combining all the supported scales. This
+supported scales list is then used for all monitor and modes no matter
+what.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=788901
+https://launchpad.net/bugs/1724024
+---
+ src/backends/x11/meta-monitor-manager-xrandr.c | 103 +++++++++++++++++++++++--
+ 1 file changed, 95 insertions(+), 8 deletions(-)
+
+diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
+index c369d4960..af1106880 100644
+--- a/src/backends/x11/meta-monitor-manager-xrandr.c
++++ b/src/backends/x11/meta-monitor-manager-xrandr.c
+@@ -71,6 +71,9 @@ struct _MetaMonitorManagerXrandr
+
+ int max_screen_width;
+ int max_screen_height;
++
++ float *supported_scales;
++ int n_supported_scales;
+ };
+
+ struct _MetaMonitorManagerXrandrClass
+@@ -1481,6 +1484,17 @@ meta_monitor_manager_xrandr_ensure_initial_config (MetaMonitorManager *manager)
+ meta_monitor_manager_update_logical_state_derived (manager, config);
+ }
+
++static void
++meta_monitor_manager_xrandr_rebuild_derived (MetaMonitorManager *manager,
++ MetaMonitorsConfig *config)
++{
++ MetaMonitorManagerXrandr *manager_xrandr =
++ META_MONITOR_MANAGER_XRANDR (manager);
++
++ g_clear_pointer (&manager_xrandr->supported_scales, g_free);
++ meta_monitor_manager_rebuild_derived (manager, config);
++}
++
+ static gboolean
+ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *manager,
+ MetaMonitorsConfig *config,
+@@ -1492,7 +1506,7 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
+
+ if (!config)
+ {
+- meta_monitor_manager_rebuild_derived (manager, NULL);
++ meta_monitor_manager_xrandr_rebuild_derived (manager, NULL);
+ return TRUE;
+ }
+
+@@ -1526,7 +1540,7 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana
+ }
+ else
+ {
+- meta_monitor_manager_rebuild_derived (manager, config);
++ meta_monitor_manager_xrandr_rebuild_derived (manager, config);
+ }
+ }
+
+@@ -1782,6 +1796,76 @@ meta_monitor_manager_xrandr_calculate_monitor_mode_scale (MetaMonitorManager *ma
+ return meta_monitor_calculate_mode_scale (monitor, monitor_mode);
+ }
+
++static void
++add_supported_scale (GArray *supported_scales,
++ float scale)
++{
++ unsigned int i;
++
++ for (i = 0; i < supported_scales->len; i++)
++ {
++ float supported_scale = g_array_index (supported_scales, float, i);
++
++ if (scale == supported_scale)
++ return;
++ }
++
++ g_array_append_val (supported_scales, scale);
++}
++
++static int
++compare_scales (gconstpointer a,
++ gconstpointer b)
++{
++ float f = *(float *) a - *(float *) b;
++
++ if (f < 0)
++ return -1;
++ if (f > 0)
++ return 1;
++ return 0;
++}
++
++static void
++ensure_supported_monitor_scales (MetaMonitorManager *manager)
++{
++ MetaMonitorManagerXrandr *manager_xrandr =
++ META_MONITOR_MANAGER_XRANDR (manager);
++ MetaMonitorScalesConstraint constraints;
++ GList *l;
++ GArray *supported_scales;
++
++ if (manager_xrandr->supported_scales)
++ return;
++
++ constraints = META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
++ supported_scales = g_array_new (FALSE, FALSE, sizeof (float));
++
++ for (l = manager->monitors; l; l = l->next)
++ {
++ MetaMonitor *monitor = l->data;
++ MetaMonitorMode *monitor_mode;
++ float *monitor_scales;
++ int n_monitor_scales;
++ int i;
++
++ monitor_mode = meta_monitor_get_preferred_mode (monitor);
++ monitor_scales =
++ meta_monitor_calculate_supported_scales (monitor,
++ monitor_mode,
++ constraints,
++ &n_monitor_scales);
++
++ for (i = 0; i < n_monitor_scales; i++)
++ add_supported_scale (supported_scales, monitor_scales[i]);
++ g_array_sort (supported_scales, compare_scales);
++ }
++
++ manager_xrandr->supported_scales = (float *) supported_scales->data;
++ manager_xrandr->n_supported_scales = supported_scales->len;
++ g_array_free (supported_scales, FALSE);
++}
++
+ static float *
+ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager *manager,
+ MetaLogicalMonitorLayoutMode layout_mode,
+@@ -1789,12 +1873,14 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager
+ MetaMonitorMode *monitor_mode,
+ int *n_supported_scales)
+ {
+- MetaMonitorScalesConstraint constraints;
++ MetaMonitorManagerXrandr *manager_xrandr =
++ META_MONITOR_MANAGER_XRANDR (manager);
+
+- constraints = META_MONITOR_SCALES_CONSTRAINT_NO_FRAC;
+- return meta_monitor_calculate_supported_scales (monitor, monitor_mode,
+- constraints,
+- n_supported_scales);
++ ensure_supported_monitor_scales (manager);
++
++ *n_supported_scales = manager_xrandr->n_supported_scales;
++ return g_memdup (manager_xrandr->supported_scales,
++ manager_xrandr->n_supported_scales * sizeof (float));
+ }
+
+ static MetaMonitorManagerCapability
+@@ -1874,6 +1960,7 @@ meta_monitor_manager_xrandr_finalize (GObject *object)
+ manager_xrandr->resources = NULL;
+
+ g_hash_table_destroy (manager_xrandr->tiled_monitor_atoms);
++ g_free (manager_xrandr->supported_scales);
+
+ G_OBJECT_CLASS (meta_monitor_manager_xrandr_parent_class)->finalize (object);
+ }
+@@ -1949,7 +2036,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
+ config = NULL;
+ }
+
+- meta_monitor_manager_rebuild_derived (manager, config);
++ meta_monitor_manager_xrandr_rebuild_derived (manager, config);
+ }
+
+ return TRUE;
Modified: desktop/unstable/mutter/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/mutter/debian/patches/series?rev=54483&op=diff
==============================================================================
--- desktop/unstable/mutter/debian/patches/series [utf-8] (original)
+++ desktop/unstable/mutter/debian/patches/series [utf-8] Tue Oct 17 00:17:00 2017
@@ -8,3 +8,4 @@
0009-monitor-manager-use-g_return_val_if_fail-if-trying-t.patch
0010-backend-move-the-cursor-render-update-on-screen-chan.patch
0011-workspace-ensure-that-workarea-data-is-valid-when-fe.patch
+0012-Use-a-single-supported-scales.patch
More information about the pkg-gnome-commits
mailing list