Marco Trevisan (Treviño) has proposed merging ~3v1n0/ubuntu/+source/mutter:ubuntu/master into ~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master.
Requested reviews: Ubuntu Desktop (ubuntu-desktop) Related bugs: Bug #1822513 in mutter (Ubuntu): "[regression] gnome-shell aspect ratio doesn't rotate with the rest of the screen" https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1822513 For more details, see: https://code.launchpad.net/~3v1n0/ubuntu/+source/mutter/+git/mutter/+merge/365502 -- Your team Ubuntu Desktop is requested to review the proposed merge of ~3v1n0/ubuntu/+source/mutter:ubuntu/master into ~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/master.
diff --git a/debian/changelog b/debian/changelog index d096e50..f5d8eb5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +mutter (3.32.0-1ubuntu2) UNRELEASED; urgency=medium + + * debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch: + - Don't invert the screen size when rotation is enabled (LP: #1822513) + + -- Marco Trevisan (Treviño) <[email protected]> Wed, 03 Apr 2019 19:19:59 -0400 + mutter (3.32.0-1ubuntu1) disco; urgency=medium * debian/control: diff --git a/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch b/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch index 987f4f9..16281ae 100644 --- a/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch +++ b/debian/patches/x11-Add-support-for-fractional-scaling-using-Randr.patch @@ -1,6 +1,13 @@ -From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <[email protected]> -Date: Wed, 27 Mar 2019 06:44:56 +0100 -Subject: X11: Add support for fractional scaling using Randr +From: Ubuntu Developers <[email protected]> +Date: Wed, 3 Apr 2019 19:18:03 -0400 +Subject: x11-Add-support-for-fractional-scaling-using-Randr +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +commit ed760c44b1998fc5fadde18186c51e74525038cc +Author: Marco Trevisan (Treviño) <[email protected]> +Date: Wed Apr 3 18:57:28 2019 -0400 Add scaling support using randr under x11. @@ -13,7 +20,7 @@ Forwarded: No, forwarding is in progress and planned though meson.build | 2 +- src/backends/meta-crtc.h | 1 + src/backends/meta-logical-monitor.c | 36 +-- - src/backends/meta-monitor-config-manager.c | 150 ++++++++- + src/backends/meta-monitor-config-manager.c | 150 +++++++++- src/backends/meta-monitor-config-migration.c | 15 +- src/backends/meta-monitor-config-store.c | 1 + src/backends/meta-monitor-manager-dummy.c | 24 +- @@ -22,13 +29,13 @@ Forwarded: No, forwarding is in progress and planned though src/backends/meta-monitor.c | 60 ++-- src/backends/meta-monitor.h | 6 +- src/backends/meta-settings-private.h | 9 + - src/backends/meta-settings.c | 80 ++++- + src/backends/meta-settings.c | 76 ++++- src/backends/native/meta-monitor-manager-kms.c | 44 ++- src/backends/x11/meta-crtc-xrandr.c | 87 +++++- src/backends/x11/meta-crtc-xrandr.h | 13 +- src/backends/x11/meta-gpu-xrandr.c | 89 +++++- src/backends/x11/meta-gpu-xrandr.h | 4 + - src/backends/x11/meta-monitor-manager-xrandr.c | 407 +++++++++++++++++-------- + src/backends/x11/meta-monitor-manager-xrandr.c | 399 +++++++++++++++++-------- src/backends/x11/meta-monitor-manager-xrandr.h | 4 +- src/backends/x11/meta-output-xrandr.c | 5 +- src/compositor/compositor-private.h | 2 + @@ -41,7 +48,7 @@ Forwarded: No, forwarding is in progress and planned though src/meta/display.h | 8 +- src/org.gnome.Mutter.DisplayConfig.xml | 5 + src/tests/meta-monitor-manager-test.c | 14 +- - 34 files changed, 1366 insertions(+), 303 deletions(-) + 34 files changed, 1354 insertions(+), 303 deletions(-) create mode 100644 data/org.gnome.mutter.x11.gschema.xml.in diff --git a/data/meson.build b/data/meson.build @@ -774,7 +781,7 @@ index 3b951c6..3b375a0 100644 meta_monitor_manager_get_capabilities (MetaMonitorManager *manager); diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c -index c4ed245..7cb3415 100644 +index c4ed245..8b5b983 100644 --- a/src/backends/meta-monitor-manager.c +++ b/src/backends/meta-monitor-manager.c @@ -104,8 +104,18 @@ static gboolean @@ -1196,7 +1203,7 @@ index c4ed245..7cb3415 100644 + { + MetaLogicalMonitorConfig *logical_monitor_config = l->data; + -+ if (logical_monitor_config->scale != scale) ++ if (fabs (logical_monitor_config->scale - scale) > FLT_EPSILON) + return FALSE; + } + @@ -1509,7 +1516,7 @@ index 619de17..8d20b88 100644 #endif /* META_SETTINGS_PRIVATE_H */ diff --git a/src/backends/meta-settings.c b/src/backends/meta-settings.c -index 34d49b3..52c6632 100644 +index 34d49b3..e54317e 100644 --- a/src/backends/meta-settings.c +++ b/src/backends/meta-settings.c @@ -40,6 +40,7 @@ enum @@ -1537,7 +1544,7 @@ index 34d49b3..52c6632 100644 }; G_DEFINE_TYPE (MetaSettings, meta_settings, G_TYPE_OBJECT) -@@ -77,14 +81,37 @@ calculate_ui_scaling_factor (MetaSettings *settings) +@@ -77,14 +81,33 @@ calculate_ui_scaling_factor (MetaSettings *settings) { MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (settings->backend); @@ -1547,28 +1554,24 @@ index 34d49b3..52c6632 100644 - meta_monitor_manager_get_primary_logical_monitor (monitor_manager); - if (!primary_logical_monitor) - return 1; - -- return (int) meta_logical_monitor_get_scale (primary_logical_monitor); -+ if (settings->experimental_features & -+ META_EXPERIMENTAL_FEATURE_X11_RANDR_FRACTIONAL_SCALING) ++ if (!meta_is_wayland_compositor () && ++ (settings->experimental_features & ++ META_EXPERIMENTAL_FEATURE_X11_RANDR_FRACTIONAL_SCALING)) + { -+ if (settings->x11_scale_mode == META_X11_SCALE_MODE_UP) -+ return 1; ++ float scale = 1; + + if (monitor_manager && + settings->x11_scale_mode == META_X11_SCALE_MODE_UI_DOWN) -+ { -+ float max_scale = -+ meta_monitor_manager_get_maximum_crtc_scale (monitor_manager); -+ return ceilf (max_scale); -+ } ++ scale = ++ ceilf (meta_monitor_manager_get_maximum_crtc_scale (monitor_manager)); + -+ return 1; ++ return scale; + } + else if (monitor_manager) + { + MetaLogicalMonitor *primary_logical_monitor; -+ + +- return (int) meta_logical_monitor_get_scale (primary_logical_monitor); + primary_logical_monitor = + meta_monitor_manager_get_primary_logical_monitor (monitor_manager); + if (!primary_logical_monitor) @@ -1581,7 +1584,7 @@ index 34d49b3..52c6632 100644 } static gboolean -@@ -264,6 +291,8 @@ experimental_features_handler (GVariant *features_variant, +@@ -264,6 +287,8 @@ experimental_features_handler (GVariant *features_variant, features |= META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER; else if (g_str_equal (feature, "kms-modifiers")) features |= META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS; @@ -1590,7 +1593,7 @@ index 34d49b3..52c6632 100644 else g_info ("Unknown experimental feature '%s'\n", feature); } -@@ -392,6 +421,25 @@ wayland_settings_changed (GSettings *wayland_settings, +@@ -392,6 +417,25 @@ wayland_settings_changed (GSettings *wayland_settings, } } @@ -1616,7 +1619,7 @@ index 34d49b3..52c6632 100644 void meta_settings_get_xwayland_grab_patterns (MetaSettings *settings, GPtrArray **whitelist_patterns, -@@ -407,6 +455,12 @@ gboolean +@@ -407,6 +451,12 @@ gboolean return (settings->xwayland_allow_grabs); } @@ -1629,7 +1632,7 @@ index 34d49b3..52c6632 100644 MetaSettings * meta_settings_new (MetaBackend *backend) { -@@ -426,6 +480,7 @@ meta_settings_dispose (GObject *object) +@@ -426,6 +476,7 @@ meta_settings_dispose (GObject *object) g_clear_object (&settings->mutter_settings); g_clear_object (&settings->interface_settings); g_clear_object (&settings->wayland_settings); @@ -1637,7 +1640,7 @@ index 34d49b3..52c6632 100644 g_clear_pointer (&settings->xwayland_grab_whitelist_patterns, g_ptr_array_unref); g_clear_pointer (&settings->xwayland_grab_blacklist_patterns, -@@ -449,6 +504,10 @@ meta_settings_init (MetaSettings *settings) +@@ -449,6 +500,10 @@ meta_settings_init (MetaSettings *settings) g_signal_connect (settings->wayland_settings, "changed", G_CALLBACK (wayland_settings_changed), settings); @@ -1648,7 +1651,7 @@ index 34d49b3..52c6632 100644 /* Chain up inter-dependent settings. */ g_signal_connect (settings, "global-scaling-factor-changed", -@@ -460,6 +519,7 @@ meta_settings_init (MetaSettings *settings) +@@ -460,6 +515,7 @@ meta_settings_init (MetaSettings *settings) update_experimental_features (settings); update_xwayland_grab_access_rules (settings); update_xwayland_allow_grabs (settings); @@ -1656,7 +1659,7 @@ index 34d49b3..52c6632 100644 } static void -@@ -514,6 +574,14 @@ meta_settings_class_init (MetaSettingsClass *klass) +@@ -514,6 +570,14 @@ meta_settings_class_init (MetaSettingsClass *klass) NULL, NULL, NULL, G_TYPE_NONE, 0); @@ -2063,7 +2066,7 @@ index aad49d0..4ac32b9 100644 int *max_width, int *max_height); diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c -index 784bbde..9594bf4 100644 +index 784bbde..47d19d6 100644 --- a/src/backends/x11/meta-monitor-manager-xrandr.c +++ b/src/backends/x11/meta-monitor-manager-xrandr.c @@ -63,6 +63,9 @@ @@ -2072,7 +2075,7 @@ index 784bbde..9594bf4 100644 #define DPI_FALLBACK 96.0 +#define RANDR_VERSION_FORMAT(major, minor) ((major * 100) + minor) +#define RANDR_TILING_MIN_VERSION RANDR_VERSION_FORMAT (1, 5) -+#define RANDR_TRANSFOMR_MIN_VERSION RANDR_VERSION_FORMAT (1, 3) ++#define RANDR_TRANSFORM_MIN_VERSION RANDR_VERSION_FORMAT (1, 3) struct _MetaMonitorManagerXrandr { @@ -2374,7 +2377,7 @@ index 784bbde..9594bf4 100644 } } -@@ -568,8 +681,64 @@ meta_monitor_manager_xrandr_rebuild_derived (MetaMonitorManager *manager, +@@ -568,8 +681,56 @@ meta_monitor_manager_xrandr_rebuild_derived (MetaMonitorManager *manager, { MetaMonitorManagerXrandr *manager_xrandr = META_MONITOR_MANAGER_XRANDR (manager); @@ -2408,21 +2411,13 @@ index 784bbde..9594bf4 100644 + scale = crtc->scale > 1.0f ? crtc->scale : 1.0f; + } + -+ if (meta_monitor_transform_is_rotated (crtc->transform)) -+ { -+ screen_width = MAX (screen_width, crtc->rect.x + -+ roundf (crtc->rect.height * scale)); -+ screen_height = MAX (screen_height, crtc->rect.y + -+ roundf (crtc->rect.width * scale)); -+ } -+ else -+ { -+ screen_width = MAX (screen_width, crtc->rect.x + -+ roundf (crtc->rect.width * scale)); -+ screen_height = MAX (screen_height, crtc->rect.y + -+ roundf (crtc->rect.height * scale)); -+ } -+ ++ /* When computing the screen size from the crtc rects we don't have to ++ * use inverted values when monitors are rotated, because this is already ++ * taken in account in the crtc rectangles */ ++ screen_width = MAX (screen_width, crtc->rect.x + ++ roundf (crtc->rect.width * scale)); ++ screen_height = MAX (screen_height, crtc->rect.y + ++ roundf (crtc->rect.height * scale)); + ++n_crtcs; + + /* This value isn't completely exact, since it doesn't take care of the @@ -2440,7 +2435,7 @@ index 784bbde..9594bf4 100644 meta_monitor_manager_rebuild_derived (manager, config); } -@@ -595,6 +764,9 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana +@@ -595,6 +756,9 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana if (method != META_MONITORS_CONFIG_METHOD_VERIFY) { @@ -2450,7 +2445,7 @@ index 784bbde..9594bf4 100644 /* * If the assignment has not changed, we won't get any notification about * any new configuration from the X server; but we still need to update -@@ -615,6 +787,8 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana +@@ -615,6 +779,8 @@ meta_monitor_manager_xrandr_apply_monitors_config (MetaMonitorManager *mana crtc_infos->len, (MetaOutputInfo **) output_infos->pdata, output_infos->len); @@ -2459,7 +2454,7 @@ index 784bbde..9594bf4 100644 } else { -@@ -748,7 +922,8 @@ meta_monitor_manager_xrandr_tiled_monitor_added (MetaMonitorManager *manager, +@@ -748,7 +914,8 @@ meta_monitor_manager_xrandr_tiled_monitor_added (MetaMonitorManager *manager, GList *l; int i; @@ -2469,7 +2464,7 @@ index 784bbde..9594bf4 100644 return; product = meta_monitor_get_product (monitor); -@@ -797,7 +972,8 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager, +@@ -797,7 +964,8 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager, int monitor_count; @@ -2479,7 +2474,7 @@ index 784bbde..9594bf4 100644 return; monitor_xrandr_data = meta_monitor_xrandr_data_from_monitor (monitor); -@@ -815,10 +991,12 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager, +@@ -815,10 +983,12 @@ meta_monitor_manager_xrandr_tiled_monitor_removed (MetaMonitorManager *manager, static void meta_monitor_manager_xrandr_init_monitors (MetaMonitorManagerXrandr *manager_xrandr) { @@ -2493,7 +2488,7 @@ index 784bbde..9594bf4 100644 return; /* delete any tiled monitors setup, as mutter will want to recreate -@@ -849,83 +1027,26 @@ meta_monitor_manager_xrandr_is_transform_handled (MetaMonitorManager *manager, +@@ -849,83 +1019,26 @@ meta_monitor_manager_xrandr_is_transform_handled (MetaMonitorManager *manager, return TRUE; } @@ -2506,25 +2501,25 @@ index 784bbde..9594bf4 100644 { - return meta_monitor_calculate_mode_scale (monitor, monitor_mode); -} -+ MetaMonitorScalesConstraint constraints = 0; - +- -static void -add_supported_scale (GArray *supported_scales, - float scale) -{ - unsigned int i; -+ if (meta_monitor_manager_get_capabilities (manager) & -+ META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED) -+ constraints |= META_MONITOR_SCALES_CONSTRAINT_NO_FRAC; - +- - for (i = 0; i < supported_scales->len; i++) - { - float supported_scale = g_array_index (supported_scales, float, i); -- ++ MetaMonitorScalesConstraint constraints = 0; + - if (scale == supported_scale) - return; - } -- ++ if (meta_monitor_manager_get_capabilities (manager) & ++ META_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED) ++ constraints |= META_MONITOR_SCALES_CONSTRAINT_NO_FRAC; + - g_array_append_val (supported_scales, scale); + return constraints; } @@ -2532,7 +2527,12 @@ index 784bbde..9594bf4 100644 -static int -compare_scales (gconstpointer a, - gconstpointer b) --{ ++static float ++meta_monitor_manager_xrandr_calculate_monitor_mode_scale (MetaMonitorManager *manager, ++ MetaLogicalMonitorLayoutMode layout_mode, ++ MetaMonitor *monitor, ++ MetaMonitorMode *monitor_mode) + { - float f = *(float *) a - *(float *) b; - - if (f < 0) @@ -2544,12 +2544,7 @@ index 784bbde..9594bf4 100644 - -static void -ensure_supported_monitor_scales (MetaMonitorManager *manager) -+static float -+meta_monitor_manager_xrandr_calculate_monitor_mode_scale (MetaMonitorManager *manager, -+ MetaLogicalMonitorLayoutMode layout_mode, -+ MetaMonitor *monitor, -+ MetaMonitorMode *monitor_mode) - { +-{ - MetaMonitorManagerXrandr *manager_xrandr = - META_MONITOR_MANAGER_XRANDR (manager); - MetaMonitorScalesConstraint constraints; @@ -2591,7 +2586,7 @@ index 784bbde..9594bf4 100644 } static float * -@@ -935,21 +1056,35 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager +@@ -935,21 +1048,35 @@ meta_monitor_manager_xrandr_calculate_supported_scales (MetaMonitorManager MetaMonitorMode *monitor_mode, int *n_supported_scales) { @@ -2625,7 +2620,7 @@ index 784bbde..9594bf4 100644 + + if (meta_settings_is_experimental_feature_enabled (settings, + META_EXPERIMENTAL_FEATURE_X11_RANDR_FRACTIONAL_SCALING) && -+ xrandr_manager->randr_version >= RANDR_TRANSFOMR_MIN_VERSION) ++ xrandr_manager->randr_version >= RANDR_TRANSFORM_MIN_VERSION) + { + capabilities |= META_MONITOR_MANAGER_CAPABILITY_NATIVE_OUTPUT_SCALING | + META_MONITOR_MANAGER_CAPABILITY_LAYOUT_MODE; @@ -2637,7 +2632,7 @@ index 784bbde..9594bf4 100644 } static gboolean -@@ -966,9 +1101,30 @@ meta_monitor_manager_xrandr_get_max_screen_size (MetaMonitorManager *manager, +@@ -966,9 +1093,30 @@ meta_monitor_manager_xrandr_get_max_screen_size (MetaMonitorManager *manager, return TRUE; } @@ -2668,7 +2663,7 @@ index 784bbde..9594bf4 100644 return META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL; } -@@ -978,10 +1134,15 @@ meta_monitor_manager_xrandr_constructed (GObject *object) +@@ -978,10 +1126,15 @@ meta_monitor_manager_xrandr_constructed (GObject *object) MetaMonitorManagerXrandr *manager_xrandr = META_MONITOR_MANAGER_XRANDR (object); MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_xrandr); @@ -2687,7 +2682,7 @@ index 784bbde..9594bf4 100644 manager_xrandr->gpu = META_GPU (meta_gpu_xrandr_new (manager_xrandr)); meta_monitor_manager_add_gpu (manager, manager_xrandr->gpu); -@@ -1003,16 +1164,13 @@ meta_monitor_manager_xrandr_constructed (GObject *object) +@@ -1003,16 +1156,13 @@ meta_monitor_manager_xrandr_constructed (GObject *object) | RRCrtcChangeNotifyMask | RROutputPropertyNotifyMask); @@ -2709,7 +2704,7 @@ index 784bbde..9594bf4 100644 meta_monitor_manager_xrandr_init_monitors (manager_xrandr); } -@@ -1026,7 +1184,6 @@ meta_monitor_manager_xrandr_finalize (GObject *object) +@@ -1026,7 +1176,6 @@ meta_monitor_manager_xrandr_finalize (GObject *object) g_clear_object (&manager_xrandr->gpu); g_hash_table_destroy (manager_xrandr->tiled_monitor_atoms); @@ -2949,7 +2944,7 @@ index 24c596b..bb88083 100644 + #endif /* META_BOXES_PRIVATE_H */ diff --git a/src/core/boxes.c b/src/core/boxes.c -index 87f2d5d..7c30153 100644 +index 87f2d5d..b7d6abc 100644 --- a/src/core/boxes.c +++ b/src/core/boxes.c @@ -911,6 +911,27 @@ meta_rectangle_overlaps_with_region (const GList *spanning_rects, @@ -2966,7 +2961,7 @@ index 87f2d5d..7c30153 100644 + { + MetaRectangle *other = (MetaRectangle *) l->data; + -+ if (other == rect) ++ if (rect == other || meta_rectangle_equal (rect, other)) + continue; + + if (meta_rectangle_is_adjecent_to ((MetaRectangle *) rect, other))
-- ubuntu-desktop mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop
