[gnome-control-center/gbsneto/display-panel-redesign: 13/17] display: Show monitor settings in main page when single




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]