[mutter] MonitorConfig: remove holes generated by disabling the laptop lid
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] MonitorConfig: remove holes generated by disabling the laptop lid
- Date: Wed, 4 Sep 2013 15:21:17 +0000 (UTC)
commit 0b89e34439dacb23861f380977ef50319676b22e
Author: Giovanni Campagna <gcampagn redhat com>
Date: Wed Sep 4 16:31:57 2013 +0200
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
src/core/monitor-config.c | 25 +++++++++++++++++++------
1 files changed, 19 insertions(+), 6 deletions(-)
---
diff --git a/src/core/monitor-config.c b/src/core/monitor-config.c
index c223a38..41602ab 100644
--- a/src/core/monitor-config.c
+++ b/src/core/monitor-config.c
@@ -911,6 +911,8 @@ make_laptop_lid_config (MetaConfiguration *reference)
MetaConfiguration *new;
unsigned int i;
gboolean has_primary;
+ int x_after, y_after;
+ int x_offset, y_offset;
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->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++)
{
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") ||
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
- /* This can potentially leave a "hole" in the screen,
- but this is actually a good thing, as it means windows
- don't move around.
- */
- new->outputs[i] = *current_output;
+ {
+ new->outputs[i] = *current_output;
+
+ if (new->outputs[i].rect.x > x_after)
+ 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]