@@ -83,6 +83,10 @@ public class Display.MonitorManager : GLib.Object {
8383 critical (e. message);
8484 }
8585
86+ // Clear all monitors and virtual monitors before re-adding them if needed
87+ monitors. clear ();
88+ virtual_monitors. clear ();
89+
8690 // TODO: make use of the "global-scale-required" property to differenciate between X and Wayland
8791 var supports_mirroring_variant = properties. lookup (" supports-mirroring" );
8892 if (supports_mirroring_variant != null ) {
@@ -188,7 +192,6 @@ public class Display.MonitorManager : GLib.Object {
188192 var virtual_monitor = get_virtual_monitor_by_id (monitors_id);
189193 if (virtual_monitor == null ) {
190194 virtual_monitor = new VirtualMonitor ();
191- add_virtual_monitor (virtual_monitor);
192195 }
193196
194197 foreach (var mutter_info in mutter_logical_monitor. monitors) {
@@ -214,6 +217,7 @@ public class Display.MonitorManager : GLib.Object {
214217 virtual_monitor. scale = mutter_logical_monitor. scale;
215218 virtual_monitor. transform = mutter_logical_monitor. transform;
216219 virtual_monitor. primary = mutter_logical_monitor. primary;
220+ add_virtual_monitor (virtual_monitor);
217221 }
218222
219223 // Look for any monitors that aren't part of a virtual monitor (hence disabled)
@@ -229,11 +233,11 @@ public class Display.MonitorManager : GLib.Object {
229233
230234 if (! found) {
231235 var virtual_monitor = new VirtualMonitor ();
232- add_virtual_monitor (virtual_monitor);
233236 virtual_monitor. is_active = false ;
234237 virtual_monitor. primary = false ;
235238 virtual_monitor. monitors. add (monitor);
236239 virtual_monitor. scale = virtual_monitors[0 ]. scale;
240+ add_virtual_monitor (virtual_monitor);
237241 }
238242 }
239243 }
0 commit comments