display: Show monitor settings in main page when single

When there's only one display, there's no need to redirect
users to another page. In this case, simply move the settings
widget to the main page.
This commit is contained in:
Georges Basile Stavracas Neto 2022-01-13 09:14:17 -03:00
parent 67e8c7f5c6
commit de758cc962
2 changed files with 50 additions and 0 deletions

View file

@ -103,6 +103,7 @@ struct _CcDisplayPanel
GtkWidget *display_settings_group;
AdwComboRow *primary_display_row;
GtkStack *stack;
AdwPreferencesGroup *single_display_settings_group;
GtkShortcutController *toplevel_shortcuts;
GtkShortcut *escape_shortcut;
@ -663,6 +664,7 @@ cc_display_panel_class_init (CcDisplayPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, night_light_state_label);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, primary_display_row);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, stack);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, single_display_settings_group);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, toplevel_shortcuts);
gtk_widget_class_bind_template_callback (widget_class, on_back_button_clicked_cb);
@ -743,6 +745,41 @@ add_display_row (CcDisplayPanel *self,
self->monitor_rows = g_list_prepend (self->monitor_rows, row);
}
static void
move_display_settings_to_main_page (CcDisplayPanel *self)
{
GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (self->settings));
if (parent != GTK_WIDGET (self->display_settings_bin))
return;
g_object_ref (self->settings);
adw_bin_set_child (self->display_settings_bin, NULL);
adw_preferences_group_add (self->single_display_settings_group,
GTK_WIDGET (self->settings));
g_object_unref (self->settings);
gtk_widget_show (GTK_WIDGET (self->single_display_settings_group));
}
static void
move_display_settings_to_separate_page (CcDisplayPanel *self)
{
GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (self->settings));
if (parent == GTK_WIDGET (self->display_settings_bin))
return;
g_object_ref (self->settings);
adw_preferences_group_remove (self->single_display_settings_group,
GTK_WIDGET (self->settings));
adw_bin_set_child (self->display_settings_bin,
GTK_WIDGET (self->settings));
g_object_unref (self->settings);
gtk_widget_hide (GTK_WIDGET (self->single_display_settings_group));
}
static void
rebuild_ui (CcDisplayPanel *panel)
{
@ -817,6 +854,8 @@ rebuild_ui (CcDisplayPanel *panel)
gtk_widget_set_visible (panel->display_settings_group, TRUE);
gtk_widget_set_visible (panel->config_type_switcher_row, TRUE);
gtk_widget_set_visible (panel->arrangement_group, type == CC_DISPLAY_CONFIG_JOIN);
move_display_settings_to_separate_page (panel);
}
else if (n_usable_outputs > 1)
{
@ -830,6 +869,8 @@ rebuild_ui (CcDisplayPanel *panel)
/* Mirror is also invalid as it cannot be configured using this UI. */
if (type == CC_DISPLAY_CONFIG_CLONE || type > CC_DISPLAY_CONFIG_LAST_VALID)
type = CC_DISPLAY_CONFIG_JOIN;
move_display_settings_to_separate_page (panel);
}
else
{
@ -841,6 +882,8 @@ rebuild_ui (CcDisplayPanel *panel)
gtk_widget_set_visible (panel->display_settings_group, FALSE);
gtk_widget_set_visible (panel->config_type_switcher_row, FALSE);
gtk_widget_set_visible (panel->arrangement_group, FALSE);
move_display_settings_to_main_page (panel);
}
cc_panel_set_selected_type (panel, type);

View file

@ -110,6 +110,13 @@
</child>
<!-- Single Display Settings -->
<child>
<object class="AdwPreferencesGroup" id="single_display_settings_group">
<property name="visible">False</property>
</object>
</child>
<!-- Night Light -->
<child>
<object class="AdwPreferencesGroup">