[gnome-control-center] display: Handle lid being closed a bit better
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] display: Handle lid being closed a bit better
- Date: Wed, 23 Aug 2017 16:37:35 +0000 (UTC)
commit 0a0ac31b5187dcd65eb73ca80b541eeff0467afc
Author: Rui Matos <tiagomatos gmail com>
Date: Wed Aug 23 17:06:57 2017 +0200
display: Handle lid being closed a bit better
If the lid is closed we shouldn't allow the builtin display to be
configured.
panels/display/cc-display-panel.c | 73 ++++++++++++++++++++++---------------
1 files changed, 44 insertions(+), 29 deletions(-)
---
diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c
index ab0900a..0aaeb65 100644
--- a/panels/display/cc-display-panel.c
+++ b/panels/display/cc-display-panel.c
@@ -437,6 +437,7 @@ paint_output (CcDisplayPanel *panel,
gint allocated_width,
gint allocated_height)
{
+ CcDisplayPanelPrivate *priv = panel->priv;
GdkPixbuf *pixbuf;
gint x, y, width, height;
@@ -462,14 +463,13 @@ paint_output (CcDisplayPanel *panel,
cairo_rectangle (cr, x, y, width, height);
cairo_fill (cr);
- if (cc_display_monitor_is_active (output))
- {
- pixbuf = gnome_bg_create_thumbnail (panel->priv->background,
- panel->priv->thumbnail_factory,
- gdk_screen_get_default (), width, height);
- }
- else
+ if (!cc_display_monitor_is_active (output) ||
+ (cc_display_monitor_is_builtin (output) && priv->lid_is_closed))
pixbuf = NULL;
+ else
+ pixbuf = gnome_bg_create_thumbnail (priv->background,
+ priv->thumbnail_factory,
+ gdk_screen_get_default (), width, height);
if (cc_display_monitor_is_primary (output)
|| cc_display_config_is_cloning (configuration))
@@ -1536,14 +1536,20 @@ replace_current_output_ui (GtkWidget *frame,
}
static guint
-count_active_outputs (GList *outputs)
+count_active_outputs (CcDisplayPanel *panel)
{
- GList *l;
+ CcDisplayPanelPrivate *priv = panel->priv;
+ GList *outputs, *l;
guint active = 0;
+
+ outputs = cc_display_config_get_monitors (priv->current_config);
for (l = outputs; l != NULL; l = l->next)
{
CcDisplayMonitor *output = l->data;
- if (cc_display_monitor_is_active (output))
+ if (!cc_display_monitor_is_active (output) ||
+ (cc_display_monitor_is_builtin (output) && priv->lid_is_closed))
+ continue;
+ else
active++;
}
return active;
@@ -2021,7 +2027,7 @@ make_two_output_ui (CcDisplayPanel *panel)
if (cc_display_config_is_cloning (priv->current_config) && show_mirror)
gtk_stack_set_visible_child_name (GTK_STACK (stack), "mirror");
- else if (count_active_outputs (cc_display_config_get_monitors (priv->current_config)) > 1)
+ else if (count_active_outputs (panel) > 1)
gtk_stack_set_visible_child_name (GTK_STACK (stack), "join");
else
gtk_stack_set_visible_child_name (GTK_STACK (stack), "single");
@@ -2058,8 +2064,8 @@ make_output_switch (CcDisplayPanel *panel)
button, G_CONNECT_SWAPPED);
output_switch_sync (button, priv->current_output);
- if (count_active_outputs (cc_display_config_get_monitors (priv->current_config)) < 2 &&
- cc_display_monitor_is_active (priv->current_output))
+ if ((count_active_outputs (panel) < 2 && cc_display_monitor_is_active (priv->current_output)) ||
+ (cc_display_monitor_is_builtin (priv->current_output) && priv->lid_is_closed))
gtk_widget_set_sensitive (button, FALSE);
return button;
@@ -2181,6 +2187,7 @@ on_screen_changed (CcDisplayPanel *panel)
CcDisplayConfig *current;
GList *outputs, *l;
GtkWidget *main_widget;
+ guint n_outputs;
if (!priv->manager)
return;
@@ -2206,30 +2213,38 @@ on_screen_changed (CcDisplayPanel *panel)
ensure_monitor_labels (panel);
priv->current_output = NULL;
- l = outputs = g_object_get_data (G_OBJECT (current), "ui-sorted-outputs");
- while (!priv->current_output && l != NULL)
+ outputs = g_object_get_data (G_OBJECT (current), "ui-sorted-outputs");
+ for (l = outputs; l; l = l->next)
{
CcDisplayMonitor *output = l->data;
- if (cc_display_monitor_is_active (output))
- priv->current_output = output;
- else
- l = l->next;
+
+ if (!cc_display_monitor_is_active (output) ||
+ (cc_display_monitor_is_builtin (output) && priv->lid_is_closed))
+ continue;
+
+ priv->current_output = output;
+ break;
}
if (!priv->current_output)
goto show_error;
- switch (g_list_length (outputs))
+ n_outputs = g_list_length (outputs);
+ if (priv->lid_is_closed)
{
- case 1:
- main_widget = make_single_output_ui (panel);
- break;
- case 2:
- main_widget = make_two_output_ui (panel);
- break;
- default:
- main_widget = make_multi_output_ui (panel);
- break;
+ if (n_outputs <= 2)
+ main_widget = make_single_output_ui (panel);
+ else
+ main_widget = make_multi_output_ui (panel);
+ }
+ else
+ {
+ if (n_outputs == 1)
+ main_widget = make_single_output_ui (panel);
+ else if (n_outputs == 2)
+ main_widget = make_two_output_ui (panel);
+ else
+ main_widget = make_multi_output_ui (panel);
}
gtk_widget_show_all (main_widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]