[gnome-control-center/gbsneto/display-panel-redesign: 42/44] display: Add enabled switch to CcDisplaySettings




commit 1d6bab12cf14909d189998d37591f1ac035c2a7b
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Jan 13 15:37:53 2022 -0300

    display: Add enabled switch to CcDisplaySettings
    
    This allow enabling and disabling each display individually.

 panels/display/cc-display-panel.c     |  2 ++
 panels/display/cc-display-settings.c  | 41 +++++++++++++++++++++++++++++++++++
 panels/display/cc-display-settings.h  |  2 ++
 panels/display/cc-display-settings.ui | 25 +++++++++++++++++++++
 4 files changed, 70 insertions(+)
---
diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c
index 4518a9183..f1de7ab54 100644
--- a/panels/display/cc-display-panel.c
+++ b/panels/display/cc-display-panel.c
@@ -886,6 +886,8 @@ rebuild_ui (CcDisplayPanel *panel)
       move_display_settings_to_main_page (panel);
     }
 
+  cc_display_settings_set_multimonitor (panel->settings, n_outputs > 1);
+
   cc_panel_set_selected_type (panel, type);
 
   panel->rebuilding_counter--;
diff --git a/panels/display/cc-display-settings.c b/panels/display/cc-display-settings.c
index 600db2119..fe26fd32b 100644
--- a/panels/display/cc-display-settings.c
+++ b/panels/display/cc-display-settings.c
@@ -46,6 +46,9 @@ struct _CcDisplaySettings
   GListStore       *resolution_list;
   GListModel       *scale_list;
 
+  GtkWidget        *enabled_listbox;
+  AdwActionRow     *enabled_row;
+  GtkSwitch        *enabled_switch;
   GtkWidget        *orientation_row;
   GtkWidget        *refresh_rate_row;
   GtkWidget        *resolution_row;
@@ -244,6 +247,7 @@ cc_display_settings_rebuild_ui (CcDisplaySettings *self)
 
   if (!self->config || !self->selected_output)
     {
+      gtk_widget_set_visible (self->enabled_listbox, FALSE);
       gtk_widget_set_visible (self->orientation_row, FALSE);
       gtk_widget_set_visible (self->refresh_rate_row, FALSE);
       gtk_widget_set_visible (self->resolution_row, FALSE);
@@ -254,6 +258,7 @@ cc_display_settings_rebuild_ui (CcDisplaySettings *self)
       return G_SOURCE_REMOVE;
     }
 
+  g_object_freeze_notify ((GObject*) self->enabled_switch);
   g_object_freeze_notify ((GObject*) self->orientation_row);
   g_object_freeze_notify ((GObject*) self->refresh_rate_row);
   g_object_freeze_notify ((GObject*) self->resolution_row);
@@ -273,6 +278,13 @@ cc_display_settings_rebuild_ui (CcDisplaySettings *self)
     current_mode = CC_DISPLAY_MODE (modes->data);
   }
 
+  /* Enabled Switch */
+  gtk_widget_set_visible (self->enabled_listbox, TRUE);
+  adw_preferences_row_set_title (ADW_PREFERENCES_ROW (self->enabled_row),
+                                 cc_display_monitor_get_ui_name (self->selected_output));
+  gtk_switch_set_active (GTK_SWITCH (self->enabled_switch),
+                         cc_display_monitor_is_active (self->selected_output));
+
   if (should_show_rotation (self))
     {
       guint i;
@@ -454,6 +466,7 @@ cc_display_settings_rebuild_ui (CcDisplaySettings *self)
                          cc_display_monitor_get_underscanning (self->selected_output));
 
   self->updating = TRUE;
+  g_object_thaw_notify ((GObject*) self->enabled_switch);
   g_object_thaw_notify ((GObject*) self->orientation_row);
   g_object_thaw_notify ((GObject*) self->refresh_rate_row);
   g_object_thaw_notify ((GObject*) self->resolution_row);
@@ -478,6 +491,20 @@ on_output_changed_cb (CcDisplaySettings *self,
   self->idle_udpate_id = g_idle_add ((GSourceFunc) cc_display_settings_rebuild_ui, self);
 }
 
+static void
+on_enabled_switch_active_changed_cb (GtkWidget         *widget,
+                                     GParamSpec        *pspec,
+                                     CcDisplaySettings *self)
+{
+  if (self->updating)
+    return;
+
+  cc_display_monitor_set_active (self->selected_output,
+                                 gtk_switch_get_active (self->enabled_switch));
+
+  g_signal_emit_by_name (G_OBJECT (self), "updated", self->selected_output);
+}
+
 static void
 on_orientation_selection_changed_cb (GtkWidget         *widget,
                                      GParamSpec        *pspec,
@@ -718,6 +745,9 @@ cc_display_settings_class_init (CcDisplaySettingsClass *klass)
                 0, NULL, NULL, NULL,
                 G_TYPE_NONE, 1, CC_TYPE_DISPLAY_MONITOR);
 
+  gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, enabled_listbox);
+  gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, enabled_row);
+  gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, enabled_switch);
   gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, orientation_row);
   gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, refresh_rate_row);
   gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, resolution_row);
@@ -727,6 +757,7 @@ cc_display_settings_class_init (CcDisplaySettingsClass *klass)
   gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, underscanning_row);
   gtk_widget_class_bind_template_child (widget_class, CcDisplaySettings, underscanning_switch);
 
+  gtk_widget_class_bind_template_callback (widget_class, on_enabled_switch_active_changed_cb);
   gtk_widget_class_bind_template_callback (widget_class, on_orientation_selection_changed_cb);
   gtk_widget_class_bind_template_callback (widget_class, on_refresh_rate_selection_changed_cb);
   gtk_widget_class_bind_template_callback (widget_class, on_resolution_selection_changed_cb);
@@ -870,3 +901,13 @@ cc_display_settings_refresh_layout (CcDisplaySettings *self,
   gtk_widget_set_visible (self->scale_combo_row, use_combo);
   gtk_widget_set_visible (self->scale_buttons_row, self->num_scales > 1 && !use_combo);
 }
+
+void
+cc_display_settings_set_multimonitor (CcDisplaySettings *self,
+                                      gboolean           multimonitor)
+{
+  gtk_widget_set_visible (self->enabled_listbox, multimonitor);
+
+  if (!multimonitor)
+    gtk_switch_set_active (GTK_SWITCH (self->enabled_switch), TRUE);
+}
diff --git a/panels/display/cc-display-settings.h b/panels/display/cc-display-settings.h
index ae88ee31b..479441438 100644
--- a/panels/display/cc-display-settings.h
+++ b/panels/display/cc-display-settings.h
@@ -41,6 +41,8 @@ void                cc_display_settings_set_selected_output   (CcDisplaySettings
                                                                CcDisplayMonitor     *output);
 void                cc_display_settings_refresh_layout        (CcDisplaySettings    *settings,
                                                                gboolean              folded);
+void                cc_display_settings_set_multimonitor      (CcDisplaySettings    *self,
+                                                               gboolean              multimonitor);
 
 G_END_DECLS
 
diff --git a/panels/display/cc-display-settings.ui b/panels/display/cc-display-settings.ui
index ed090918a..6233629c3 100644
--- a/panels/display/cc-display-settings.ui
+++ b/panels/display/cc-display-settings.ui
@@ -2,6 +2,31 @@
 <!-- Generated with glade 3.22.0 -->
 <interface>
   <template class="CcDisplaySettings" parent="GtkBox">
+    <property name="spacing">18</property>
+    <property name="orientation">vertical</property>
+
+    <child>
+      <object class="GtkListBox" id="enabled_listbox">
+        <property name="hexpand">True</property>
+        <property name="selection_mode">none</property>
+        <style>
+          <class name="boxed-list" />
+        </style>
+        <child>
+          <object class="AdwActionRow" id="enabled_row">
+            <property name="activatable-widget">enabled_switch</property>
+            <child>
+              <object class="GtkSwitch" id="enabled_switch">
+                <property name="halign">end</property>
+                <property name="valign">center</property>
+                <signal name="notify::active" handler="on_enabled_switch_active_changed_cb" swapped="no"/>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+
     <child>
       <object class="GtkListBox" id="listbox">
         <property name="hexpand">True</property>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]