[gnome-control-center/gbsneto/display-panel-redesign: 15/17] display: Add enabled switch to CcDisplaySettings
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/gbsneto/display-panel-redesign: 15/17] display: Add enabled switch to CcDisplaySettings
- Date: Thu, 13 Jan 2022 19:20:13 +0000 (UTC)
commit 02e896cae979b44b2bccf86a347de16daca50676
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]