display: Handle lid being closed a bit better
If the lid is closed we shouldn't allow the builtin display to be configured.
This commit is contained in:
parent
088f35617c
commit
0a0ac31b51
1 changed files with 44 additions and 29 deletions
|
@ -437,6 +437,7 @@ paint_output (CcDisplayPanel *panel,
|
||||||
gint allocated_width,
|
gint allocated_width,
|
||||||
gint allocated_height)
|
gint allocated_height)
|
||||||
{
|
{
|
||||||
|
CcDisplayPanelPrivate *priv = panel->priv;
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
gint x, y, width, height;
|
gint x, y, width, height;
|
||||||
|
|
||||||
|
@ -462,14 +463,13 @@ paint_output (CcDisplayPanel *panel,
|
||||||
cairo_rectangle (cr, x, y, width, height);
|
cairo_rectangle (cr, x, y, width, height);
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
|
|
||||||
if (cc_display_monitor_is_active (output))
|
if (!cc_display_monitor_is_active (output) ||
|
||||||
{
|
(cc_display_monitor_is_builtin (output) && priv->lid_is_closed))
|
||||||
pixbuf = gnome_bg_create_thumbnail (panel->priv->background,
|
|
||||||
panel->priv->thumbnail_factory,
|
|
||||||
gdk_screen_get_default (), width, height);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pixbuf = NULL;
|
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)
|
if (cc_display_monitor_is_primary (output)
|
||||||
|| cc_display_config_is_cloning (configuration))
|
|| cc_display_config_is_cloning (configuration))
|
||||||
|
@ -1536,14 +1536,20 @@ replace_current_output_ui (GtkWidget *frame,
|
||||||
}
|
}
|
||||||
|
|
||||||
static guint
|
static guint
|
||||||
count_active_outputs (GList *outputs)
|
count_active_outputs (CcDisplayPanel *panel)
|
||||||
{
|
{
|
||||||
GList *l;
|
CcDisplayPanelPrivate *priv = panel->priv;
|
||||||
|
GList *outputs, *l;
|
||||||
guint active = 0;
|
guint active = 0;
|
||||||
|
|
||||||
|
outputs = cc_display_config_get_monitors (priv->current_config);
|
||||||
for (l = outputs; l != NULL; l = l->next)
|
for (l = outputs; l != NULL; l = l->next)
|
||||||
{
|
{
|
||||||
CcDisplayMonitor *output = l->data;
|
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++;
|
active++;
|
||||||
}
|
}
|
||||||
return active;
|
return active;
|
||||||
|
@ -2021,7 +2027,7 @@ make_two_output_ui (CcDisplayPanel *panel)
|
||||||
|
|
||||||
if (cc_display_config_is_cloning (priv->current_config) && show_mirror)
|
if (cc_display_config_is_cloning (priv->current_config) && show_mirror)
|
||||||
gtk_stack_set_visible_child_name (GTK_STACK (stack), "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");
|
gtk_stack_set_visible_child_name (GTK_STACK (stack), "join");
|
||||||
else
|
else
|
||||||
gtk_stack_set_visible_child_name (GTK_STACK (stack), "single");
|
gtk_stack_set_visible_child_name (GTK_STACK (stack), "single");
|
||||||
|
@ -2058,8 +2064,8 @@ make_output_switch (CcDisplayPanel *panel)
|
||||||
button, G_CONNECT_SWAPPED);
|
button, G_CONNECT_SWAPPED);
|
||||||
output_switch_sync (button, priv->current_output);
|
output_switch_sync (button, priv->current_output);
|
||||||
|
|
||||||
if (count_active_outputs (cc_display_config_get_monitors (priv->current_config)) < 2 &&
|
if ((count_active_outputs (panel) < 2 && cc_display_monitor_is_active (priv->current_output)) ||
|
||||||
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);
|
gtk_widget_set_sensitive (button, FALSE);
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
|
@ -2181,6 +2187,7 @@ on_screen_changed (CcDisplayPanel *panel)
|
||||||
CcDisplayConfig *current;
|
CcDisplayConfig *current;
|
||||||
GList *outputs, *l;
|
GList *outputs, *l;
|
||||||
GtkWidget *main_widget;
|
GtkWidget *main_widget;
|
||||||
|
guint n_outputs;
|
||||||
|
|
||||||
if (!priv->manager)
|
if (!priv->manager)
|
||||||
return;
|
return;
|
||||||
|
@ -2206,30 +2213,38 @@ on_screen_changed (CcDisplayPanel *panel)
|
||||||
ensure_monitor_labels (panel);
|
ensure_monitor_labels (panel);
|
||||||
|
|
||||||
priv->current_output = NULL;
|
priv->current_output = NULL;
|
||||||
l = outputs = g_object_get_data (G_OBJECT (current), "ui-sorted-outputs");
|
outputs = g_object_get_data (G_OBJECT (current), "ui-sorted-outputs");
|
||||||
while (!priv->current_output && l != NULL)
|
for (l = outputs; l; l = l->next)
|
||||||
{
|
{
|
||||||
CcDisplayMonitor *output = l->data;
|
CcDisplayMonitor *output = l->data;
|
||||||
if (cc_display_monitor_is_active (output))
|
|
||||||
priv->current_output = output;
|
if (!cc_display_monitor_is_active (output) ||
|
||||||
else
|
(cc_display_monitor_is_builtin (output) && priv->lid_is_closed))
|
||||||
l = l->next;
|
continue;
|
||||||
|
|
||||||
|
priv->current_output = output;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!priv->current_output)
|
if (!priv->current_output)
|
||||||
goto show_error;
|
goto show_error;
|
||||||
|
|
||||||
switch (g_list_length (outputs))
|
n_outputs = g_list_length (outputs);
|
||||||
|
if (priv->lid_is_closed)
|
||||||
{
|
{
|
||||||
case 1:
|
if (n_outputs <= 2)
|
||||||
main_widget = make_single_output_ui (panel);
|
main_widget = make_single_output_ui (panel);
|
||||||
break;
|
else
|
||||||
case 2:
|
main_widget = make_multi_output_ui (panel);
|
||||||
main_widget = make_two_output_ui (panel);
|
}
|
||||||
break;
|
else
|
||||||
default:
|
{
|
||||||
main_widget = make_multi_output_ui (panel);
|
if (n_outputs == 1)
|
||||||
break;
|
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);
|
gtk_widget_show_all (main_widget);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue