monitor-manager: check framebuffer limits for all configs

Refactor make_default_config() to always sanity-check the configuration to
ensure that it fits within the framebuffer. Previously, this was only done
for the default linear configuration.
This commit is contained in:
Jonathon Jongsma 2014-11-19 10:56:27 -06:00
parent f6f5f624d4
commit d7854794cf

View File

@ -1179,10 +1179,6 @@ make_linear_config (MetaMonitorConfig *self,
config->outputs[i].rect.x = x;
x += config->outputs[i].rect.width;
}
/* Disable outputs that would go beyond framebuffer limits */
if (config->outputs[i].rect.x + config->outputs[i].rect.width > max_width)
config->outputs[i].enabled = FALSE;
}
}
@ -1263,6 +1259,7 @@ make_default_config (MetaMonitorConfig *self,
gboolean use_stored_config)
{
MetaConfiguration *ret = NULL;
unsigned i;
ret = config_new ();
make_config_key (ret, outputs, n_outputs, -1);
@ -1272,21 +1269,29 @@ make_default_config (MetaMonitorConfig *self,
nothing else to do */
if (n_outputs == 1)
{
init_config_from_preferred_mode (&ret->outputs[0], &outputs[0]);
ret->outputs[0].is_primary = TRUE;
return ret;
goto check_limits;
}
if (make_suggested_config (self, outputs, n_outputs, max_width, max_height, ret))
return ret;
goto check_limits;
if (use_stored_config &&
extend_stored_config (self, outputs, n_outputs, max_width, max_height, ret))
return ret;
goto check_limits;
make_linear_config (self, outputs, n_outputs, max_width, max_height, ret);
check_limits:
/* Disable outputs that would go beyond framebuffer limits */
for (i = 0; i < n_outputs; i++)
{
if ((ret->outputs[i].rect.x + ret->outputs[i].rect.width > max_width)
|| (ret->outputs[i].rect.y + ret->outputs[i].rect.height > max_height))
ret->outputs[i].enabled = FALSE;
}
return ret;
}