Skip to content

Commit ffd0a01

Browse files
Fix crash and display arrangement when pluging new monitor
1 parent aec7f0f commit ffd0a01

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

src/Objects/MonitorManager.vala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/Views/DisplaysView.vala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public class Display.DisplaysView : Gtk.Box {
1010
public DisplaysOverlay displays_overlay;
1111

12-
private Gtk.ComboBoxText dpi_combo;
12+
private Gtk.DropDown dpi_combo;
1313
private Gtk.Box rotation_lock_box;
1414

1515
private const string TOUCHSCREEN_SETTINGS_PATH = "org.gnome.settings-daemon.peripherals.touchscreen";
@@ -34,10 +34,16 @@ public class Display.DisplaysView : Gtk.Box {
3434

3535
var dpi_label = new Gtk.Label (_("Scaling factor:"));
3636

37-
dpi_combo = new Gtk.ComboBoxText ();
38-
dpi_combo.append_text (_("LoDPI") + " (1×)");
39-
dpi_combo.append_text (_("HiDPI") + " (2×)");
40-
dpi_combo.append_text (_("HiDPI") + " (3×)");
37+
var dpi_dropdown_options = new string[3] {
38+
_("LoDPI") + " (1×)",
39+
_("HiDPI") + " (2×)",
40+
_("HiDPI") + " (3×)"
41+
};
42+
43+
dpi_combo = new Gtk.DropDown (new Gtk.StringList (dpi_dropdown_options), null);
44+
//dpi_combo.append_text (_("LoDPI") + " (1×)");
45+
//dpi_combo.append_text (_("HiDPI") + " (2×)");
46+
//dpi_combo.append_text (_("HiDPI") + " (3×)");
4147

4248
var dpi_box = new Gtk.Box (HORIZONTAL, 6) {
4349
margin_top = 6,
@@ -130,11 +136,11 @@ public class Display.DisplaysView : Gtk.Box {
130136
apply_button.sensitive = false;
131137
});
132138

133-
dpi_combo.active = (int)monitor_manager.virtual_monitors[0].scale - 1;
139+
dpi_combo.selected = (int)monitor_manager.virtual_monitors[0].scale - 1;
134140

135-
dpi_combo.changed.connect (() => {
141+
dpi_combo.activate.connect (() => {
136142
try {
137-
monitor_manager.set_scale_on_all_monitors ((double)(dpi_combo.active + 1));
143+
monitor_manager.set_scale_on_all_monitors ((double)(dpi_combo.selected + 1));
138144
} catch (Error e) {
139145
show_error_dialog (e.message);
140146
}

0 commit comments

Comments
 (0)