MonitorConfig: remove holes generated by disabling the laptop lid

No, holes in the framebuffer are not a good a thing: windows can
get lost there, and the user can get very confused.
Instead, compact the monitors that where previously after.

https://bugzilla.gnome.org/show_bug.cgi?id=707473
This commit is contained in:
Giovanni Campagna 2013-09-04 16:31:57 +02:00
parent c5bf60eab4
commit 0b89e34439

View File

@ -911,6 +911,8 @@ make_laptop_lid_config (MetaConfiguration *reference)
MetaConfiguration *new; MetaConfiguration *new;
unsigned int i; unsigned int i;
gboolean has_primary; gboolean has_primary;
int x_after, y_after;
int x_offset, y_offset;
g_assert (reference->n_outputs > 1); g_assert (reference->n_outputs > 1);
@ -919,6 +921,8 @@ make_laptop_lid_config (MetaConfiguration *reference)
new->keys = g_new0 (MetaOutputKey, reference->n_outputs); new->keys = g_new0 (MetaOutputKey, reference->n_outputs);
new->outputs = g_new0 (MetaOutputConfig, reference->n_outputs); new->outputs = g_new0 (MetaOutputConfig, reference->n_outputs);
x_after = G_MAXINT; y_after = G_MAXINT;
x_offset = 0; y_offset = 0;
for (i = 0; i < new->n_outputs; i++) for (i = 0; i < new->n_outputs; i++)
{ {
MetaOutputKey *current_key = &reference->keys[i]; MetaOutputKey *current_key = &reference->keys[i];
@ -931,13 +935,22 @@ make_laptop_lid_config (MetaConfiguration *reference)
if (g_str_has_prefix (current_key->connector, "LVDS") || if (g_str_has_prefix (current_key->connector, "LVDS") ||
g_str_has_prefix (current_key->connector, "eDP")) g_str_has_prefix (current_key->connector, "eDP"))
new->outputs[i].enabled = FALSE; {
new->outputs[i].enabled = FALSE;
x_after = current_output->rect.x;
y_after = current_output->rect.y;
x_offset = current_output->rect.width;
y_offset = current_output->rect.height;
}
else else
/* This can potentially leave a "hole" in the screen, {
but this is actually a good thing, as it means windows new->outputs[i] = *current_output;
don't move around.
*/ if (new->outputs[i].rect.x > x_after)
new->outputs[i] = *current_output; new->outputs[i].rect.x -= x_offset;
if (new->outputs[i].rect.y > y_after)
new->outputs[i].rect.y -= y_offset;
}
} }
has_primary = FALSE; has_primary = FALSE;