From f45dcff81f94f1ba8805fb836adbf3e5cb20087c Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Wed, 20 Mar 2019 15:16:51 +0100 Subject: display: Ensure at least one display is enabled When the user has more than two monitors, then they can disable each monitor separately. If the user creates an invalid configuration because they disabled the last monitor, then enable a different one immediately. --- panels/display/cc-display-panel.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c index 13ff9ce88..c0a3438cb 100644 --- a/panels/display/cc-display-panel.c +++ b/panels/display/cc-display-panel.c @@ -493,8 +493,32 @@ on_output_enabled_active_changed_cb (CcDisplayPanel *panel) if (cc_display_monitor_is_active (panel->current_output) == active) return; - /* Changing the active state requires a UI rebuild. */ cc_display_monitor_set_active (panel->current_output, active); + + /* Prevent the invalid configuration of disabling the last monitor + * by switching on a different one. */ + if (config_get_current_type (panel) == CC_DISPLAY_CONFIG_INVALID_NONE) + { + GList *outputs, *l; + + outputs = cc_display_config_get_ui_sorted_monitors (panel->current_config); + for (l = outputs; l; l = l->next) + { + CcDisplayMonitor *output = CC_DISPLAY_MONITOR (l->data); + + if (output == panel->current_output) + continue; + + if (!cc_display_monitor_is_usable (output)) + continue; + + cc_display_monitor_set_active (output, TRUE); + cc_display_monitor_set_primary (output, TRUE); + break; + } + } + + /* Changing the active state requires a UI rebuild. */ rebuild_ui (panel); } -- cgit v1.2.1