Marco Trevisan (Treviño) has proposed merging 
~3v1n0/ubuntu/+source/mutter:ubuntu/bionic into 
~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/bionic.

Requested reviews:
  Ubuntu Desktop (ubuntu-desktop)
Related bugs:
  Bug #1772811 in gnome-shell (Ubuntu): "[SRU] different behaviors for switch 
display mode between xenial and bionic"
  https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1772811

For more details, see:
https://code.launchpad.net/~3v1n0/ubuntu/+source/mutter/+git/mutter/+merge/366676
-- 
Your team Ubuntu Desktop is requested to review the proposed merge of 
~3v1n0/ubuntu/+source/mutter:ubuntu/bionic into 
~ubuntu-desktop/ubuntu/+source/mutter:ubuntu/bionic.
diff --git a/debian/changelog b/debian/changelog
index 99219d6..76d6803 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+mutter (3.28.3+git20190124-0ubuntu18.04.3) bionic; urgency=medium
+
+  * d/p/monitor-manager-Don-t-use-switch-config-when-ensuring-con.patch,
+    d/p/monitor-manager-use-MonitorsConfig-to-track-switch_config.patch:
+    - Ensure switch display mode is cyclic (LP: #1772811)
+
+ -- Marco Trevisan (Treviño) <ma...@ubuntu.com>  Mon, 29 Apr 2019 23:29:24 -0500
+
 mutter (3.28.3+git20190124-0ubuntu18.04.2) bionic; urgency=medium
 
   * control: Add Breaks on budgie-desktop verions broken by this upload.
diff --git a/debian/patches/monitor-manager-Don-t-use-switch-config-when-ensuring-con.patch b/debian/patches/monitor-manager-Don-t-use-switch-config-when-ensuring-con.patch
new file mode 100644
index 0000000..b8d12d5
--- /dev/null
+++ b/debian/patches/monitor-manager-Don-t-use-switch-config-when-ensuring-con.patch
@@ -0,0 +1,37 @@
+From: =?utf-8?q?Jonas_=C3=85dahl?= <jad...@gmail.com>
+Date: Thu, 11 Oct 2018 15:16:26 +0200
+Subject: monitor-manager: Don't use switch-config when ensuring configuration
+
+Switch-configs are only to be used in certain circumstances (see
+meta_monitor_manager_can_switch_config()) so when ensuring
+configuration and attempting to create a linear configuration, use the
+linear configuration constructor function directly without going via the
+switch config method, otherwise we might incorrectly fall back to the
+fallback configuration (only enable primary monitor).
+
+This is a regression introduced by 6267732bec97773.
+
+Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/342
+
+Ubuntu-Bug: https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1772811
+Origin: https://gitlab.gnome.org/GNOME/mutter/merge_requests/262
+Applied-Upstream: yes, 3.32.0
+---
+ src/backends/meta-monitor-manager.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
+index 96d794a..fecbfda 100644
+--- a/src/backends/meta-monitor-manager.c
++++ b/src/backends/meta-monitor-manager.c
+@@ -582,9 +582,7 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
+       g_clear_object (&config);
+     }
+ 
+-  config =
+-    meta_monitor_config_manager_create_for_switch_config (manager->config_manager,
+-                                                          META_MONITOR_SWITCH_CONFIG_ALL_LINEAR);
++  config = meta_monitor_config_manager_create_linear (manager->config_manager);
+   if (config)
+     {
+       if (!meta_monitor_manager_apply_monitors_config (manager,
diff --git a/debian/patches/monitor-manager-use-MonitorsConfig-to-track-switch_config.patch b/debian/patches/monitor-manager-use-MonitorsConfig-to-track-switch_config.patch
new file mode 100644
index 0000000..780ba05
--- /dev/null
+++ b/debian/patches/monitor-manager-use-MonitorsConfig-to-track-switch_config.patch
@@ -0,0 +1,198 @@
+From: Daniel Drake <dr...@endlessm.com>
+Date: Thu, 30 Aug 2018 08:34:53 +0800
+Subject: monitor-manager: use MonitorsConfig to track switch_config
+
+When constructing MetaMonitorsConfig objects, store which type
+of switch_config they are for (or UNKNOWN if it is not such
+type of config).
+
+Stop unconditionally setting current_switch_config to UNKNOWN when
+handling monitors changed events. Instead, set it to the switch_config
+type stored in the MonitorsConfig in the codepath that updates logical
+state. In addition to being called in the hotplug case along the same
+code flow that generates monitors changed events, this is also called
+in the coldplug case where a secondary monitor was connected before
+mutter was started.
+
+When creating the default linear display config, create it as a
+switch_config so that internal state gets updated to represent
+linear mode when this config is used.
+
+The previous behaviour of unconditionally resetting current_switch_config
+to UNKNOWN was breaking the internal state machine for display config
+switching, causing misbehaviour in gnome-shell's switchMonitor UI when
+using display switch hotkeys. The lack of internal tracking when the
+displays are already in the default "Join Displays" linear mode was
+then causing the first display switch hotkey press to do nothing
+(it would attempt to select "Join Displays" mode, but that was already
+active).
+
+Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/281
+https://gitlab.gnome.org/GNOME/mutter/merge_requests/213
+
+Ubuntu-Bug: https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1772811
+Origin: https://gitlab.gnome.org/GNOME/mutter/merge_requests/213
+Applied-Upstream: yes, 3.30.1
+---
+ src/backends/meta-monitor-config-manager.c | 36 +++++++++++++++++++++++++-----
+ src/backends/meta-monitor-config-manager.h |  7 ++++++
+ src/backends/meta-monitor-manager.c        | 25 ++++++++++++++++-----
+ 3 files changed, 56 insertions(+), 12 deletions(-)
+
+diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
+index 197892b..28818ed 100644
+--- a/src/backends/meta-monitor-config-manager.c
++++ b/src/backends/meta-monitor-config-manager.c
+@@ -1007,6 +1007,7 @@ meta_monitor_config_manager_create_for_switch_config (MetaMonitorConfigManager
+                                                       MetaMonitorSwitchConfigType  config_type)
+ {
+   MetaMonitorManager *monitor_manager = config_manager->monitor_manager;
++  MetaMonitorsConfig *config;
+ 
+   if (!meta_monitor_manager_can_switch_config (monitor_manager))
+     return NULL;
+@@ -1014,18 +1015,27 @@ meta_monitor_config_manager_create_for_switch_config (MetaMonitorConfigManager
+   switch (config_type)
+     {
+     case META_MONITOR_SWITCH_CONFIG_ALL_MIRROR:
+-      return create_for_switch_config_all_mirror (config_manager);
++      config = create_for_switch_config_all_mirror (config_manager);
++      break;
+     case META_MONITOR_SWITCH_CONFIG_ALL_LINEAR:
+-      return meta_monitor_config_manager_create_linear (config_manager);
++      config = meta_monitor_config_manager_create_linear (config_manager);
++      break;
+     case META_MONITOR_SWITCH_CONFIG_EXTERNAL:
+-      return create_for_switch_config_external (config_manager);
++      config = create_for_switch_config_external (config_manager);
++      break;
+     case META_MONITOR_SWITCH_CONFIG_BUILTIN:
+-      return create_for_switch_config_builtin (config_manager);
++      config = create_for_switch_config_builtin (config_manager);
++      break;
+     case META_MONITOR_SWITCH_CONFIG_UNKNOWN:
++    default:
+       g_warn_if_reached ();
+-      break;
++      return NULL;
+     }
+-  return NULL;
++
++  if (config)
++    meta_monitors_config_set_switch_config (config, config_type);
++
++  return config;
+ }
+ 
+ void
+@@ -1217,6 +1227,19 @@ meta_monitors_config_key_equal (gconstpointer data_a,
+   return TRUE;
+ }
+ 
++MetaMonitorSwitchConfigType
++meta_monitors_config_get_switch_config (MetaMonitorsConfig *config)
++{
++  return config->switch_config;
++}
++
++void
++meta_monitors_config_set_switch_config (MetaMonitorsConfig          *config,
++                                        MetaMonitorSwitchConfigType  switch_config)
++{
++  config->switch_config = switch_config;
++}
++
+ MetaMonitorsConfig *
+ meta_monitors_config_new_full (GList                        *logical_monitor_configs,
+                                GList                        *disabled_monitor_specs,
+@@ -1232,6 +1255,7 @@ meta_monitors_config_new_full (GList                        *logical_monitor_con
+                                               disabled_monitor_specs);
+   config->layout_mode = layout_mode;
+   config->flags = flags;
++  config->switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
+ 
+   return config;
+ }
+diff --git a/src/backends/meta-monitor-config-manager.h b/src/backends/meta-monitor-config-manager.h
+index 269d8e1..9007074 100644
+--- a/src/backends/meta-monitor-config-manager.h
++++ b/src/backends/meta-monitor-config-manager.h
+@@ -69,6 +69,8 @@ struct _MetaMonitorsConfig
+   MetaMonitorsConfigFlag flags;
+ 
+   MetaLogicalMonitorLayoutMode layout_mode;
++
++  MetaMonitorSwitchConfigType switch_config;
+ };
+ 
+ #define META_TYPE_MONITORS_CONFIG (meta_monitors_config_get_type ())
+@@ -124,6 +126,11 @@ MetaMonitorsConfig * meta_monitors_config_new (MetaMonitorManager           *mon
+                                                MetaLogicalMonitorLayoutMode  layout_mode,
+                                                MetaMonitorsConfigFlag        flags);
+ 
++MetaMonitorSwitchConfigType meta_monitors_config_get_switch_config (MetaMonitorsConfig *config);
++
++void meta_monitors_config_set_switch_config (MetaMonitorsConfig          *config,
++                                             MetaMonitorSwitchConfigType  switch_config);
++
+ unsigned int meta_monitors_config_key_hash (gconstpointer config_key);
+ 
+ gboolean meta_monitors_config_key_equal (gconstpointer config_key_a,
+diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
+index ec18600..96d794a 100644
+--- a/src/backends/meta-monitor-manager.c
++++ b/src/backends/meta-monitor-manager.c
+@@ -582,7 +582,9 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
+       g_clear_object (&config);
+     }
+ 
+-  config = meta_monitor_config_manager_create_linear (manager->config_manager);
++  config =
++    meta_monitor_config_manager_create_for_switch_config (manager->config_manager,
++                                                          META_MONITOR_SWITCH_CONFIG_ALL_LINEAR);
+   if (config)
+     {
+       if (!meta_monitor_manager_apply_monitors_config (manager,
+@@ -2652,8 +2654,6 @@ meta_monitor_manager_read_current_state (MetaMonitorManager *manager)
+ static void
+ meta_monitor_manager_notify_monitors_changed (MetaMonitorManager *manager)
+ {
+-  manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
+-
+   meta_backend_monitors_changed (manager->backend);
+ 
+   g_signal_emit (manager, signals[MONITORS_CHANGED_INTERNAL], 0);
+@@ -2710,10 +2710,17 @@ meta_monitor_manager_update_logical_state (MetaMonitorManager *manager,
+                                            MetaMonitorsConfig *config)
+ {
+   if (config)
+-    manager->layout_mode = config->layout_mode;
++    {
++      manager->layout_mode = config->layout_mode;
++      manager->current_switch_config =
++        meta_monitors_config_get_switch_config (config);
++    }
+   else
+-    manager->layout_mode =
+-      meta_monitor_manager_get_default_layout_mode (manager);
++    {
++      manager->layout_mode =
++        meta_monitor_manager_get_default_layout_mode (manager);
++      manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
++    }
+ 
+   meta_monitor_manager_rebuild_logical_monitors (manager, config);
+ }
+@@ -2755,6 +2762,12 @@ void
+ meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
+                                                    MetaMonitorsConfig *config)
+ {
++  if (config)
++    manager->current_switch_config =
++      meta_monitors_config_get_switch_config (config);
++  else
++    manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
++
+   manager->layout_mode = META_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
+ 
+   meta_monitor_manager_rebuild_logical_monitors_derived (manager, config);
diff --git a/debian/patches/series b/debian/patches/series
index 198db5a..b1a9e6c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,6 +3,8 @@ theme-load-icons-as-Gtk-does-with-fallback-and-RTL-suppor.patch
 clutter-Smooth-out-master-clock-to-smooth-visuals.patch
 clutter-Fix-offscreen-effect-painting-of-clones.patch
 bgo768531_workaround-startup-notifications.patch
+monitor-manager-use-MonitorsConfig-to-track-switch_config.patch
+monitor-manager-Don-t-use-switch-config-when-ensuring-con.patch
 debian/synaptics-support.patch
 debian/skip-failing-tests.patch
 debian/skip-failing-tests-325.patch
-- 
ubuntu-desktop mailing list
ubuntu-desktop@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop

Reply via email to