monitor-config: Handle invalid previous configurations

The previous configuration might not apply because the number of
enabled outputs when trying to apply it might have changed. This isn't
a bug so we shouldn't assert. Instead, we can handle it by falling
back as we would if we didn't have a previous configuration to start
with.

https://bugzilla.gnome.org/show_bug.cgi?id=764286
This commit is contained in:
Rui Matos 2016-03-29 21:56:28 +02:00
parent 150732a894
commit 8587f0e80d

View File

@ -1554,19 +1554,20 @@ meta_monitor_config_restore_previous (MetaMonitorConfig *self,
/* The user chose to restore the previous configuration. In this /* The user chose to restore the previous configuration. In this
* case, restore the previous configuration. */ * case, restore the previous configuration. */
MetaConfiguration *prev_config = config_ref (self->previous); MetaConfiguration *prev_config = config_ref (self->previous);
apply_configuration (self, prev_config, manager); gboolean ok = apply_configuration (self, prev_config, manager);
config_unref (prev_config); config_unref (prev_config);
/* After this, self->previous contains the rejected configuration. /* After this, self->previous contains the rejected configuration.
* Since it was rejected, nuke it. */ * Since it was rejected, nuke it. */
g_clear_pointer (&self->previous, (GDestroyNotify) config_unref); g_clear_pointer (&self->previous, (GDestroyNotify) config_unref);
if (ok)
return;
} }
else
{
if (!meta_monitor_config_apply_stored (self, manager)) if (!meta_monitor_config_apply_stored (self, manager))
meta_monitor_config_make_default (self, manager); meta_monitor_config_make_default (self, manager);
} }
}
static void static void
turn_off_laptop_display (MetaMonitorConfig *self, turn_off_laptop_display (MetaMonitorConfig *self,
@ -2029,7 +2030,11 @@ meta_monitor_config_assign_crtcs (MetaConfiguration *config,
all_outputs = meta_monitor_manager_get_outputs (manager, all_outputs = meta_monitor_manager_get_outputs (manager,
&n_outputs); &n_outputs);
g_assert (n_outputs == config->n_outputs); if (n_outputs != config->n_outputs)
{
g_hash_table_destroy (assignment.info);
return FALSE;
}
for (i = 0; i < n_outputs; i++) for (i = 0; i < n_outputs; i++)
{ {