Skip to content

Commit 8aa4705

Browse files
Fix crash on enabling mirror display (#415)
* Fix Scale set by adding modes before set calling * Set monitor before scale * Fix overlay update when enabling mirrored display * Revert some changes * Fix indentation Co-authored-by: Ryo Nakano <[email protected]> --------- Co-authored-by: Ryo Nakano <[email protected]>
1 parent 0fd89e6 commit 8aa4705

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

src/Objects/MonitorManager.vala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,8 @@ public class Display.MonitorManager : GLib.Object {
297297
public void enable_clone_mode () {
298298
var clone_virtual_monitor = new Display.VirtualMonitor ();
299299
clone_virtual_monitor.primary = true;
300-
clone_virtual_monitor.scale = Utils.get_min_compatible_scale (monitors);
301300
clone_virtual_monitor.monitors.add_all (monitors);
301+
clone_virtual_monitor.scale = Utils.get_min_compatible_scale (monitors);
302302
var modes = clone_virtual_monitor.get_available_modes ();
303303
/*
304304
* Two choices here:
@@ -364,6 +364,9 @@ public class Display.MonitorManager : GLib.Object {
364364
var single_virtual_monitor = new Display.VirtualMonitor ();
365365
var preferred_mode = monitor.preferred_mode;
366366
var current_mode = monitor.current_mode;
367+
368+
single_virtual_monitor.monitors.add (monitor);
369+
367370
if (global_scale_required) {
368371
single_virtual_monitor.scale = max_scale;
369372
if (max_scale in preferred_mode.supported_scales) {
@@ -388,7 +391,6 @@ public class Display.MonitorManager : GLib.Object {
388391
single_virtual_monitor.scale = preferred_mode.preferred_scale;
389392
}
390393

391-
single_virtual_monitor.monitors.add (monitor);
392394
new_virtual_monitors.add (single_virtual_monitor);
393395
}
394396

src/Widgets/DisplaysOverlay.vala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,12 @@ public class Display.DisplaysOverlay : Gtk.Box {
186186

187187
public void rescan_displays () {
188188
scanning = true;
189-
foreach (unowned var widget in display_widgets) {
190-
display_widgets.remove (widget);
191-
widget.destroy ();
192-
}
189+
190+
display_widgets.@foreach ((display_widget) => {
191+
overlay.remove_overlay (display_widget);
192+
display_widget.destroy ();
193+
display_widgets.remove (display_widget);
194+
});
193195

194196
active_displays = 0;
195197
foreach (var virtual_monitor in monitor_manager.virtual_monitors) {

0 commit comments

Comments
 (0)