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.
This commit is contained in:
Benjamin Berg 2019-03-20 15:16:51 +01:00
parent defbcebfab
commit f45dcff81f

View file

@ -493,8 +493,32 @@ on_output_enabled_active_changed_cb (CcDisplayPanel *panel)
if (cc_display_monitor_is_active (panel->current_output) == active) if (cc_display_monitor_is_active (panel->current_output) == active)
return; return;
/* Changing the active state requires a UI rebuild. */
cc_display_monitor_set_active (panel->current_output, active); 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); rebuild_ui (panel);
} }