[gnome-control-center/gbsneto/display-panel-redesign: 13/17] display: Show monitor settings in main page when single
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/gbsneto/display-panel-redesign: 13/17] display: Show monitor settings in main page when single
- Date: Thu, 13 Jan 2022 19:20:13 +0000 (UTC)
commit a1e814cf74b83efdf872d182a459f6643e566322
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Jan 13 09:14:17 2022 -0300
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.
panels/display/cc-display-panel.c | 43 ++++++++++++++++++++++++++++++++++++++
panels/display/cc-display-panel.ui | 7 +++++++
2 files changed, 50 insertions(+)
---
diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c
index 2291b5109..4518a9183 100644
--- a/panels/display/cc-display-panel.c
+++ b/panels/display/cc-display-panel.c
@@ -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);
diff --git a/panels/display/cc-display-panel.ui b/panels/display/cc-display-panel.ui
index ee90bec3c..4ebcea87d 100644
--- a/panels/display/cc-display-panel.ui
+++ b/panels/display/cc-display-panel.ui
@@ -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">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]