You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5102 lines
232 KiB

From 1e3569e2f6c2c418b84ea3aa6ce5f84166ec48a7 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Wed, 31 Mar 2021 11:06:44 +0200
Subject: [PATCH 01/33] power: Fix possible assertion on startup
When opening the Power panel, and if power-profiles-daemon isn't already
started, we'll be autostarting it, making it send signals about all the
changed properties, including "PerformanceInhibited" even if we
don't have a Performance row.
Ignore the property change if we don't have a row for it rather than
asserting.
#0 0x00007f73916bc292 in raise () from /lib64/libc.so.6
#1 0x00007f73916a58a4 in abort () from /lib64/libc.so.6
#2 0x00007f7393203ccc in g_assertion_message.cold () from /lib64/libglib-2.0.so.0
#3 0x00007f739325f22f in g_assertion_message_expr () from /lib64/libglib-2.0.so.0
#4 0x000055a4099e28ae in performance_profile_set_inhibited (self=0x55a40b37e320, self=0x55a40b37e320, performance_inhibited=<optimized out>) at ../panels/power/cc-power-panel.c:1366
#5 power_profiles_properties_changed_cb (self=0x55a40b37e320, changed_properties=<optimized out>, invalidated_properties=<optimized out>, proxy=<optimized out>) at ../panels/power/cc-power-panel.c:1425
#6 0x00007f7393332c2f in g_closure_invoke () from /lib64/libgobject-2.0.so.0
#7 0x00007f739334eea6 in signal_emit_unlocked_R () from /lib64/libgobject-2.0.so.0
1362 {
1363 CcPowerProfileRow *row;
1364
1365 row = self->power_profiles_row[CC_POWER_PROFILE_PERFORMANCE];
1366 g_assert (row != NULL);
1367 cc_power_profile_row_set_performance_inhibited (row, performance_inhibited);
1368 }
---
panels/power/cc-power-panel.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index c9c4705da..0b8226a29 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1363,7 +1363,8 @@ performance_profile_set_inhibited (CcPowerPanel *self,
CcPowerProfileRow *row;
row = self->power_profiles_row[CC_POWER_PROFILE_PERFORMANCE];
- g_assert (row != NULL);
+ if (!row)
+ return;
cc_power_profile_row_set_performance_inhibited (row, performance_inhibited);
}
--
2.32.0
From da2248d43f519f13b57e89cdc80bbbfe346ad463 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Thu, 7 Jan 2021 14:00:15 +0100
Subject: [PATCH 02/33] power: Simplifies keyboard navigation
This drops the ability to loop through the page but significantly
simplifies the code. I think this is a good tradeoff as looping is a
rather unexpected behavior.
---
panels/power/cc-power-panel.c | 70 ++---------------------------------
1 file changed, 4 insertions(+), 66 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 0b8226a29..1d31a8a83 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -122,9 +122,6 @@ struct _CcPowerPanel
gboolean has_batteries;
char *chassis_type;
- GList *boxes;
- GList *boxes_reverse;
-
GDBusProxy *bt_rfkill;
GDBusProxy *bt_properties;
@@ -169,8 +166,6 @@ cc_power_panel_dispose (GObject *object)
#ifdef HAVE_NETWORK_MANAGER
g_clear_object (&self->nm_client);
#endif
- g_clear_pointer (&self->boxes, g_list_free);
- g_clear_pointer (&self->boxes_reverse, g_list_free);
if (self->iio_proxy_watch_id != 0)
g_bus_unwatch_name (self->iio_proxy_watch_id);
self->iio_proxy_watch_id = 0;
@@ -869,60 +864,12 @@ nm_client_ready_cb (GObject *source_object,
static gboolean
keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *list)
{
- GtkWidget *next_list = NULL;
- GList *item, *boxes_list;
- gdouble value, lower, upper, page;
-
- /* Find the list in the list of GtkListBoxes */
- if (direction == GTK_DIR_DOWN)
- boxes_list = self->boxes;
- else
- boxes_list = self->boxes_reverse;
-
- item = g_list_find (boxes_list, list);
- g_assert (item);
- item = item->next;
- while (1)
- {
- if (item == NULL)
- item = boxes_list;
-
- /* Avoid looping */
- if (item->data == list)
- break;
-
- if (gtk_widget_is_visible (item->data))
- {
- next_list = item->data;
- break;
- }
-
- item = item->next;
- }
-
- if (next_list)
- {
- gtk_widget_child_focus (next_list, direction);
- return TRUE;
- }
-
- value = gtk_adjustment_get_value (self->focus_adjustment);
- lower = gtk_adjustment_get_lower (self->focus_adjustment);
- upper = gtk_adjustment_get_upper (self->focus_adjustment);
- page = gtk_adjustment_get_page_size (self->focus_adjustment);
+ if (direction != GTK_DIR_UP && direction != GTK_DIR_DOWN)
+ return FALSE;
- if (direction == GTK_DIR_UP && value > lower)
- {
- gtk_adjustment_set_value (self->focus_adjustment, lower);
- return TRUE;
- }
- else if (direction == GTK_DIR_DOWN && value < upper - page)
- {
- gtk_adjustment_set_value (self->focus_adjustment, upper - page);
- return TRUE;
- }
+ direction == GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD;
- return FALSE;
+ return gtk_widget_child_focus (GTK_WIDGET (self), direction);
}
static void
@@ -1559,8 +1506,6 @@ setup_power_profiles (CcPowerPanel *self)
gtk_widget_show (GTK_WIDGET (self->power_profile_section));
- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->power_profile_listbox);
-
props = g_variant_get_child_value (variant, 0);
performance_inhibited = variant_lookup_string (props, "PerformanceInhibited");
active_profile = variant_lookup_string (props, "ActiveProfile");
@@ -1780,7 +1725,6 @@ cc_power_panel_init (CcPowerPanel *self)
battery_label = g_markup_printf_escaped ("<b>%s</b>", _("Battery"));
gtk_label_set_markup (self->battery_heading, battery_label);
- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->battery_listbox);
gtk_list_box_set_header_func (self->battery_listbox,
cc_list_box_update_header_func,
NULL, NULL);
@@ -1790,7 +1734,6 @@ cc_power_panel_init (CcPowerPanel *self)
device_label = g_markup_printf_escaped ("<b>%s</b>", _("Devices"));
gtk_label_set_markup (self->device_heading, device_label);
- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->device_listbox);
gtk_list_box_set_header_func (self->device_listbox,
cc_list_box_update_header_func,
NULL, NULL);
@@ -1809,7 +1752,6 @@ cc_power_panel_init (CcPowerPanel *self)
power_saving_label = g_strdup_printf ("<b>%s</b>", _("Power Saving"));
gtk_label_set_markup (self->power_saving_heading, power_saving_label);
- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->power_saving_listbox);
gtk_list_box_set_header_func (self->power_saving_listbox,
cc_list_box_update_header_func,
NULL, NULL);
@@ -1817,15 +1759,11 @@ cc_power_panel_init (CcPowerPanel *self)
general_label = g_markup_printf_escaped ("<b>%s</b>", _("Suspend & Power Button"));
gtk_label_set_markup (self->general_heading, general_label);
- self->boxes_reverse = g_list_prepend (self->boxes_reverse, self->general_listbox);
gtk_list_box_set_header_func (self->general_listbox,
cc_list_box_update_header_func,
NULL, NULL);
setup_general_section (self);
- self->boxes = g_list_copy (self->boxes_reverse);
- self->boxes = g_list_reverse (self->boxes);
-
/* populate batteries */
g_signal_connect_object (self->up_client, "device-added", G_CALLBACK (up_client_device_added), self, G_CONNECT_SWAPPED);
g_signal_connect_object (self->up_client, "device-removed", G_CALLBACK (up_client_device_removed), self, G_CONNECT_SWAPPED);
--
2.32.0
From 25027f6c3c6928eeedb440fe2ca84412dae49ab2 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Fri, 8 Jan 2021 16:00:25 +0100
Subject: [PATCH 03/33] power: Don't set the vadjustment
This is useless as GtkScrolledwindow already does it on the viewport it
creates.
---
panels/power/cc-power-panel.c | 9 ---------
panels/power/cc-power-panel.ui | 4 ++--
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 1d31a8a83..1a8cfa969 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -91,8 +91,6 @@ struct _CcPowerPanel
GtkListBoxRow *kbd_brightness_row;
CcBrightnessScale *kbd_brightness_scale;
GtkSizeGroup *level_sizegroup;
- GtkScrolledWindow *main_scroll;
- HdyClamp *main_box;
GtkListBoxRow *mobile_row;
GtkSwitch *mobile_switch;
GtkComboBox *power_button_combo;
@@ -136,8 +134,6 @@ struct _CcPowerPanel
#ifdef HAVE_NETWORK_MANAGER
NMClient *nm_client;
#endif
-
- GtkAdjustment *focus_adjustment;
};
CC_PANEL_REGISTER (CcPowerPanel, cc_power_panel)
@@ -1661,8 +1657,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, main_scroll);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, main_box);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_combo);
@@ -1775,7 +1769,4 @@ cc_power_panel_init (CcPowerPanel *self)
G_CALLBACK (up_client_changed), self, G_CONNECT_SWAPPED);
}
up_client_changed (self);
-
- self->focus_adjustment = gtk_scrolled_window_get_vadjustment (self->main_scroll);
- gtk_container_set_focus_vadjustment (GTK_CONTAINER (self->main_box), self->focus_adjustment);
}
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index ea3cf9322..d3e200d93 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -113,12 +113,12 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkScrolledWindow" id="main_scroll">
+ <object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hscrollbar_policy">never</property>
<child>
- <object class="HdyClamp" id="main_box">
+ <object class="HdyClamp">
<property name="visible">True</property>
<property name="margin_top">32</property>
<property name="margin_bottom">32</property>
--
2.32.0
From caf3d70a7004552e0bb382a1a1220cdac9c0c1f0 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Fri, 8 Jan 2021 16:12:56 +0100
Subject: [PATCH 04/33] power: Use HdyComboRow for the Blank Screen row
This simplifies the code a bit and modernizes the UI.
---
panels/power/cc-power-panel.c | 110 ++++++++++++++++++++++++++-------
panels/power/cc-power-panel.ui | 88 ++------------------------
2 files changed, 92 insertions(+), 106 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 1a8cfa969..b046b2589 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -73,7 +73,7 @@ struct _CcPowerPanel
GtkSizeGroup *battery_row_sizegroup;
GtkBox *battery_section;
GtkSizeGroup *battery_sizegroup;
- GtkListBoxRow *blank_screen_row;
+ HdyComboRow *blank_screen_row;
GtkListBoxRow *brightness_row;
CcBrightnessScale *brightness_scale;
GtkListBoxRow *bt_row;
@@ -87,7 +87,6 @@ struct _CcPowerPanel
GtkLabel *general_heading;
GtkListBox *general_listbox;
GtkBox *general_section;
- GtkComboBox *idle_delay_combo;
GtkListBoxRow *kbd_brightness_row;
CcBrightnessScale *kbd_brightness_scale;
GtkSizeGroup *level_sizegroup;
@@ -577,6 +576,49 @@ set_value_for_combo (GtkComboBox *combo_box, gint value)
gtk_combo_box_set_active_iter (combo_box, &new);
}
+static void
+set_value_for_combo_row (HdyComboRow *combo_row, gint value)
+{
+ gboolean insert = FALSE;
+ guint insert_before = 0;
+ guint i;
+ HdyValueObject *new;
+ GListModel *model;
+ gint value_last = 0;
+ g_autofree gchar *text = NULL;
+
+ /* try to make the UI match the setting */
+ model = hdy_combo_row_get_model (combo_row);
+ for (i = 0; i < g_list_model_get_n_items (model); i++)
+ {
+ HdyValueObject *value_object = g_list_model_get_item (model, i);
+ gint value_tmp = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value"));
+ if (value_tmp == value)
+ {
+ hdy_combo_row_set_selected_index (combo_row, i);
+ return;
+ }
+
+ /* Insert before if the next value is larger or the value is lower
+ * again (i.e. "Never" is zero and last). */
+ if (!insert && (value_tmp > value || value_last > value_tmp))
+ {
+ insert = TRUE;
+ insert_before = i;
+ }
+
+ value_last = value_tmp;
+ }
+
+ /* The value is not listed, so add it at the best point (or the end). */
+ text = cc_util_time_to_string_text (value * 1000);
+ new = hdy_value_object_new_string (text);
+ g_object_set_data (G_OBJECT (new), "value",
+ GUINT_TO_POINTER (value));
+ g_list_store_insert (G_LIST_STORE (model), insert_before, new);
+ hdy_combo_row_set_selected_index (combo_row, insert_before);
+}
+
static void
set_ac_battery_ui_mode (CcPowerPanel *self)
{
@@ -869,25 +911,18 @@ keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *lis
}
static void
-idle_delay_combo_changed_cb (CcPowerPanel *self)
+blank_screen_row_changed_cb (CcPowerPanel *self)
{
- GtkTreeIter iter;
- GtkTreeModel *model;
+ GListModel *model;
+ gint selected_index;
+ HdyValueObject *value_object;
gint value;
- gboolean ret;
- /* no selection */
- ret = gtk_combo_box_get_active_iter (self->idle_delay_combo, &iter);
- if (!ret)
- return;
+ model = hdy_combo_row_get_model (self->blank_screen_row);
+ selected_index = hdy_combo_row_get_selected_index (self->blank_screen_row);
+ value_object = g_list_model_get_item (model, selected_index);
+ value = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value"));
- /* get entry */
- model = gtk_combo_box_get_model (self->idle_delay_combo);
- gtk_tree_model_get (model, &iter,
- 1, &value,
- -1);
-
- /* set both keys */
g_settings_set_uint (self->session_settings, "idle-delay", value);
}
@@ -1171,6 +1206,37 @@ has_kbd_brightness_cb (CcPowerPanel *self,
gtk_widget_set_visible (GTK_WIDGET (self->kbd_brightness_row), has_brightness);
}
+static void
+populate_blank_screen_row (HdyComboRow *combo_row)
+{
+ g_autoptr (GListStore) list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
+ gint minutes[] = { 1, 2, 3, 4, 5, 8, 10, 12, 15 };
+ guint i;
+ g_autoptr (HdyValueObject) never_value_object = NULL;
+
+ for (i = 0; i < G_N_ELEMENTS (minutes); i++)
+ {
+ gchar *text = NULL;
+ g_autoptr (HdyValueObject) value_object = NULL;
+
+ /* Translators: Option for "Blank Screen" in "Power" panel */
+ text = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, "%d minute", "%d minutes", minutes[i]), minutes[i]);
+ value_object = hdy_value_object_new_take_string (text);
+
+ g_object_set_data (G_OBJECT (value_object), "value", GUINT_TO_POINTER (minutes[i] * 60));
+ g_list_store_append (list_store, value_object);
+ }
+
+ never_value_object = hdy_value_object_new_string (C_("Idle time", "Never"));
+ g_object_set_data (G_OBJECT (never_value_object), "value", GUINT_TO_POINTER (0));
+ g_list_store_append (list_store, never_value_object);
+
+ hdy_combo_row_bind_name_model (combo_row,
+ G_LIST_MODEL (list_store),
+ (HdyComboRowGetNameFunc) hdy_value_object_dup_string,
+ NULL, NULL);
+}
+
static void
setup_power_saving (CcPowerPanel *self)
{
@@ -1191,10 +1257,11 @@ setup_power_saving (CcPowerPanel *self)
self->dim_screen_switch, "active",
G_SETTINGS_BIND_DEFAULT);
+ g_signal_handlers_block_by_func (self->blank_screen_row, blank_screen_row_changed_cb, self);
+ populate_blank_screen_row (self->blank_screen_row);
value = g_settings_get_uint (self->session_settings, "idle-delay");
- g_signal_handlers_block_by_func (self->idle_delay_combo, idle_delay_combo_changed_cb, self);
- set_value_for_combo (self->idle_delay_combo, value);
- g_signal_handlers_unblock_by_func (self->idle_delay_combo, idle_delay_combo_changed_cb, self);
+ set_value_for_combo_row (self->blank_screen_row, value);
+ g_signal_handlers_unblock_by_func (self->blank_screen_row, blank_screen_row_changed_cb, self);
/* The default values for these settings are unfortunate for us;
* timeout == 0, action == suspend means 'do nothing' - just
@@ -1653,7 +1720,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_section);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, idle_delay_combo);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup);
@@ -1683,7 +1749,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, bt_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, has_brightness_cb);
gtk_widget_class_bind_template_callback (widget_class, has_kbd_brightness_cb);
- gtk_widget_class_bind_template_callback (widget_class, idle_delay_combo_changed_cb);
+ gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb);
gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_button_combo_changed_cb);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index d3e200d93..a9bb39b77 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -51,56 +51,6 @@
</row>
</data>
</object>
- <object class="GtkListStore" id="idle_time_liststore">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name value -->
- <column type="gint"/>
- </columns>
- <data>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">1 minute</col>
- <col id="1">60</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">2 minutes</col>
- <col id="1">120</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">3 minutes</col>
- <col id="1">180</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">4 minutes</col>
- <col id="1">240</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">5 minutes</col>
- <col id="1">300</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">8 minutes</col>
- <col id="1">480</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">10 minutes</col>
- <col id="1">600</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">12 minutes</col>
- <col id="1">720</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">15 minutes</col>
- <col id="1">900</col>
- </row>
- <row>
- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank screen&quot; in &quot;Power&quot; panel.">Never</col>
- <col id="1">0</col>
- </row>
- </data>
- </object>
<object class="GtkListStore" id="power_button_liststore">
<columns>
<!-- column-name name -->
@@ -447,41 +397,11 @@
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="blank_screen_row">
+ <object class="HdyComboRow" id="blank_screen_row">
<property name="visible">True</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Blank Screen</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">idle_delay_combo</property>
- </object>
- </child>
- <child>
- <object class="GtkComboBoxText" id="idle_delay_combo">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="entry-text-column">0</property>
- <property name="model">idle_time_liststore</property>
- <signal name="changed" handler="idle_delay_combo_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
+ <property name="title" translatable="yes">_Blank Screen</property>
+ <property name="use_underline">True</property>
+ <signal name="notify::selected-index" handler="blank_screen_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
<child>
--
2.32.0
From 7dbe681401f3f487f1e752a0569cf3d743a74187 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Fri, 8 Jan 2021 16:17:42 +0100
Subject: [PATCH 05/33] power: Use HdyComboRow for the Power Button Behavior
row
This simplifies the code a bit and modernizes the UI.
---
panels/power/cc-power-panel.c | 71 ++++++++++++++++++----------------
panels/power/cc-power-panel.ui | 46 ++--------------------
2 files changed, 42 insertions(+), 75 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index b046b2589..ea979cfc7 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -92,9 +92,7 @@ struct _CcPowerPanel
GtkSizeGroup *level_sizegroup;
GtkListBoxRow *mobile_row;
GtkSwitch *mobile_switch;
- GtkComboBox *power_button_combo;
- GtkListStore *power_button_liststore;
- GtkListBoxRow *power_button_row;
+ HdyComboRow *power_button_row;
GtkLabel *power_profile_heading;
GtkListBox *power_profile_listbox;
GtkBox *power_profile_section;
@@ -927,25 +925,18 @@ blank_screen_row_changed_cb (CcPowerPanel *self)
}
static void
-power_button_combo_changed_cb (CcPowerPanel *self)
+power_button_row_changed_cb (CcPowerPanel *self)
{
- GtkTreeIter iter;
- GtkTreeModel *model;
+ GListModel *model;
+ gint selected_index;
+ HdyValueObject *value_object;
gint value;
- gboolean ret;
- /* no selection */
- ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->power_button_combo), &iter);
- if (!ret)
- return;
-
- /* get entry */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self->power_button_combo));
- gtk_tree_model_get (model, &iter,
- 1, &value,
- -1);
+ model = hdy_combo_row_get_model (self->power_button_row);
+ selected_index = hdy_combo_row_get_selected_index (self->power_button_row);
+ value_object = g_list_model_get_item (model, selected_index);
+ value = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value"));
- /* set both keys */
g_settings_set_enum (self->gsd_settings, "power-button-action", value);
}
@@ -1048,10 +1039,11 @@ set_sleep_type (const GValue *value,
}
static void
-populate_power_button_model (GtkTreeModel *model,
- gboolean can_suspend,
- gboolean can_hibernate)
+populate_power_button_row (HdyComboRow *combo_row,
+ gboolean can_suspend,
+ gboolean can_hibernate)
{
+ g_autoptr (GListStore) list_store = NULL;
struct {
char *name;
GsdPowerButtonActionType value;
@@ -1063,20 +1055,28 @@ populate_power_button_model (GtkTreeModel *model,
};
guint i;
+ list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
for (i = 0; i < G_N_ELEMENTS (actions); i++)
{
+ g_autoptr (HdyValueObject) value_object = NULL;
+
if (!can_suspend && actions[i].value == GSD_POWER_BUTTON_ACTION_SUSPEND)
continue;
if (!can_hibernate && actions[i].value == GSD_POWER_BUTTON_ACTION_HIBERNATE)
continue;
- gtk_list_store_insert_with_values (GTK_LIST_STORE (model),
- NULL, -1,
- 0, _(actions[i].name),
- 1, actions[i].value,
- -1);
+ value_object = hdy_value_object_new_string (actions[i].name);
+ g_object_set_data (G_OBJECT (value_object),
+ "value",
+ GUINT_TO_POINTER (actions[i].value));
+ g_list_store_append (list_store, value_object);
}
+
+ hdy_combo_row_bind_name_model (combo_row,
+ G_LIST_MODEL (list_store),
+ (HdyComboRowGetNameFunc) hdy_value_object_dup_string,
+ NULL, NULL);
}
#define NEVER 0
@@ -1635,10 +1635,17 @@ setup_general_section (CcPowerPanel *self)
{
gtk_widget_show (GTK_WIDGET (self->power_button_row));
- populate_power_button_model (GTK_TREE_MODEL (self->power_button_liststore), can_suspend, can_hibernate);
- g_signal_handlers_block_by_func (self->power_button_combo, power_button_combo_changed_cb, self);
- set_value_for_combo (self->power_button_combo, g_settings_get_enum (self->gsd_settings, "power-button-action"));
- g_signal_handlers_unblock_by_func (self->power_button_combo, power_button_combo_changed_cb, self);
+ g_signal_handlers_block_by_func (self->power_button_row,
+ power_button_row_changed_cb,
+ self);
+ populate_power_button_row (self->power_button_row,
+ can_suspend,
+ can_hibernate);
+ set_value_for_combo_row (self->power_button_row,
+ g_settings_get_enum (self->gsd_settings, "power-button-action"));
+ g_signal_handlers_unblock_by_func (self->power_button_row,
+ power_button_row_changed_cb,
+ self);
show_section = TRUE;
}
@@ -1725,8 +1732,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_combo);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_liststore);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
@@ -1752,7 +1757,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb);
gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb);
- gtk_widget_class_bind_template_callback (widget_class, power_button_combo_changed_cb);
+ gtk_widget_class_bind_template_callback (widget_class, power_button_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_profiles_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, power_saving_listbox_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, wifi_switch_changed_cb);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index a9bb39b77..18fc0a8ac 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -51,14 +51,6 @@
</row>
</data>
</object>
- <object class="GtkListStore" id="power_button_liststore">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name value -->
- <column type="gint"/>
- </columns>
- </object>
<template class="CcPowerPanel" parent="CcPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -660,41 +652,11 @@
<relation target="general_heading" type="labelled-by"/>
</accessibility>
<child>
- <object class="GtkListBoxRow" id="power_button_row">
+ <object class="HdyComboRow" id="power_button_row">
<property name="visible">False</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Po_wer Button Behavior</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">power_button_combo</property>
- </object>
- </child>
- <child>
- <object class="GtkComboBoxText" id="power_button_combo">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="entry-text-column">0</property>
- <property name="model">power_button_liststore</property>
- <signal name="changed" handler="power_button_combo_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
+ <property name="title" translatable="yes">Po_wer Button Behavior</property>
+ <property name="use_underline">True</property>
+ <signal name="notify::selected-index" handler="power_button_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
<child>
--
2.32.0
From db131378d3a980dc243d704a91cf995d40df356b Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Thu, 7 Jan 2021 10:59:00 +0100
Subject: [PATCH 06/33] power: Use HdyActionRow to simplify the code
---
panels/power/cc-power-panel.c | 27 +--
panels/power/cc-power-panel.ui | 430 +++++----------------------------
2 files changed, 72 insertions(+), 385 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index ea979cfc7..22d91c564 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -68,17 +68,15 @@ struct _CcPowerPanel
GtkListBoxRow *automatic_suspend_row;
GtkLabel *battery_heading;
GtkListBox *battery_listbox;
- GtkListBoxRow *battery_percentage_row;
+ HdyActionRow *battery_percentage_row;
GtkSwitch *battery_percentage_switch;
GtkSizeGroup *battery_row_sizegroup;
GtkBox *battery_section;
- GtkSizeGroup *battery_sizegroup;
HdyComboRow *blank_screen_row;
GtkListBoxRow *brightness_row;
CcBrightnessScale *brightness_scale;
GtkListBoxRow *bt_row;
GtkSwitch *bt_switch;
- GtkSizeGroup *charge_sizegroup;
GtkLabel *device_heading;
GtkListBox *device_listbox;
GtkBox *device_section;
@@ -234,8 +232,6 @@ add_battery (CcPowerPanel *panel, UpDevice *device, gboolean primary)
CcBatteryRow *row = cc_battery_row_new (device, primary);
cc_battery_row_set_level_sizegroup (row, panel->level_sizegroup);
cc_battery_row_set_row_sizegroup (row, panel->battery_row_sizegroup);
- cc_battery_row_set_charge_sizegroup (row, panel->charge_sizegroup);
- cc_battery_row_set_battery_sizegroup (row, panel->battery_sizegroup);
gtk_container_add (GTK_CONTAINER (panel->battery_listbox), GTK_WIDGET (row));
gtk_widget_set_visible (GTK_WIDGET (panel->battery_section), TRUE);
@@ -247,8 +243,6 @@ add_device (CcPowerPanel *self, UpDevice *device)
CcBatteryRow *row = cc_battery_row_new (device, FALSE);
cc_battery_row_set_level_sizegroup (row, self->level_sizegroup);
cc_battery_row_set_row_sizegroup (row, self->row_sizegroup);
- cc_battery_row_set_charge_sizegroup (row, self->charge_sizegroup);
- cc_battery_row_set_battery_sizegroup (row, self->battery_sizegroup);
gtk_container_add (GTK_CONTAINER (self->device_listbox), GTK_WIDGET (row));
gtk_widget_set_visible (GTK_WIDGET (self->device_section), TRUE);
@@ -986,23 +980,20 @@ iio_proxy_vanished_cb (GDBusConnection *connection,
}
static void
-power_saving_listbox_row_activated_cb (CcPowerPanel *self, GtkListBoxRow *row)
+automatic_suspend_row_activated_cb (CcPowerPanel *self)
{
GtkWidget *toplevel;
- if (row == self->automatic_suspend_row)
- {
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
- gtk_window_set_transient_for (GTK_WINDOW (self->automatic_suspend_dialog), GTK_WINDOW (toplevel));
- gtk_window_set_modal (GTK_WINDOW (self->automatic_suspend_dialog), TRUE);
- gtk_window_present (GTK_WINDOW (self->automatic_suspend_dialog));
- }
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
+ gtk_window_set_transient_for (GTK_WINDOW (self->automatic_suspend_dialog), GTK_WINDOW (toplevel));
+ gtk_window_set_modal (GTK_WINDOW (self->automatic_suspend_dialog), TRUE);
+ gtk_window_present (GTK_WINDOW (self->automatic_suspend_dialog));
}
static gboolean
automatic_suspend_label_mnemonic_activate_cb (CcPowerPanel *self)
{
- power_saving_listbox_row_activated_cb (self, self->automatic_suspend_row);
+ automatic_suspend_row_activated_cb (self);
return TRUE;
}
@@ -1712,13 +1703,11 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_percentage_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_row_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_section);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, blank_screen_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, bt_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, bt_switch);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, charge_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_section);
@@ -1759,7 +1748,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_button_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_profiles_row_activated_cb);
- gtk_widget_class_bind_template_callback (widget_class, power_saving_listbox_row_activated_cb);
+ gtk_widget_class_bind_template_callback (widget_class, automatic_suspend_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, wifi_switch_changed_cb);
}
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index 18fc0a8ac..12df3aa4a 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -220,170 +220,59 @@
<relation target="power_saving_heading" type="labelled-by"/>
</accessibility>
<child>
- <object class="GtkListBoxRow" id="brightness_row">
+ <object class="HdyActionRow" id="brightness_row">
<property name="visible">True</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">_Screen Brightness</property>
+ <property name="use_underline">True</property>
<child>
- <object class="GtkBox">
+ <object class="CcBrightnessScale" id="brightness_scale">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="brightness_label">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Screen Brightness</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">brightness_scale</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="spacing">12</property>
- <property name="expand">True</property>
- <child>
- <object class="GtkLabel" id="brightness_spacer">
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="CcBrightnessScale" id="brightness_scale">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <property name="device">screen</property>
- <signal name="notify::has-brightness" handler="has_brightness_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
+ <property name="valign">center</property>
+ <property name="expand">True</property>
+ <property name="device">screen</property>
+ <signal name="notify::has-brightness" handler="has_brightness_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="als_row">
+ <object class="HdyActionRow" id="als_row">
<property name="visible">True</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">Automatic Brightness</property>
<child>
- <object class="GtkBox">
+ <object class="GtkSwitch" id="als_switch">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Automatic Brightness</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">als_switch</property>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="als_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="als_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="als_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="kbd_brightness_row">
+ <object class="HdyActionRow" id="kbd_brightness_row">
<property name="visible">True</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">_Keyboard Brightness</property>
+ <property name="use_underline">True</property>
<child>
- <object class="GtkBox">
+ <object class="CcBrightnessScale" id="kbd_brightness_scale">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="kbd_brightness_label">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Keyboard Brightness</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">kbd_brightness_scale</property>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="spacing">12</property>
- <property name="expand">True</property>
- <child>
- <object class="GtkLabel" id="kbd_brightness_spacer">
- <property name="visible">True</property>
- </object>
- </child>
- <child>
- <object class="CcBrightnessScale" id="kbd_brightness_scale">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <property name="device">kbd</property>
- <signal name="notify::has-brightness" handler="has_kbd_brightness_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
+ <property name="valign">center</property>
+ <property name="expand">True</property>
+ <property name="device">kbd</property>
+ <signal name="notify::has-brightness" handler="has_kbd_brightness_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="dim_screen_row">
+ <object class="HdyActionRow" id="dim_screen_row">
<property name="visible">True</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">Dim Screen When Inactive</property>
+ <property name="activatable_widget">dim_screen_switch</property>
<child>
- <object class="GtkBox">
+ <object class="GtkSwitch" id="dim_screen_switch">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Dim Screen When Inactive</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">dim_screen_switch</property>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="dim_screen_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- </object>
- </child>
+ <property name="valign">center</property>
</object>
</child>
</object>
@@ -397,221 +286,65 @@
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="automatic_suspend_row">
+ <object class="HdyActionRow" id="automatic_suspend_row">
<property name="visible">False</property>
+ <property name="title" translatable="yes">_Automatic Suspend</property>
+ <property name="use_underline">True</property>
+ <property name="activatable">True</property>
+ <signal name="activated" handler="automatic_suspend_row_activated_cb" swapped="yes"/>
<child>
- <object class="GtkBox">
+ <object class="GtkLabel" id="automatic_suspend_label">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Automatic Suspend</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">automatic_suspend_label</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel" id="automatic_suspend_label">
- <property name="visible">True</property>
- <property name="halign">end</property>
- <signal name="mnemonic-activate" handler="automatic_suspend_label_mnemonic_activate_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
+ <property name="halign">end</property>
+ <signal name="mnemonic-activate" handler="automatic_suspend_label_mnemonic_activate_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="wifi_row">
+ <object class="HdyActionRow" id="wifi_row">
<property name="visible">False</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">_Wi-Fi</property>
+ <property name="subtitle" translatable="yes">Wi-Fi can be turned off to save power.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">wifi_switch</property>
<child>
- <object class="GtkBox">
+ <object class="GtkSwitch" id="wifi_switch">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="spacing">4</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Wi-Fi</property>
- <property name="halign">start</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">wifi_switch</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Wi-Fi can be turned off to save power.</property>
- <property name="halign">start</property>
- <property name="xalign">0</property>
- <attributes>
- <attribute name="scale" value="0.9"/>
- </attributes>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="wifi_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="wifi_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="wifi_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="mobile_row">
+ <object class="HdyActionRow" id="mobile_row">
<property name="visible">False</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">_Mobile Broadband</property>
+ <property name="subtitle" translatable="yes">Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">mobile_switch</property>
<child>
- <object class="GtkBox">
+ <object class="GtkSwitch" id="mobile_switch">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="spacing">4</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Mobile Broadband</property>
- <property name="halign">start</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">mobile_switch</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power.</property>
- <property name="halign">start</property>
- <property name="xalign">0</property>
- <attributes>
- <attribute name="scale" value="0.9"/>
- </attributes>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="mobile_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="mobile_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="mobile_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="bt_row">
+ <object class="HdyActionRow" id="bt_row">
<property name="visible">False</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">_Bluetooth</property>
+ <property name="subtitle" translatable="yes">Bluetooth can be turned off to save power.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">bt_switch</property>
<child>
- <object class="GtkBox">
+ <object class="GtkSwitch" id="bt_switch">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="spacing">4</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">_Bluetooth</property>
- <property name="halign">start</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">bt_switch</property>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Bluetooth can be turned off to save power.</property>
- <property name="halign">start</property>
- <property name="xalign">0</property>
- <attributes>
- <attribute name="scale" value="0.9"/>
- </attributes>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="bt_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="bt_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="bt_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
</object>
@@ -660,36 +393,15 @@
</object>
</child>
<child>
- <object class="GtkListBoxRow" id="battery_percentage_row">
+ <object class="HdyActionRow" id="battery_percentage_row">
<property name="visible">False</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
+ <property name="title" translatable="yes">Show Battery _Percentage</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">battery_percentage_switch</property>
<child>
- <object class="GtkBox">
+ <object class="GtkSwitch" id="battery_percentage_switch">
<property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Show Battery _Percentage</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">battery_percentage_switch</property>
- </object>
- </child>
- <child>
- <object class="GtkSwitch" id="battery_percentage_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- </object>
- </child>
+ <property name="valign">center</property>
</object>
</child>
</object>
@@ -710,20 +422,6 @@
<object class="GtkSizeGroup" id="battery_row_sizegroup">
<property name="mode">vertical</property>
</object>
- <object class="GtkSizeGroup" id="battery_sizegroup">
- <property name="mode">horizontal</property>
- <widgets>
- <widget name="brightness_label"/>
- <widget name="kbd_brightness_label"/>
- </widgets>
- </object>
- <object class="GtkSizeGroup" id="charge_sizegroup">
- <property name="mode">horizontal</property>
- <widgets>
- <widget name="brightness_spacer"/>
- <widget name="kbd_brightness_spacer"/>
- </widgets>
- </object>
<object class="GtkSizeGroup" id="level_sizegroup">
<property name="mode">horizontal</property>
<widgets>
--
2.32.0
From 93fa8d4dfaa206a763f678df2b2eb31e1599c7c8 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Thu, 7 Jan 2021 13:49:36 +0100
Subject: [PATCH 07/33] power: Use HdyPreferencesGroup
---
panels/power/cc-power-panel.c | 60 ++---------
panels/power/cc-power-panel.ui | 175 +++++----------------------------
2 files changed, 30 insertions(+), 205 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 22d91c564..96558c778 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -66,36 +66,29 @@ struct _CcPowerPanel
GtkDialog *automatic_suspend_dialog;
GtkLabel *automatic_suspend_label;
GtkListBoxRow *automatic_suspend_row;
- GtkLabel *battery_heading;
GtkListBox *battery_listbox;
HdyActionRow *battery_percentage_row;
GtkSwitch *battery_percentage_switch;
GtkSizeGroup *battery_row_sizegroup;
- GtkBox *battery_section;
+ HdyPreferencesGroup *battery_section;
HdyComboRow *blank_screen_row;
GtkListBoxRow *brightness_row;
CcBrightnessScale *brightness_scale;
GtkListBoxRow *bt_row;
GtkSwitch *bt_switch;
- GtkLabel *device_heading;
GtkListBox *device_listbox;
- GtkBox *device_section;
+ HdyPreferencesGroup *device_section;
GtkListBoxRow *dim_screen_row;
GtkSwitch *dim_screen_switch;
- GtkLabel *general_heading;
- GtkListBox *general_listbox;
- GtkBox *general_section;
+ HdyPreferencesGroup *general_section;
GtkListBoxRow *kbd_brightness_row;
CcBrightnessScale *kbd_brightness_scale;
GtkSizeGroup *level_sizegroup;
GtkListBoxRow *mobile_row;
GtkSwitch *mobile_switch;
HdyComboRow *power_button_row;
- GtkLabel *power_profile_heading;
GtkListBox *power_profile_listbox;
- GtkBox *power_profile_section;
- GtkLabel *power_saving_heading;
- GtkListBox *power_saving_listbox;
+ HdyPreferencesGroup *power_profile_section;
GtkSizeGroup *row_sizegroup;
GtkComboBox *suspend_on_battery_delay_combo;
GtkLabel *suspend_on_battery_delay_label;
@@ -259,7 +252,6 @@ up_client_changed (CcPowerPanel *self)
guint n_batteries;
gboolean on_ups;
g_autoptr(UpDevice) composite = NULL;
- g_autofree gchar *s = NULL;
battery_children = gtk_container_get_children (GTK_CONTAINER (self->battery_listbox));
for (l = battery_children; l != NULL; l = l->next)
@@ -390,10 +382,9 @@ up_client_changed (CcPowerPanel *self)
}
if (n_batteries > 1)
- s = g_strdup_printf ("<b>%s</b>", _("Batteries"));
+ hdy_preferences_group_set_title (self->battery_section, _("Batteries"));
else
- s = g_strdup_printf ("<b>%s</b>", _("Battery"));
- gtk_label_set_label (GTK_LABEL (self->battery_heading), s);
+ hdy_preferences_group_set_title (self->battery_section, _("Battery"));
if (!on_ups && n_batteries > 1)
add_battery (self, composite, TRUE);
@@ -1697,7 +1688,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, automatic_suspend_dialog);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, automatic_suspend_label);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, automatic_suspend_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_percentage_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_percentage_switch);
@@ -1708,13 +1698,10 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, bt_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, bt_switch);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, dim_screen_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, dim_screen_switch);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_heading);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale);
@@ -1722,11 +1709,8 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_section);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_saving_heading);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_saving_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, row_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_combo);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_label);
@@ -1755,11 +1739,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
static void
cc_power_panel_init (CcPowerPanel *self)
{
- g_autofree gchar *battery_label = NULL;
- g_autofree gchar *device_label = NULL;
- g_autofree gchar *power_profile_label = NULL;
- g_autofree gchar *power_saving_label = NULL;
- g_autofree gchar *general_label = NULL;
guint i;
g_resources_register (cc_power_get_resource ());
@@ -1776,46 +1755,19 @@ cc_power_panel_init (CcPowerPanel *self)
self->session_settings = g_settings_new ("org.gnome.desktop.session");
self->interface_settings = g_settings_new ("org.gnome.desktop.interface");
- battery_label = g_markup_printf_escaped ("<b>%s</b>", _("Battery"));
- gtk_label_set_markup (self->battery_heading, battery_label);
-
- gtk_list_box_set_header_func (self->battery_listbox,
- cc_list_box_update_header_func,
- NULL, NULL);
gtk_list_box_set_sort_func (self->battery_listbox,
(GtkListBoxSortFunc)battery_sort_func, NULL, NULL);
- device_label = g_markup_printf_escaped ("<b>%s</b>", _("Devices"));
- gtk_label_set_markup (self->device_heading, device_label);
-
- gtk_list_box_set_header_func (self->device_listbox,
- cc_list_box_update_header_func,
- NULL, NULL);
gtk_list_box_set_sort_func (self->device_listbox,
(GtkListBoxSortFunc)battery_sort_func, NULL, NULL);
- power_profile_label = g_strdup_printf ("<b>%s</b>", _("Power Mode"));
- gtk_label_set_markup (self->power_profile_heading, power_profile_label);
gtk_list_box_set_sort_func (self->power_profile_listbox,
perf_profile_list_box_sort,
NULL, NULL);
- gtk_list_box_set_header_func (self->power_profile_listbox,
- cc_list_box_update_header_func,
- NULL, NULL);
setup_power_profiles (self);
- power_saving_label = g_strdup_printf ("<b>%s</b>", _("Power Saving"));
- gtk_label_set_markup (self->power_saving_heading, power_saving_label);
- gtk_list_box_set_header_func (self->power_saving_listbox,
- cc_list_box_update_header_func,
- NULL, NULL);
setup_power_saving (self);
- general_label = g_markup_printf_escaped ("<b>%s</b>", _("Suspend & Power Button"));
- gtk_label_set_markup (self->general_heading, general_label);
- gtk_list_box_set_header_func (self->general_listbox,
- cc_list_box_update_header_func,
- NULL, NULL);
setup_general_section (self);
/* populate batteries */
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index 12df3aa4a..26d6ffddc 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -55,124 +55,60 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkScrolledWindow">
+ <object class="HdyPreferencesPage">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hscrollbar_policy">never</property>
- <child>
- <object class="HdyClamp">
- <property name="visible">True</property>
- <property name="margin_top">32</property>
- <property name="margin_bottom">32</property>
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <child>
- <object class="GtkBox" id="power_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">3</property>
- <property name="hexpand">True</property>
<child>
- <object class="GtkBox" id="battery_section">
+ <object class="HdyPreferencesGroup" id="battery_section">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin_bottom">32</property>
- <child>
- <object class="GtkLabel" id="battery_heading">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="halign">start</property>
- <property name="margin_bottom">12</property>
+ <property name="title" translatable="yes">Battery</property>
<accessibility>
<relation target="battery_listbox" type="label-for"/>
</accessibility>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="shadow-type">in</property>
<child>
<object class="GtkListBox" id="battery_listbox">
<property name="visible">True</property>
<property name="selection-mode">none</property>
<signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
<accessibility>
- <relation target="battery_heading" type="labelled-by"/>
+ <relation target="battery_section" type="labelled-by"/>
</accessibility>
+ <style>
+ <class name="content"/>
+ </style>
</object>
</child>
- </object>
- </child>
</object>
</child>
<child>
- <object class="GtkBox" id="device_section">
+ <object class="HdyPreferencesGroup" id="device_section">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">32</property>
- <child>
- <object class="GtkLabel" id="device_heading">
- <property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0</property>
- <property name="use-markup">True</property>
- <property name="halign">start</property>
- <property name="margin_bottom">12</property>
+ <property name="title" translatable="yes">Devices</property>
<accessibility>
<relation target="device_listbox" type="label-for"/>
</accessibility>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="shadow-type">in</property>
<child>
<object class="GtkListBox" id="device_listbox">
<property name="visible">True</property>
<property name="selection-mode">none</property>
<signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
<accessibility>
- <relation target="device_heading" type="labelled-by"/>
+ <relation target="device_section" type="labelled-by"/>
</accessibility>
+ <style>
+ <class name="content"/>
+ </style>
</object>
</child>
- </object>
- </child>
</object>
</child>
<child>
- <object class="GtkBox" id="power_profile_section">
+ <object class="HdyPreferencesGroup" id="power_profile_section">
<property name="visible">False</property>
- <property name="orientation">vertical</property>
- <property name="margin_bottom">32</property>
- <child>
- <object class="GtkLabel" id="power_profile_heading">
- <property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0</property>
- <property name="use-markup">True</property>
- <property name="halign">start</property>
+ <property name="title" translatable="yes">Power Mode</property>
+ <property name="description" translatable="yes">Affects system performance and power usage.</property>
<accessibility>
<relation target="power_profile_listbox" type="label-for"/>
</accessibility>
- </object>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="margin-bottom">6</property>
- <property name="label" translatable="yes">Affects system performance and power usage.</property>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="shadow-type">in</property>
<child>
<object class="GtkListBox" id="power_profile_listbox">
<property name="visible">True</property>
@@ -180,45 +116,19 @@
<signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
<signal name="row-activated" handler="power_profiles_row_activated_cb" object="CcPowerPanel" swapped="yes"/>
<accessibility>
- <relation target="device_heading" type="labelled-by"/>
+ <relation target="power_profile_section" type="labelled-by"/>
</accessibility>
+ <style>
+ <class name="content"/>
+ </style>
</object>
</child>
- </object>
- </child>
</object>
</child>
<child>
- <object class="GtkBox">
+ <object class="HdyPreferencesGroup" id="power_saving_section">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin_bottom">32</property>
- <child>
- <object class="GtkLabel" id="power_saving_heading">
- <property name="visible">True</property>
- <property name="ellipsize">end</property>
- <property name="xalign">0</property>
- <property name="use-markup">True</property>
- <property name="halign">start</property>
- <property name="margin_bottom">12</property>
- <accessibility>
- <relation target="power_saving_listbox" type="label-for"/>
- </accessibility>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="shadow-type">in</property>
- <child>
- <object class="GtkListBox" id="power_saving_listbox">
- <property name="visible">True</property>
- <property name="selection-mode">none</property>
- <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
- <signal name="row-activated" handler="power_saving_listbox_row_activated_cb" object="CcPowerPanel" swapped="yes"/>
- <accessibility>
- <relation target="power_saving_heading" type="labelled-by"/>
- </accessibility>
+ <property name="title" translatable="yes">Power Saving</property>
<child>
<object class="HdyActionRow" id="brightness_row">
<property name="visible">True</property>
@@ -349,41 +259,12 @@
</child>
</object>
</child>
- </object>
- </child>
- </object>
- </child>
</object>
</child>
<child>
- <object class="GtkBox" id="general_section">
+ <object class="HdyPreferencesGroup" id="general_section">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">32</property>
- <child>
- <object class="GtkLabel" id="general_heading">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="halign">start</property>
- <property name="margin_bottom">12</property>
- <accessibility>
- <relation target="general_listbox" type="label-for"/>
- </accessibility>
- </object>
- </child>
- <child>
- <object class="GtkFrame">
- <property name="visible">True</property>
- <property name="shadow-type">in</property>
- <child>
- <object class="GtkListBox" id="general_listbox">
- <property name="visible">True</property>
- <property name="selection-mode">none</property>
- <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
- <accessibility>
- <relation target="general_heading" type="labelled-by"/>
- </accessibility>
+ <property name="title" translatable="yes">Suspend &amp; Power Button</property>
<child>
<object class="HdyComboRow" id="power_button_row">
<property name="visible">False</property>
@@ -406,16 +287,8 @@
</child>
</object>
</child>
- </object>
- </child>
- </object>
- </child>
</object>
</child>
- </object>
- </child>
- </object>
- </child>
</object>
</child>
</template>
--
2.32.0
From 58480754efd5fdc66db0940ce5c19abfbd2158b6 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Thu, 7 Jan 2021 14:37:56 +0100
Subject: [PATCH 08/33] power: Fix the indentation
The indentation was purposefully left incorrect in the previous commits
to ease the review of the actual changes, this fixes it.
---
panels/power/cc-power-panel.ui | 426 ++++++++++++++++-----------------
1 file changed, 213 insertions(+), 213 deletions(-)
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index 26d6ffddc..8e999c6d5 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -57,238 +57,238 @@
<child>
<object class="HdyPreferencesPage">
<property name="visible">True</property>
+ <child>
+ <object class="HdyPreferencesGroup" id="battery_section">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Battery</property>
+ <accessibility>
+ <relation target="battery_listbox" type="label-for"/>
+ </accessibility>
+ <child>
+ <object class="GtkListBox" id="battery_listbox">
+ <property name="visible">True</property>
+ <property name="selection-mode">none</property>
+ <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
+ <accessibility>
+ <relation target="battery_section" type="labelled-by"/>
+ </accessibility>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyPreferencesGroup" id="device_section">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Devices</property>
+ <accessibility>
+ <relation target="device_listbox" type="label-for"/>
+ </accessibility>
+ <child>
+ <object class="GtkListBox" id="device_listbox">
+ <property name="visible">True</property>
+ <property name="selection-mode">none</property>
+ <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
+ <accessibility>
+ <relation target="device_section" type="labelled-by"/>
+ </accessibility>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyPreferencesGroup" id="power_profile_section">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">Power Mode</property>
+ <property name="description" translatable="yes">Affects system performance and power usage.</property>
+ <accessibility>
+ <relation target="power_profile_listbox" type="label-for"/>
+ </accessibility>
+ <child>
+ <object class="GtkListBox" id="power_profile_listbox">
+ <property name="visible">True</property>
+ <property name="selection-mode">none</property>
+ <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
+ <signal name="row-activated" handler="power_profiles_row_activated_cb" object="CcPowerPanel" swapped="yes"/>
+ <accessibility>
+ <relation target="power_profile_section" type="labelled-by"/>
+ </accessibility>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyPreferencesGroup" id="power_saving_section">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Power Saving</property>
+ <child>
+ <object class="HdyActionRow" id="brightness_row">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">_Screen Brightness</property>
+ <property name="use_underline">True</property>
<child>
- <object class="HdyPreferencesGroup" id="battery_section">
+ <object class="CcBrightnessScale" id="brightness_scale">
<property name="visible">True</property>
- <property name="title" translatable="yes">Battery</property>
- <accessibility>
- <relation target="battery_listbox" type="label-for"/>
- </accessibility>
- <child>
- <object class="GtkListBox" id="battery_listbox">
- <property name="visible">True</property>
- <property name="selection-mode">none</property>
- <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
- <accessibility>
- <relation target="battery_section" type="labelled-by"/>
- </accessibility>
- <style>
- <class name="content"/>
- </style>
- </object>
- </child>
+ <property name="valign">center</property>
+ <property name="expand">True</property>
+ <property name="device">screen</property>
+ <signal name="notify::has-brightness" handler="has_brightness_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="als_row">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Automatic Brightness</property>
<child>
- <object class="HdyPreferencesGroup" id="device_section">
+ <object class="GtkSwitch" id="als_switch">
<property name="visible">True</property>
- <property name="title" translatable="yes">Devices</property>
- <accessibility>
- <relation target="device_listbox" type="label-for"/>
- </accessibility>
- <child>
- <object class="GtkListBox" id="device_listbox">
- <property name="visible">True</property>
- <property name="selection-mode">none</property>
- <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
- <accessibility>
- <relation target="device_section" type="labelled-by"/>
- </accessibility>
- <style>
- <class name="content"/>
- </style>
- </object>
- </child>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="als_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="kbd_brightness_row">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">_Keyboard Brightness</property>
+ <property name="use_underline">True</property>
<child>
- <object class="HdyPreferencesGroup" id="power_profile_section">
- <property name="visible">False</property>
- <property name="title" translatable="yes">Power Mode</property>
- <property name="description" translatable="yes">Affects system performance and power usage.</property>
- <accessibility>
- <relation target="power_profile_listbox" type="label-for"/>
- </accessibility>
- <child>
- <object class="GtkListBox" id="power_profile_listbox">
- <property name="visible">True</property>
- <property name="selection-mode">none</property>
- <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
- <signal name="row-activated" handler="power_profiles_row_activated_cb" object="CcPowerPanel" swapped="yes"/>
- <accessibility>
- <relation target="power_profile_section" type="labelled-by"/>
- </accessibility>
- <style>
- <class name="content"/>
- </style>
- </object>
- </child>
+ <object class="CcBrightnessScale" id="kbd_brightness_scale">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <property name="expand">True</property>
+ <property name="device">kbd</property>
+ <signal name="notify::has-brightness" handler="has_kbd_brightness_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="dim_screen_row">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Dim Screen When Inactive</property>
+ <property name="activatable_widget">dim_screen_switch</property>
<child>
- <object class="HdyPreferencesGroup" id="power_saving_section">
+ <object class="GtkSwitch" id="dim_screen_switch">
<property name="visible">True</property>
- <property name="title" translatable="yes">Power Saving</property>
- <child>
- <object class="HdyActionRow" id="brightness_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Screen Brightness</property>
- <property name="use_underline">True</property>
- <child>
- <object class="CcBrightnessScale" id="brightness_scale">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <property name="device">screen</property>
- <signal name="notify::has-brightness" handler="has_brightness_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="als_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Automatic Brightness</property>
- <child>
- <object class="GtkSwitch" id="als_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="als_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="kbd_brightness_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Keyboard Brightness</property>
- <property name="use_underline">True</property>
- <child>
- <object class="CcBrightnessScale" id="kbd_brightness_scale">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <property name="device">kbd</property>
- <signal name="notify::has-brightness" handler="has_kbd_brightness_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="dim_screen_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Dim Screen When Inactive</property>
- <property name="activatable_widget">dim_screen_switch</property>
- <child>
- <object class="GtkSwitch" id="dim_screen_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyComboRow" id="blank_screen_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Blank Screen</property>
- <property name="use_underline">True</property>
- <signal name="notify::selected-index" handler="blank_screen_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="automatic_suspend_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Automatic Suspend</property>
- <property name="use_underline">True</property>
- <property name="activatable">True</property>
- <signal name="activated" handler="automatic_suspend_row_activated_cb" swapped="yes"/>
- <child>
- <object class="GtkLabel" id="automatic_suspend_label">
- <property name="visible">True</property>
- <property name="halign">end</property>
- <signal name="mnemonic-activate" handler="automatic_suspend_label_mnemonic_activate_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="wifi_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Wi-Fi</property>
- <property name="subtitle" translatable="yes">Wi-Fi can be turned off to save power.</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">wifi_switch</property>
- <child>
- <object class="GtkSwitch" id="wifi_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="wifi_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="mobile_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Mobile Broadband</property>
- <property name="subtitle" translatable="yes">Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power.</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">mobile_switch</property>
- <child>
- <object class="GtkSwitch" id="mobile_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="mobile_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="bt_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Bluetooth</property>
- <property name="subtitle" translatable="yes">Bluetooth can be turned off to save power.</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">bt_switch</property>
- <child>
- <object class="GtkSwitch" id="bt_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="bt_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
+ <property name="valign">center</property>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyComboRow" id="blank_screen_row">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">_Blank Screen</property>
+ <property name="use_underline">True</property>
+ <signal name="notify::selected-index" handler="blank_screen_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="automatic_suspend_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">_Automatic Suspend</property>
+ <property name="use_underline">True</property>
+ <property name="activatable">True</property>
+ <signal name="activated" handler="automatic_suspend_row_activated_cb" swapped="yes"/>
+ <child>
+ <object class="GtkLabel" id="automatic_suspend_label">
+ <property name="visible">True</property>
+ <property name="halign">end</property>
+ <signal name="mnemonic-activate" handler="automatic_suspend_label_mnemonic_activate_cb" object="CcPowerPanel" swapped="yes"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="wifi_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">_Wi-Fi</property>
+ <property name="subtitle" translatable="yes">Wi-Fi can be turned off to save power.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">wifi_switch</property>
+ <child>
+ <object class="GtkSwitch" id="wifi_switch">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="wifi_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="mobile_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">_Mobile Broadband</property>
+ <property name="subtitle" translatable="yes">Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">mobile_switch</property>
+ <child>
+ <object class="GtkSwitch" id="mobile_switch">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="mobile_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="bt_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">_Bluetooth</property>
+ <property name="subtitle" translatable="yes">Bluetooth can be turned off to save power.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">bt_switch</property>
<child>
- <object class="HdyPreferencesGroup" id="general_section">
+ <object class="GtkSwitch" id="bt_switch">
<property name="visible">True</property>
- <property name="title" translatable="yes">Suspend &amp; Power Button</property>
- <child>
- <object class="HdyComboRow" id="power_button_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">Po_wer Button Behavior</property>
- <property name="use_underline">True</property>
- <signal name="notify::selected-index" handler="power_button_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="battery_percentage_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">Show Battery _Percentage</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">battery_percentage_switch</property>
- <child>
- <object class="GtkSwitch" id="battery_percentage_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- </object>
- </child>
- </object>
- </child>
+ <property name="valign">center</property>
+ <signal name="notify::active" handler="bt_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="HdyPreferencesGroup" id="general_section">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Suspend &amp; Power Button</property>
+ <child>
+ <object class="HdyComboRow" id="power_button_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">Po_wer Button Behavior</property>
+ <property name="use_underline">True</property>
+ <signal name="notify::selected-index" handler="power_button_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
+ </object>
+ </child>
+ <child>
+ <object class="HdyActionRow" id="battery_percentage_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">Show Battery _Percentage</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">battery_percentage_switch</property>
+ <child>
+ <object class="GtkSwitch" id="battery_percentage_switch">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</child>
</template>
--
2.32.0
From 036545ebc5b3deba1d4bb4ac82dc102413804e83 Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Fri, 8 Jan 2021 16:29:18 +0100
Subject: [PATCH 09/33] power: Hide the icon of the battery row when unused
This gives more room to the label.
---
panels/power/cc-battery-row.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/panels/power/cc-battery-row.c b/panels/power/cc-battery-row.c
index 55d7584d7..f6faca0c1 100644
--- a/panels/power/cc-battery-row.c
+++ b/panels/power/cc-battery-row.c
@@ -275,7 +275,12 @@ cc_battery_row_new (UpDevice *device,
/* Icon */
if (is_kind_battery && icon_name != NULL && icon_name[0] != '\0')
- gtk_image_set_from_icon_name (self->icon, icon_name, GTK_ICON_SIZE_BUTTON);
+ {
+ gtk_image_set_from_icon_name (self->icon, icon_name, GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (GTK_WIDGET (self->icon));
+ }
+ else
+ gtk_widget_hide (GTK_WIDGET (self->icon));
/* Percentage label */
if (battery_level == UP_DEVICE_LEVEL_NONE)
@@ -347,4 +352,4 @@ UpDeviceKind
cc_battery_row_get_kind (CcBatteryRow *self)
{
return self->kind;
-}
\ No newline at end of file
+}
--
2.32.0
From c4849778de730f37618120dbdd37f30515ecc77a Mon Sep 17 00:00:00 2001
From: Adrien Plazas <kekun.plazas@laposte.net>
Date: Fri, 8 Jan 2021 16:30:12 +0100
Subject: [PATCH 10/33] power: Ellipsize the labels of the battery row
This helps the window fit any size, including the narrow one of phones.
---
panels/power/cc-battery-row.ui | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/panels/power/cc-battery-row.ui b/panels/power/cc-battery-row.ui
index 932e5d39f..dec97a9fe 100644
--- a/panels/power/cc-battery-row.ui
+++ b/panels/power/cc-battery-row.ui
@@ -28,6 +28,8 @@
<child>
<object class="GtkLabel" id="name_label">
<property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
</object>
</child>
<child>
@@ -79,6 +81,8 @@
<child>
<object class="GtkLabel" id="details_label">
<property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ <property name="xalign">0</property>
</object>
</child>
<child>
--
2.32.0
From 33d672d634a9e1d8a2cfa74dc4d503fb6f170ea1 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 15 Jul 2021 13:08:05 +0200
Subject: [PATCH 11/33] power: Fix keynav not working
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
gnome-control-center/panels/power/cc-power-panel.c: In function ‘keynav_failed_cb’:
gnome-control-center/panels/power/cc-power-panel.c:892:50: warning: statement with no effect [-Wunused-value]
892 | direction == GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
---
panels/power/cc-power-panel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 96558c778..d31d16d22 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -888,7 +888,7 @@ keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *lis
if (direction != GTK_DIR_UP && direction != GTK_DIR_DOWN)
return FALSE;
- direction == GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD;
+ direction = GTK_DIR_UP ? GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD;
return gtk_widget_child_focus (GTK_WIDGET (self), direction);
}
--
2.32.0
From 35b621ce5191461b16eefcb5e677496c0c48638c Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 15 Jul 2021 13:46:19 +0200
Subject: [PATCH 12/33] power: Simplify emptying listbox
We do that in a few places.
---
panels/power/cc-power-panel.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index d31d16d22..5d57afe59 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -242,25 +242,29 @@ add_device (CcPowerPanel *self, UpDevice *device)
}
static void
-up_client_changed (CcPowerPanel *self)
+empty_listbox (GtkListBox *listbox)
{
- g_autoptr(GList) battery_children = NULL;
- g_autoptr(GList) device_children = NULL;
+ g_autoptr(GList) children = NULL;
GList *l;
+
+ children = gtk_container_get_children (GTK_CONTAINER (listbox));
+ for (l = children; l != NULL; l = l->next)
+ gtk_container_remove (GTK_CONTAINER (listbox), l->data);
+}
+
+static void
+up_client_changed (CcPowerPanel *self)
+{
gint i;
UpDeviceKind kind;
guint n_batteries;
gboolean on_ups;
g_autoptr(UpDevice) composite = NULL;
- battery_children = gtk_container_get_children (GTK_CONTAINER (self->battery_listbox));
- for (l = battery_children; l != NULL; l = l->next)
- gtk_container_remove (GTK_CONTAINER (self->battery_listbox), l->data);
+ empty_listbox (self->battery_listbox);
gtk_widget_hide (GTK_WIDGET (self->battery_section));
- device_children = gtk_container_get_children (GTK_CONTAINER (self->device_listbox));
- for (l = device_children; l != NULL; l = l->next)
- gtk_container_remove (GTK_CONTAINER (self->device_listbox), l->data);
+ empty_listbox (self->device_listbox);
gtk_widget_hide (GTK_WIDGET (self->device_section));
#ifdef TEST_FAKE_DEVICES
--
2.32.0
From 7915830b4d8b691f4def35c83c06a658f5b14ac1 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 15 Jul 2021 14:39:58 +0200
Subject: [PATCH 13/33] power: Add new power profile info row widget
---
panels/power/cc-power-panel.c | 1 +
panels/power/cc-power-profile-info-row.c | 67 ++++++++++
panels/power/cc-power-profile-info-row.h | 36 ++++++
panels/power/cc-power-profile-info-row.ui | 44 +++++++
panels/power/icons/info-symbolic.svg | 150 ++++++++++++++++++++++
panels/power/icons/meson.build | 5 +
panels/power/meson.build | 1 +
panels/power/power.gresource.xml | 1 +
8 files changed, 305 insertions(+)
create mode 100644 panels/power/cc-power-profile-info-row.c
create mode 100644 panels/power/cc-power-profile-info-row.h
create mode 100644 panels/power/cc-power-profile-info-row.ui
create mode 100644 panels/power/icons/info-symbolic.svg
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 5d57afe59..8acf62dee 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -35,6 +35,7 @@
#include "cc-battery-row.h"
#include "cc-brightness-scale.h"
#include "cc-power-profile-row.h"
+#include "cc-power-profile-info-row.h"
#include "cc-power-panel.h"
#include "cc-power-resources.h"
#include "cc-util.h"
diff --git a/panels/power/cc-power-profile-info-row.c b/panels/power/cc-power-profile-info-row.c
new file mode 100644
index 000000000..92bb78834
--- /dev/null
+++ b/panels/power/cc-power-profile-info-row.c
@@ -0,0 +1,67 @@
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* cc-list-row.c
+ *
+ * Copyright 2020 Red Hat Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author(s):
+ * Bastien Nocera <hadess@hadess.net>
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN "cc-power-profile-info-row"
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include "cc-power-profile-info-row.h"
+
+struct _CcPowerProfileInfoRow
+{
+ GtkListBoxRow parent_instance;
+
+ GtkLabel *title_label;
+};
+
+G_DEFINE_TYPE (CcPowerProfileInfoRow, cc_power_profile_info_row, GTK_TYPE_LIST_BOX_ROW)
+
+static void
+cc_power_profile_info_row_class_init (CcPowerProfileInfoRowClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/power/cc-power-profile-info-row.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, CcPowerProfileInfoRow, title_label);
+}
+
+static void
+cc_power_profile_info_row_init (CcPowerProfileInfoRow *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+CcPowerProfileInfoRow *
+cc_power_profile_info_row_new (const char *text)
+{
+ CcPowerProfileInfoRow *self;
+
+ self = g_object_new (CC_TYPE_POWER_PROFILE_INFO_ROW, NULL);
+ gtk_label_set_markup (self->title_label, text);
+
+ return self;
+}
diff --git a/panels/power/cc-power-profile-info-row.h b/panels/power/cc-power-profile-info-row.h
new file mode 100644
index 000000000..52d055ab2
--- /dev/null
+++ b/panels/power/cc-power-profile-info-row.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* cc-list-row.h
+ *
+ * Copyright 2020 Red Hat Inc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author(s):
+ * Bastien Nocera <hadess@hadess.net>
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define CC_TYPE_POWER_PROFILE_INFO_ROW (cc_power_profile_info_row_get_type())
+G_DECLARE_FINAL_TYPE (CcPowerProfileInfoRow, cc_power_profile_info_row, CC, POWER_PROFILE_INFO_ROW, GtkListBoxRow)
+
+CcPowerProfileInfoRow *cc_power_profile_info_row_new (const char *text);
+
+G_END_DECLS
diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui
new file mode 100644
index 000000000..d9291ff16
--- /dev/null
+++ b/panels/power/cc-power-profile-info-row.ui
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <template class="CcPowerProfileInfoRow" parent="GtkListBoxRow">
+ <property name="activatable">False</property>
+ <property name="selectable">False</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-top">8</property>
+ <property name="margin-bottom">8</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="icon_image">
+ <property name="visible">True</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">18</property>
+ <property name="icon-name">info-symbolic</property>
+ <property name="icon-size">5</property>
+ <style>
+ <class name="power-profile"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title_label">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="expand">True</property>
+ <property name="use-markup">True</property>
+ <property name="use-underline">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="margin-end">6</property>
+ <property name="wrap">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/panels/power/icons/info-symbolic.svg b/panels/power/icons/info-symbolic.svg
new file mode 100644
index 000000000..502a98a50
--- /dev/null
+++ b/panels/power/icons/info-symbolic.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <filter id="a" height="100%" width="100%" x="0%" y="0%">
+ <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
+ </filter>
+ <mask id="b">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
+ </g>
+ </mask>
+ <clipPath id="c">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="d">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="e">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="f">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="g">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="h">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="i">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="j">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="k">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="l">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="m">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="n">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="o">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="p">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
+ </g>
+ </mask>
+ <clipPath id="q">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="r">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="s">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="t">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.4"/>
+ </g>
+ </mask>
+ <clipPath id="u">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="v">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.4"/>
+ </g>
+ </mask>
+ <clipPath id="w">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="x">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="y">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="z">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="A">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <g clip-path="url(#c)" mask="url(#b)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 562.460938 212.058594 h 10.449218 c -1.183594 0.492187 -1.296875 2.460937 0 3 h -10.449218 z m 0 0" fill="#2e3436"/>
+ </g>
+ <path d="m 7.90625 1 c -3.828125 0.050781 -6.90625 3.171875 -6.90625 7 c 0 3.867188 3.132812 7 7 7 s 7 -3.132812 7 -7 s -3.132812 -7 -7 -7 c -0.03125 0 -0.0625 0 -0.09375 0 z m -0.40625 3 h 1 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 h -1 c -0.277344 0 -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m -0.5 3 h 2 v 5 h -2 z m 0 0" fill="#2e3436"/>
+ <g clip-path="url(#e)" mask="url(#d)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 16 632 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#g)" mask="url(#f)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 17 631 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#i)" mask="url(#h)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 18 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#k)" mask="url(#j)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 16 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#m)" mask="url(#l)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 17 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#o)" mask="url(#n)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 19 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#q)" mask="url(#p)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 136 660 v 7 h 7 v -7 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#s)" mask="url(#r)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 199 642 h 3 v 12 h -3 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#u)" mask="url(#t)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 209.5 144.160156 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#w)" mask="url(#v)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 206.5 144.160156 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#y)" mask="url(#x)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 229.5 143.160156 c -0.546875 0 -1 0.457032 -1 1 c 0 0.546875 0.453125 1 1 1 s 1 -0.453125 1 -1 c 0 -0.542968 -0.453125 -1 -1 -1 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#A)" mask="url(#z)" transform="matrix(1 0 0 1 -660 -222)">
+ <path d="m 226.453125 143.160156 c -0.519531 0 -0.953125 0.433594 -0.953125 0.953125 v 0.09375 c 0 0.519531 0.433594 0.953125 0.953125 0.953125 h 0.09375 c 0.519531 0 0.953125 -0.433594 0.953125 -0.953125 v -0.09375 c 0 -0.519531 -0.433594 -0.953125 -0.953125 -0.953125 z m 0 0" fill="#2e3436"/>
+ </g>
+</svg>
diff --git a/panels/power/icons/meson.build b/panels/power/icons/meson.build
index 8165371ea..c56bc65b7 100644
--- a/panels/power/icons/meson.build
+++ b/panels/power/icons/meson.build
@@ -13,3 +13,8 @@ foreach icon_size: icon_sizes
install_dir: join_paths(control_center_icondir, 'hicolor', icon_size, 'apps')
)
endforeach
+
+install_data(
+ 'info-symbolic.svg',
+ install_dir: join_paths(control_center_icondir, 'hicolor', 'scalable', 'status')
+)
diff --git a/panels/power/meson.build b/panels/power/meson.build
index 625059dd2..af04b98ed 100644
--- a/panels/power/meson.build
+++ b/panels/power/meson.build
@@ -22,6 +22,7 @@ sources = files(
'cc-brightness-scale.c',
'cc-power-panel.c',
'cc-power-profile-row.c',
+ 'cc-power-profile-info-row.c'
)
sources += gnome.mkenums_simple(
diff --git a/panels/power/power.gresource.xml b/panels/power/power.gresource.xml
index 31e92b415..5a33c8e60 100644
--- a/panels/power/power.gresource.xml
+++ b/panels/power/power.gresource.xml
@@ -4,6 +4,7 @@
<file preprocess="xml-stripblanks">cc-battery-row.ui</file>
<file preprocess="xml-stripblanks">cc-power-panel.ui</file>
<file preprocess="xml-stripblanks">cc-power-profile-row.ui</file>
+ <file preprocess="xml-stripblanks">cc-power-profile-info-row.ui</file>
<file>battery-levels.css</file>
<file>power-profiles.css</file>
</gresource>
--
2.32.0
From 1a80fda8cdbd2226a5663f0fa572dd72210722a6 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 2 Apr 2021 13:10:19 +0200
Subject: [PATCH 14/33] power: Handle new power-profiles-daemon API
Handle the new PerformanceDegraded property to replace
PerformanceInhibited.
---
panels/power/cc-power-panel.c | 53 +++++++++++++++++++++++++++++++---
panels/power/cc-power-panel.ui | 11 +++++++
2 files changed, 60 insertions(+), 4 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 8acf62dee..51196a8c4 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -89,6 +89,7 @@ struct _CcPowerPanel
GtkSwitch *mobile_switch;
HdyComboRow *power_button_row;
GtkListBox *power_profile_listbox;
+ GtkListBox *power_profile_info_listbox;
HdyPreferencesGroup *power_profile_section;
GtkSizeGroup *row_sizegroup;
GtkComboBox *suspend_on_battery_delay_combo;
@@ -119,6 +120,7 @@ struct _CcPowerPanel
guint power_profiles_prop_id;
CcPowerProfileRow *power_profiles_row[NUM_CC_POWER_PROFILES];
gboolean power_profiles_in_update;
+ gboolean has_performance_degraded;
#ifdef HAVE_NETWORK_MANAGER
NMClient *nm_client;
@@ -1365,6 +1367,37 @@ performance_profile_set_inhibited (CcPowerPanel *self,
cc_power_profile_row_set_performance_inhibited (row, performance_inhibited);
}
+static void
+performance_profile_set_degraded (CcPowerPanel *self)
+{
+ g_autoptr(GVariant) variant = NULL;
+ const char *degraded, *text;
+ CcPowerProfileInfoRow *row;
+
+ empty_listbox (self->power_profile_info_listbox);
+ gtk_widget_hide (GTK_WIDGET (self->power_profile_info_listbox));
+
+ variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded");
+ if (!variant)
+ return;
+ degraded = g_variant_get_string (variant, NULL);
+ if (*degraded == '\0')
+ return;
+
+ gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox));
+
+ if (g_str_equal (degraded, "high-operating-temperature"))
+ text = _("Performance mode temporarily disabled due to high operating temperature.");
+ else if (g_str_equal (degraded, "lap-detected"))
+ text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore.");
+ else
+ text = _("Performance mode temporarily disabled.");
+
+ row = cc_power_profile_info_row_new (text);
+ gtk_widget_show (GTK_WIDGET (row));
+ gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row));
+}
+
static void
power_profiles_row_activated_cb (GtkListBox *box,
GtkListBoxRow *box_row,
@@ -1420,8 +1453,13 @@ power_profiles_properties_changed_cb (CcPowerPanel *self,
{
if (g_strcmp0 (key, "PerformanceInhibited") == 0)
{
- performance_profile_set_inhibited (self,
- g_variant_get_string (value, NULL));
+ if (!self->has_performance_degraded)
+ performance_profile_set_inhibited (self,
+ g_variant_get_string (value, NULL));
+ }
+ else if (g_strcmp0 (key, "PerformanceDegraded") == 0)
+ {
+ performance_profile_set_degraded (self);
}
else if (g_strcmp0 (key, "ActiveProfile") == 0)
{
@@ -1504,7 +1542,8 @@ setup_power_profiles (CcPowerPanel *self)
g_autoptr(GVariant) props = NULL;
guint i, num_children;
g_autoptr(GError) error = NULL;
- const char *performance_inhibited;
+ const char *performance_inhibited = NULL;
+ const char *performance_degraded;
const char *active_profile;
g_autoptr(GVariant) profiles = NULL;
GtkRadioButton *last_button;
@@ -1557,7 +1596,12 @@ setup_power_profiles (CcPowerPanel *self)
gtk_widget_show (GTK_WIDGET (self->power_profile_section));
props = g_variant_get_child_value (variant, 0);
- performance_inhibited = variant_lookup_string (props, "PerformanceInhibited");
+ performance_degraded = variant_lookup_string (props, "PerformanceDegraded");
+ self->has_performance_degraded = performance_degraded != NULL;
+ if (performance_degraded == NULL)
+ performance_inhibited = variant_lookup_string (props, "PerformanceInhibited");
+ else
+ performance_profile_set_degraded (self);
active_profile = variant_lookup_string (props, "ActiveProfile");
last_button = NULL;
@@ -1715,6 +1759,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
+ gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_info_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, row_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_combo);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index 8e999c6d5..d8283c556 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -123,6 +123,17 @@
</style>
</object>
</child>
+ <child>
+ <object class="GtkListBox" id="power_profile_info_listbox">
+ <property name="visible">False</property>
+ <property name="selection-mode">none</property>
+ <property name="margin_top">12</property>
+ <signal name="keynav-failed" handler="keynav_failed_cb" object="CcPowerPanel" swapped="yes"/>
+ <style>
+ <class name="content"/>
+ </style>
+ </object>
+ </child>
</object>
</child>
<child>
--
2.32.0
From 7254da88faa5cebd43db735746eb20b2b548a462 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 16 Jul 2021 10:00:12 +0200
Subject: [PATCH 15/33] power: Prepare for adding more power profile info boxes
Rename and re-indent the code that adds the power profile info boxes to
prepare for adding more info boxes when needed.
---
panels/power/cc-power-panel.c | 46 ++++++++++++++++++-----------------
1 file changed, 24 insertions(+), 22 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 51196a8c4..1869be065 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1368,34 +1368,35 @@ performance_profile_set_inhibited (CcPowerPanel *self,
}
static void
-performance_profile_set_degraded (CcPowerPanel *self)
+power_profile_update_info_boxes (CcPowerPanel *self)
{
- g_autoptr(GVariant) variant = NULL;
- const char *degraded, *text;
+ g_autoptr(GVariant) degraded_variant = NULL;
+ const char *degraded = NULL;
CcPowerProfileInfoRow *row;
empty_listbox (self->power_profile_info_listbox);
gtk_widget_hide (GTK_WIDGET (self->power_profile_info_listbox));
- variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded");
- if (!variant)
- return;
- degraded = g_variant_get_string (variant, NULL);
- if (*degraded == '\0')
- return;
+ degraded_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded");
+ if (degraded_variant)
+ degraded = g_variant_get_string (degraded_variant, NULL);
+ if (degraded && *degraded != '\0')
+ {
+ const char *text;
- gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox));
+ gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox));
- if (g_str_equal (degraded, "high-operating-temperature"))
- text = _("Performance mode temporarily disabled due to high operating temperature.");
- else if (g_str_equal (degraded, "lap-detected"))
- text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore.");
- else
- text = _("Performance mode temporarily disabled.");
+ if (g_str_equal (degraded, "high-operating-temperature"))
+ text = _("Performance mode temporarily disabled due to high operating temperature.");
+ else if (g_str_equal (degraded, "lap-detected"))
+ text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore.");
+ else
+ text = _("Performance mode temporarily disabled.");
- row = cc_power_profile_info_row_new (text);
- gtk_widget_show (GTK_WIDGET (row));
- gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row));
+ row = cc_power_profile_info_row_new (text);
+ gtk_widget_show (GTK_WIDGET (row));
+ gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row));
+ }
}
static void
@@ -1459,7 +1460,7 @@ power_profiles_properties_changed_cb (CcPowerPanel *self,
}
else if (g_strcmp0 (key, "PerformanceDegraded") == 0)
{
- performance_profile_set_degraded (self);
+ power_profile_update_info_boxes (self);
}
else if (g_strcmp0 (key, "ActiveProfile") == 0)
{
@@ -1600,8 +1601,6 @@ setup_power_profiles (CcPowerPanel *self)
self->has_performance_degraded = performance_degraded != NULL;
if (performance_degraded == NULL)
performance_inhibited = variant_lookup_string (props, "PerformanceInhibited");
- else
- performance_profile_set_degraded (self);
active_profile = variant_lookup_string (props, "ActiveProfile");
last_button = NULL;
@@ -1649,6 +1648,9 @@ setup_power_profiles (CcPowerPanel *self)
self->power_profiles_prop_id = g_signal_connect_object (G_OBJECT (self->power_profiles_proxy), "g-properties-changed",
G_CALLBACK (power_profiles_properties_changed_cb), self, G_CONNECT_SWAPPED);
+
+ if (self->has_performance_degraded)
+ power_profile_update_info_boxes (self);
}
static void
--
2.32.0
From 173904b7eeea145c38065939a1dd8a408745f3c9 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 16 Jul 2021 10:07:28 +0200
Subject: [PATCH 16/33] power: Move variant_lookup_string() helper function
---
panels/power/cc-power-panel.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 1869be065..4633627c2 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1343,6 +1343,18 @@ setup_power_saving (CcPowerPanel *self)
#endif
}
+static const char *
+variant_lookup_string (GVariant *dict,
+ const char *key)
+{
+ GVariant *variant;
+
+ variant = g_variant_lookup_value (dict, key, G_VARIANT_TYPE_STRING);
+ if (!variant)
+ return NULL;
+ return g_variant_get_string (variant, NULL);
+}
+
static void
performance_profile_set_active (CcPowerPanel *self,
const char *profile_str)
@@ -1427,18 +1439,6 @@ perf_profile_list_box_sort (GtkListBoxRow *row1,
return 0;
}
-static const char *
-variant_lookup_string (GVariant *dict,
- const char *key)
-{
- GVariant *variant;
-
- variant = g_variant_lookup_value (dict, key, G_VARIANT_TYPE_STRING);
- if (!variant)
- return NULL;
- return g_variant_get_string (variant, NULL);
-}
-
static void
power_profiles_properties_changed_cb (CcPowerPanel *self,
GVariant *changed_properties,
--
2.32.0
From f49c47787de81fa39f100f3903d2d886905cd4c7 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 16 Jul 2021 11:01:52 +0200
Subject: [PATCH 17/33] power: Show power profile info boxes for profile holds
Applications can request that power-profiles-daemon "hold" a particular
power profile for the duration of a task or event, such as launching a
taxing application, or saving power because of low battery.
Show those holds in the same type of info boxes we already use to show
"degraded" performance.
See https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/merge_requests/46
---
panels/power/cc-power-panel.c | 77 ++++++++++++++++++++++++++++++++++-
1 file changed, 76 insertions(+), 1 deletion(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 4633627c2..4f1989cdf 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -24,6 +24,7 @@
#include <libupower-glib/upower.h>
#include <glib/gi18n.h>
#include <gnome-settings-daemon/gsd-enums.h>
+#include <gio/gdesktopappinfo.h>
#include <handy.h>
#ifdef HAVE_NETWORK_MANAGER
@@ -1383,12 +1384,25 @@ static void
power_profile_update_info_boxes (CcPowerPanel *self)
{
g_autoptr(GVariant) degraded_variant = NULL;
+ g_autoptr(GVariant) holds_variant = NULL;
+ g_autoptr(GVariant) profile_variant = NULL;
+ guint i, num_children;
const char *degraded = NULL;
+ const char *profile;
CcPowerProfileInfoRow *row;
+ int next_insert = 0;
empty_listbox (self->power_profile_info_listbox);
gtk_widget_hide (GTK_WIDGET (self->power_profile_info_listbox));
+ profile_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "ActiveProfile");
+ if (!profile_variant)
+ {
+ g_warning ("No 'ActiveProfile' property on power-profiles-daemon service");
+ return;
+ }
+ profile = g_variant_get_string (profile_variant, NULL);
+
degraded_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "PerformanceDegraded");
if (degraded_variant)
degraded = g_variant_get_string (degraded_variant, NULL);
@@ -1408,6 +1422,66 @@ power_profile_update_info_boxes (CcPowerPanel *self)
row = cc_power_profile_info_row_new (text);
gtk_widget_show (GTK_WIDGET (row));
gtk_container_add (GTK_CONTAINER (self->power_profile_info_listbox), GTK_WIDGET (row));
+ if (g_str_equal (profile, "performance"))
+ next_insert = 1;
+ }
+
+ holds_variant = g_dbus_proxy_get_cached_property (self->power_profiles_proxy, "ActiveProfileHolds");
+ if (!holds_variant)
+ {
+ g_warning ("No 'ActiveProfileHolds' property on power-profiles-daemon service");
+ return;
+ }
+
+ num_children = g_variant_n_children (holds_variant);
+ for (i = 0; i < num_children; i++)
+ {
+ g_autoptr(GDesktopAppInfo) app_info = NULL;
+ g_autoptr(GVariant) hold_variant = NULL;
+ g_autofree char *text = NULL;
+ const char *app_id, *held_profile, *reason, *name;
+
+ hold_variant = g_variant_get_child_value (holds_variant, i);
+ if (!hold_variant || !g_variant_is_of_type (hold_variant, G_VARIANT_TYPE ("a{sv}")))
+ continue;
+
+ app_id = variant_lookup_string (hold_variant, "ApplicationId");
+ if (!app_id)
+ continue;
+ app_info = g_desktop_app_info_new (app_id);
+ name = app_info ? g_app_info_get_name (G_APP_INFO (app_info)) : app_id;
+ held_profile = variant_lookup_string (hold_variant, "Profile");
+ reason = variant_lookup_string (hold_variant, "Reason");
+ g_debug ("Adding info row for %s hold by %s: %s", held_profile, app_id, reason);
+
+ if (g_strcmp0 (held_profile, "power-saver") == 0 &&
+ g_strcmp0 (app_id, "org.gnome.SettingsDaemon.Power") == 0)
+ {
+ text = g_strdup (_("Low battery: power saver enabled. Previous mode will be restored when battery is sufficiently charged."));
+ }
+ else
+ {
+ switch (cc_power_profile_from_str (held_profile))
+ {
+ case CC_POWER_PROFILE_POWER_SAVER:
+ /* translators: "%s" is an application name */
+ text = g_strdup_printf (_("Power Saver mode activated by “%s”."), name);
+ break;
+ case CC_POWER_PROFILE_PERFORMANCE:
+ /* translators: "%s" is an application name */
+ text = g_strdup_printf (_("Performance mode activated by “%s”."), name);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+ }
+
+ row = cc_power_profile_info_row_new (text);
+ gtk_widget_show (GTK_WIDGET (row));
+ if (g_strcmp0 (held_profile, profile) != 0)
+ gtk_list_box_insert (GTK_LIST_BOX (self->power_profile_info_listbox), GTK_WIDGET (row), -1);
+ else
+ gtk_list_box_insert (GTK_LIST_BOX (self->power_profile_info_listbox), GTK_WIDGET (row), next_insert);
}
}
@@ -1458,7 +1532,8 @@ power_profiles_properties_changed_cb (CcPowerPanel *self,
performance_profile_set_inhibited (self,
g_variant_get_string (value, NULL));
}
- else if (g_strcmp0 (key, "PerformanceDegraded") == 0)
+ else if (g_strcmp0 (key, "PerformanceDegraded") == 0 ||
+ g_strcmp0 (key, "ActiveProfileHolds") == 0)
{
power_profile_update_info_boxes (self);
}
--
2.32.0
From d7cabb849c425fd84e85a981bcd56a6df1d87868 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 16 Jul 2021 11:32:37 +0200
Subject: [PATCH 18/33] power: Tweak power profile info boxes horizontal
spacing
A bit too much whitespace around the info icon.
---
panels/power/cc-power-profile-info-row.ui | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui
index d9291ff16..bc49a24ac 100644
--- a/panels/power/cc-power-profile-info-row.ui
+++ b/panels/power/cc-power-profile-info-row.ui
@@ -8,16 +8,16 @@
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
+ <property name="margin-start">8</property>
+ <property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
- <property name="spacing">12</property>
+ <property name="spacing">8</property>
<child>
<object class="GtkImage" id="icon_image">
<property name="visible">True</property>
<property name="margin-start">6</property>
- <property name="margin-end">18</property>
+ <property name="margin-end">6</property>
<property name="icon-name">info-symbolic</property>
<property name="icon-size">5</property>
<style>
--
2.32.0
From 941dfe6403ae0eb68aef76754691f56b07999635 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 16 Jul 2021 11:33:38 +0200
Subject: [PATCH 19/33] power: Reword lap mode info message
Reword the lap mode info message slightly as the performance mode might
not have been what the user requested, but the warning should stay until
cleared nonetheless.
---
panels/power/cc-power-panel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 4f1989cdf..740d52c64 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1415,7 +1415,7 @@ power_profile_update_info_boxes (CcPowerPanel *self)
if (g_str_equal (degraded, "high-operating-temperature"))
text = _("Performance mode temporarily disabled due to high operating temperature.");
else if (g_str_equal (degraded, "lap-detected"))
- text = _("Lap detected: performance mode temporarily disabled. Move the device to a stable surface to restore.");
+ text = _("Lap detected: performance mode temporarily unavailable. Move the device to a stable surface to restore.");
else
text = _("Performance mode temporarily disabled.");
--
2.32.0
From 4dff29aab988021aab3f623899271b33240c0c86 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Wed, 21 Jul 2021 12:26:39 +0200
Subject: [PATCH 20/33] power: Fix D-Bus proxy leak
---
panels/power/cc-power-panel.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 740d52c64..21183f39c 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -151,6 +151,7 @@ cc_power_panel_dispose (GObject *object)
g_clear_object (&self->bt_rfkill);
g_clear_object (&self->bt_properties);
g_clear_object (&self->iio_proxy);
+ g_clear_object (&self->power_profiles_proxy);
#ifdef HAVE_NETWORK_MANAGER
g_clear_object (&self->nm_client);
#endif
--
2.32.0
From 99140ea853c6c6ce0e4c29b3edb28a07e7aa5fb6 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Wed, 21 Jul 2021 12:29:55 +0200
Subject: [PATCH 21/33] power: Add UI for "power-saver profile when battery is
low"
See https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/247
---
panels/power/cc-power-panel.c | 23 +++++++++++++++++++++++
panels/power/cc-power-panel.ui | 15 +++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 21183f39c..3e1b323f4 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -92,6 +92,8 @@ struct _CcPowerPanel
GtkListBox *power_profile_listbox;
GtkListBox *power_profile_info_listbox;
HdyPreferencesGroup *power_profile_section;
+ HdyActionRow *power_saver_low_battery_row;
+ GtkSwitch *power_saver_low_battery_switch;
GtkSizeGroup *row_sizegroup;
GtkComboBox *suspend_on_battery_delay_combo;
GtkLabel *suspend_on_battery_delay_label;
@@ -257,6 +259,18 @@ empty_listbox (GtkListBox *listbox)
gtk_container_remove (GTK_CONTAINER (listbox), l->data);
}
+static void
+update_power_saver_low_battery_row_visibility (CcPowerPanel *self)
+{
+ g_autoptr(UpDevice) composite = NULL;
+ UpDeviceKind kind;
+
+ composite = up_client_get_display_device (self->up_client);
+ g_object_get (composite, "kind", &kind, NULL);
+ gtk_widget_set_visible (GTK_WIDGET (self->power_saver_low_battery_row),
+ self->power_profiles_proxy && kind == UP_DEVICE_KIND_BATTERY);
+}
+
static void
up_client_changed (CcPowerPanel *self)
{
@@ -427,6 +441,8 @@ up_client_changed (CcPowerPanel *self)
add_device (self, device);
}
}
+
+ update_power_saver_low_battery_row_visibility (self);
}
static void
@@ -1727,6 +1743,8 @@ setup_power_profiles (CcPowerPanel *self)
if (self->has_performance_degraded)
power_profile_update_info_boxes (self);
+
+ update_power_saver_low_battery_row_visibility (self);
}
static void
@@ -1839,6 +1857,8 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_info_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_section);
+ gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_saver_low_battery_row);
+ gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_saver_low_battery_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, row_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_combo);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_label);
@@ -1895,6 +1915,9 @@ cc_power_panel_init (CcPowerPanel *self)
setup_power_profiles (self);
setup_power_saving (self);
+ g_settings_bind (self->gsd_settings, "power-saver-profile-on-low-battery",
+ self->power_saver_low_battery_switch, "active",
+ G_SETTINGS_BIND_DEFAULT);
setup_general_section (self);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index d8283c556..bc58e7462 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -206,6 +206,21 @@
<signal name="notify::selected-index" handler="blank_screen_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
+ <child>
+ <object class="HdyActionRow" id="power_saver_low_battery_row">
+ <property name="visible">False</property>
+ <property name="title" translatable="yes">Automatic Power Saver</property>
+ <property name="subtitle" translatable="yes">Enables power saver mode when battery is low.</property>
+ <property name="use_underline">True</property>
+ <property name="activatable_widget">power_saver_low_battery_switch</property>
+ <child>
+ <object class="GtkSwitch" id="power_saver_low_battery_switch">
+ <property name="visible">True</property>
+ <property name="valign">center</property>
+ </object>
+ </child>
+ </object>
+ </child>
<child>
<object class="HdyActionRow" id="automatic_suspend_row">
<property name="visible">False</property>
--
2.32.0
From 301045260461f4ab5f6e41ebadbd94935411edb2 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 27 Jul 2021 15:49:26 +0200
Subject: [PATCH 22/33] power: Fix logic when showing profile holds
A logic error meant that the power profiles info boxes container
would not be shown if there wasn't a "degraded" performance as well.
Spotted by Allan Day
---
panels/power/cc-power-panel.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 3e1b323f4..a5c66aa9d 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -1465,6 +1465,9 @@ power_profile_update_info_boxes (CcPowerPanel *self)
app_id = variant_lookup_string (hold_variant, "ApplicationId");
if (!app_id)
continue;
+
+ gtk_widget_show (GTK_WIDGET (self->power_profile_info_listbox));
+
app_info = g_desktop_app_info_new (app_id);
name = app_info ? g_app_info_get_name (G_APP_INFO (app_info)) : app_id;
held_profile = variant_lookup_string (hold_variant, "Profile");
--
2.32.0
From ac0afc4486403ee61bd5bcc51b22cefb5bba9e8c Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 22 Jul 2021 18:29:43 +0200
Subject: [PATCH 23/33] power: Remove Wi-Fi and WWAN "power saving" toggles
It's pretty clear from their experiences on smartphones that our users
know that Wi-Fi and other wireless technologies use enough battery that
turning them off is a power saving move.
The switches and text were also pretty confusing as we would be turning
"off" the devices to turn "on" the power saving.
---
panels/power/cc-power-panel.c | 207 ---------------------------------
panels/power/cc-power-panel.ui | 34 ------
panels/power/meson.build | 4 -
3 files changed, 245 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index a5c66aa9d..97d787b95 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -27,10 +27,6 @@
#include <gio/gdesktopappinfo.h>
#include <handy.h>
-#ifdef HAVE_NETWORK_MANAGER
-#include <NetworkManager.h>
-#endif
-
#include "shell/cc-object-storage.h"
#include "list-box-helper.h"
#include "cc-battery-row.h"
@@ -86,8 +82,6 @@ struct _CcPowerPanel
GtkListBoxRow *kbd_brightness_row;
CcBrightnessScale *kbd_brightness_scale;
GtkSizeGroup *level_sizegroup;
- GtkListBoxRow *mobile_row;
- GtkSwitch *mobile_switch;
HdyComboRow *power_button_row;
GtkListBox *power_profile_listbox;
GtkListBox *power_profile_info_listbox;
@@ -102,8 +96,6 @@ struct _CcPowerPanel
GtkComboBox *suspend_on_ac_delay_combo;
GtkLabel *suspend_on_ac_label;
GtkSwitch *suspend_on_ac_switch;
- GtkListBoxRow *wifi_row;
- GtkSwitch *wifi_switch;
GSettings *gsd_settings;
GSettings *session_settings;
@@ -124,10 +116,6 @@ struct _CcPowerPanel
CcPowerProfileRow *power_profiles_row[NUM_CC_POWER_PROFILES];
gboolean power_profiles_in_update;
gboolean has_performance_degraded;
-
-#ifdef HAVE_NETWORK_MANAGER
- NMClient *nm_client;
-#endif
};
CC_PANEL_REGISTER (CcPowerPanel, cc_power_panel)
@@ -154,9 +142,6 @@ cc_power_panel_dispose (GObject *object)
g_clear_object (&self->bt_properties);
g_clear_object (&self->iio_proxy);
g_clear_object (&self->power_profiles_proxy);
-#ifdef HAVE_NETWORK_MANAGER
- g_clear_object (&self->nm_client);
-#endif
if (self->iio_proxy_watch_id != 0)
g_bus_unwatch_name (self->iio_proxy_watch_id);
self->iio_proxy_watch_id = 0;
@@ -729,184 +714,6 @@ bt_powered_state_changed (CcPowerPanel *self)
g_signal_handlers_unblock_by_func (self->bt_switch, bt_switch_changed_cb, self);
}
-#ifdef HAVE_NETWORK_MANAGER
-static gboolean
-has_wifi_devices (NMClient *client)
-{
- const GPtrArray *devices;
- NMDevice *device;
- gint i;
-
- if (!nm_client_get_nm_running (client))
- return FALSE;
-
- devices = nm_client_get_devices (client);
- if (devices == NULL)
- return FALSE;
-
- for (i = 0; i < devices->len; i++)
- {
- device = g_ptr_array_index (devices, i);
- switch (nm_device_get_device_type (device))
- {
- case NM_DEVICE_TYPE_WIFI:
- return TRUE;
- default:
- break;
- }
- }
-
- return FALSE;
-}
-
-static void
-wifi_switch_changed_cb (CcPowerPanel *self)
-{
- gboolean enabled;
-
- enabled = gtk_switch_get_active (self->wifi_switch);
- g_debug ("Setting wifi %s", enabled ? "enabled" : "disabled");
- nm_client_wireless_set_enabled (self->nm_client, enabled);
-}
-
-static gboolean
-has_mobile_devices (NMClient *client)
-{
- const GPtrArray *devices;
- NMDevice *device;
- gint i;
-
- if (!nm_client_get_nm_running (client))
- return FALSE;
-
- devices = nm_client_get_devices (client);
- if (devices == NULL)
- return FALSE;
-
- for (i = 0; i < devices->len; i++)
- {
- device = g_ptr_array_index (devices, i);
- switch (nm_device_get_device_type (device))
- {
- case NM_DEVICE_TYPE_MODEM:
- return TRUE;
- default:
- break;
- }
- }
-
- return FALSE;
-}
-
-static void
-mobile_switch_changed_cb (CcPowerPanel *self)
-{
- gboolean enabled;
-
- enabled = gtk_switch_get_active (self->mobile_switch);
- g_debug ("Setting wwan %s", enabled ? "enabled" : "disabled");
- nm_client_wwan_set_enabled (self->nm_client, enabled);
-}
-
-static void
-nm_client_state_changed (CcPowerPanel *self)
-{
- gboolean visible;
- gboolean active;
- gboolean sensitive;
-
- visible = has_wifi_devices (self->nm_client);
- active = nm_client_networking_get_enabled (self->nm_client) &&
- nm_client_wireless_get_enabled (self->nm_client) &&
- nm_client_wireless_hardware_get_enabled (self->nm_client);
- sensitive = nm_client_networking_get_enabled (self->nm_client) &&
- nm_client_wireless_hardware_get_enabled (self->nm_client);
-
- g_debug ("wifi state changed to %s", active ? "enabled" : "disabled");
-
- g_signal_handlers_block_by_func (self->wifi_switch, wifi_switch_changed_cb, self);
- gtk_switch_set_active (self->wifi_switch, active);
- gtk_widget_set_sensitive (GTK_WIDGET (self->wifi_switch), sensitive);
- gtk_widget_set_visible (GTK_WIDGET (self->wifi_row), visible);
- g_signal_handlers_unblock_by_func (self->wifi_switch, wifi_switch_changed_cb, self);
-
- visible = has_mobile_devices (self->nm_client);
-
- /* Set the switch active, if wwan is enabled. */
- active = nm_client_networking_get_enabled (self->nm_client) &&
- (nm_client_wwan_get_enabled (self->nm_client) &&
- nm_client_wwan_hardware_get_enabled (self->nm_client));
- sensitive = nm_client_networking_get_enabled (self->nm_client) &&
- nm_client_wwan_hardware_get_enabled (self->nm_client);
-
- g_debug ("mobile state changed to %s", active ? "enabled" : "disabled");
-
- g_signal_handlers_block_by_func (self->mobile_switch, mobile_switch_changed_cb, self);
- gtk_switch_set_active (self->mobile_switch, active);
- gtk_widget_set_sensitive (GTK_WIDGET (self->mobile_switch), sensitive);
- gtk_widget_set_visible (GTK_WIDGET (self->mobile_row), visible);
- g_signal_handlers_unblock_by_func (self->mobile_switch, mobile_switch_changed_cb, self);
-}
-
-static void
-nm_device_changed (CcPowerPanel *self)
-{
- gtk_widget_set_visible (GTK_WIDGET (self->wifi_row), has_wifi_devices (self->nm_client));
- gtk_widget_set_visible (GTK_WIDGET (self->mobile_row), has_mobile_devices (self->nm_client));
-}
-
-static void
-setup_nm_client (CcPowerPanel *self,
- NMClient *client)
-{
- self->nm_client = client;
-
- g_signal_connect_object (self->nm_client, "notify",
- G_CALLBACK (nm_client_state_changed), self, G_CONNECT_SWAPPED);
- g_signal_connect_object (self->nm_client, "device-added",
- G_CALLBACK (nm_device_changed), self, G_CONNECT_SWAPPED);
- g_signal_connect_object (self->nm_client, "device-removed",
- G_CALLBACK (nm_device_changed), self, G_CONNECT_SWAPPED);
-
- nm_client_state_changed (self);
- nm_device_changed (self);
-}
-
-static void
-nm_client_ready_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- CcPowerPanel *self;
- NMClient *client;
- g_autoptr(GError) error = NULL;
-
- client = nm_client_new_finish (res, &error);
- if (!client)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- {
- g_warning ("Failed to create NetworkManager client: %s",
- error->message);
-
- self = user_data;
- gtk_widget_set_sensitive (GTK_WIDGET (self->wifi_row), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (self->mobile_row), FALSE);
- }
- return;
- }
-
- self = user_data;
-
- /* Setup the client */
- setup_nm_client (self, client);
-
- /* Store the object in the cache too */
- cc_object_storage_add_object (CC_OBJECT_NMCLIENT, client);
-}
-
-#endif
-
static gboolean
keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *list)
{
@@ -1326,14 +1133,6 @@ setup_power_saving (CcPowerPanel *self)
update_automatic_suspend_label (self);
}
-#ifdef HAVE_NETWORK_MANAGER
- /* Create and store a NMClient instance if it doesn't exist yet */
- if (cc_object_storage_has_object (CC_OBJECT_NMCLIENT))
- setup_nm_client (self, cc_object_storage_get_object (CC_OBJECT_NMCLIENT));
- else
- nm_client_new_async (cc_panel_get_cancellable (CC_PANEL (self)), nm_client_ready_cb, self);
-#endif
-
#ifdef HAVE_BLUETOOTH
self->bt_rfkill = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
@@ -1854,8 +1653,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_info_listbox);
@@ -1870,8 +1667,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_ac_delay_combo);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_ac_label);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_ac_switch);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, wifi_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, wifi_switch);
gtk_widget_class_bind_template_callback (widget_class, als_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, automatic_suspend_label_mnemonic_activate_cb);
@@ -1880,11 +1675,9 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, has_kbd_brightness_cb);
gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb);
- gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_button_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_profiles_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, automatic_suspend_row_activated_cb);
- gtk_widget_class_bind_template_callback (widget_class, wifi_switch_changed_cb);
}
static void
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index bc58e7462..0795f1b70 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -237,38 +237,6 @@
</child>
</object>
</child>
- <child>
- <object class="HdyActionRow" id="wifi_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Wi-Fi</property>
- <property name="subtitle" translatable="yes">Wi-Fi can be turned off to save power.</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">wifi_switch</property>
- <child>
- <object class="GtkSwitch" id="wifi_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="wifi_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="HdyActionRow" id="mobile_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Mobile Broadband</property>
- <property name="subtitle" translatable="yes">Mobile broadband (LTE, 4G, 3G, etc.) can be turned off to save power.</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">mobile_switch</property>
- <child>
- <object class="GtkSwitch" id="mobile_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="mobile_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
<child>
<object class="HdyActionRow" id="bt_row">
<property name="visible">False</property>
@@ -337,8 +305,6 @@
<widget name="dim_screen_row"/>
<widget name="blank_screen_row"/>
<widget name="automatic_suspend_row"/>
- <widget name="wifi_row"/>
- <widget name="mobile_row"/>
<widget name="bt_row"/>
<widget name="power_button_row"/>
<widget name="battery_percentage_row"/>
diff --git a/panels/power/meson.build b/panels/power/meson.build
index af04b98ed..b1380f4e6 100644
--- a/panels/power/meson.build
+++ b/panels/power/meson.build
@@ -47,10 +47,6 @@ deps = common_deps + [
upower_glib_dep
]
-if host_is_linux
- deps += network_manager_deps
-endif
-
if host_is_linux_not_s390
deps += gnome_bluetooth_dep
endif
--
2.32.0
From 55ab3debcc8d39a9f301dcd41a441adc568ed520 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 22 Jul 2021 18:33:41 +0200
Subject: [PATCH 24/33] power: Remove Bluetooth power switch button
See previous commit.
---
panels/power/cc-power-panel.c | 91 ----------------------------------
panels/power/cc-power-panel.ui | 17 -------
panels/power/meson.build | 4 --
3 files changed, 112 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 97d787b95..1e0a572b3 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -72,8 +72,6 @@ struct _CcPowerPanel
HdyComboRow *blank_screen_row;
GtkListBoxRow *brightness_row;
CcBrightnessScale *brightness_scale;
- GtkListBoxRow *bt_row;
- GtkSwitch *bt_switch;
GtkListBox *device_listbox;
HdyPreferencesGroup *device_section;
GtkListBoxRow *dim_screen_row;
@@ -105,9 +103,6 @@ struct _CcPowerPanel
gboolean has_batteries;
char *chassis_type;
- GDBusProxy *bt_rfkill;
- GDBusProxy *bt_properties;
-
GDBusProxy *iio_proxy;
guint iio_proxy_watch_id;
@@ -138,8 +133,6 @@ cc_power_panel_dispose (GObject *object)
g_clear_pointer ((GtkWidget **) &self->automatic_suspend_dialog, gtk_widget_destroy);
g_clear_pointer (&self->devices, g_ptr_array_unref);
g_clear_object (&self->up_client);
- g_clear_object (&self->bt_rfkill);
- g_clear_object (&self->bt_properties);
g_clear_object (&self->iio_proxy);
g_clear_object (&self->power_profiles_proxy);
if (self->iio_proxy_watch_id != 0)
@@ -659,61 +652,6 @@ set_ac_battery_ui_mode (CcPowerPanel *self)
}
}
-static void
-bt_set_powered (CcPowerPanel *self,
- gboolean powered)
-{
- g_dbus_proxy_call (self->bt_properties,
- "Set",
- g_variant_new_parsed ("('org.gnome.SettingsDaemon.Rfkill', 'BluetoothAirplaneMode', %v)",
- g_variant_new_boolean (!powered)),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cc_panel_get_cancellable (CC_PANEL (self)),
- NULL, NULL);
-}
-
-static void
-bt_switch_changed_cb (CcPowerPanel *self)
-{
- gboolean powered;
-
- powered = gtk_switch_get_active (self->bt_switch);
-
- g_debug ("Setting bt power %s", powered ? "on" : "off");
-
- bt_set_powered (self, powered);
-}
-
-static void
-bt_powered_state_changed (CcPowerPanel *self)
-{
- gboolean powered, has_airplane_mode;
- g_autoptr(GVariant) v1 = NULL;
- g_autoptr(GVariant) v2 = NULL;
-
- v1 = g_dbus_proxy_get_cached_property (self->bt_rfkill, "BluetoothHasAirplaneMode");
- has_airplane_mode = g_variant_get_boolean (v1);
-
- if (!has_airplane_mode)
- {
- g_debug ("BluetoothHasAirplaneMode is false, hiding Bluetooth power row");
- gtk_widget_hide (GTK_WIDGET (self->bt_row));
- return;
- }
-
- v2 = g_dbus_proxy_get_cached_property (self->bt_rfkill, "BluetoothAirplaneMode");
- powered = !g_variant_get_boolean (v2);
-
- g_debug ("bt powered state changed to %s", powered ? "on" : "off");
-
- gtk_widget_show (GTK_WIDGET (self->bt_row));
-
- g_signal_handlers_block_by_func (self->bt_switch, bt_switch_changed_cb, self);
- gtk_switch_set_active (self->bt_switch, powered);
- g_signal_handlers_unblock_by_func (self->bt_switch, bt_switch_changed_cb, self);
-}
-
static gboolean
keynav_failed_cb (CcPowerPanel *self, GtkDirectionType direction, GtkWidget *list)
{
@@ -1132,32 +1070,6 @@ setup_power_saving (CcPowerPanel *self)
set_ac_battery_ui_mode (self);
update_automatic_suspend_label (self);
}
-
-#ifdef HAVE_BLUETOOTH
- self->bt_rfkill = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.gnome.SettingsDaemon.Rfkill",
- "/org/gnome/SettingsDaemon/Rfkill",
- "org.gnome.SettingsDaemon.Rfkill",
- NULL,
- NULL);
-
- if (self->bt_rfkill)
- {
- self->bt_properties = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.gnome.SettingsDaemon.Rfkill",
- "/org/gnome/SettingsDaemon/Rfkill",
- "org.freedesktop.DBus.Properties",
- NULL,
- NULL);
- }
-
- g_signal_connect_object (self->bt_rfkill, "g-properties-changed",
- G_CALLBACK (bt_powered_state_changed), self, G_CONNECT_SWAPPED);
-
- bt_powered_state_changed (self);
-#endif
}
static const char *
@@ -1643,8 +1555,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, blank_screen_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_scale);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, bt_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, bt_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, dim_screen_row);
@@ -1670,7 +1580,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, als_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, automatic_suspend_label_mnemonic_activate_cb);
- gtk_widget_class_bind_template_callback (widget_class, bt_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, has_brightness_cb);
gtk_widget_class_bind_template_callback (widget_class, has_kbd_brightness_cb);
gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index 0795f1b70..b5e12d2f5 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -237,22 +237,6 @@
</child>
</object>
</child>
- <child>
- <object class="HdyActionRow" id="bt_row">
- <property name="visible">False</property>
- <property name="title" translatable="yes">_Bluetooth</property>
- <property name="subtitle" translatable="yes">Bluetooth can be turned off to save power.</property>
- <property name="use_underline">True</property>
- <property name="activatable_widget">bt_switch</property>
- <child>
- <object class="GtkSwitch" id="bt_switch">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <signal name="notify::active" handler="bt_switch_changed_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
</object>
</child>
<child>
@@ -305,7 +289,6 @@
<widget name="dim_screen_row"/>
<widget name="blank_screen_row"/>
<widget name="automatic_suspend_row"/>
- <widget name="bt_row"/>
<widget name="power_button_row"/>
<widget name="battery_percentage_row"/>
</widgets>
diff --git a/panels/power/meson.build b/panels/power/meson.build
index b1380f4e6..9066d24bd 100644
--- a/panels/power/meson.build
+++ b/panels/power/meson.build
@@ -47,10 +47,6 @@ deps = common_deps + [
upower_glib_dep
]
-if host_is_linux_not_s390
- deps += gnome_bluetooth_dep
-endif
-
panels_libs += static_library(
cappletname,
sources: sources,
--
2.32.0
From d6e3755dbfd15f2aaf2a1850e63e7d46f6ae37c7 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 23 Jul 2021 16:09:54 +0200
Subject: [PATCH 25/33] power: Tweak labels in "Power Saving Options" section
To match the latest mockups.
The lack of subtitles for most of the items in that section made the
section look pretty bizarre.
---
panels/power/cc-power-panel.ui | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index b5e12d2f5..29503b7e4 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -139,7 +139,7 @@
<child>
<object class="HdyPreferencesGroup" id="power_saving_section">
<property name="visible">True</property>
- <property name="title" translatable="yes">Power Saving</property>
+ <property name="title" translatable="yes">Power Saving Options</property>
<child>
<object class="HdyActionRow" id="brightness_row">
<property name="visible">True</property>
@@ -188,7 +188,8 @@
<child>
<object class="HdyActionRow" id="dim_screen_row">
<property name="visible">True</property>
- <property name="title" translatable="yes">Dim Screen When Inactive</property>
+ <property name="title" translatable="yes">Dim Screen</property>
+ <property name="subtitle" translatable="yes">Reduces the screen brightness when the computer is inactive.</property>
<property name="activatable_widget">dim_screen_switch</property>
<child>
<object class="GtkSwitch" id="dim_screen_switch">
@@ -201,7 +202,8 @@
<child>
<object class="HdyComboRow" id="blank_screen_row">
<property name="visible">True</property>
- <property name="title" translatable="yes">_Blank Screen</property>
+ <property name="title" translatable="yes">Screen _Blank</property>
+ <property name="subtitle" translatable="yes">Turns the screen off after a period of inactivity.</property>
<property name="use_underline">True</property>
<signal name="notify::selected-index" handler="blank_screen_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
@@ -225,6 +227,7 @@
<object class="HdyActionRow" id="automatic_suspend_row">
<property name="visible">False</property>
<property name="title" translatable="yes">_Automatic Suspend</property>
+ <property name="subtitle" translatable="yes">Pauses the computer after a period of inactivity.</property>
<property name="use_underline">True</property>
<property name="activatable">True</property>
<signal name="activated" handler="automatic_suspend_row_activated_cb" swapped="yes"/>
--
2.32.0
From e9e1fdaacc9941129beca7c15adc8b89789fcb50 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Mon, 26 Jul 2021 11:32:23 +0200
Subject: [PATCH 26/33] power: Remove Brightness scales
From https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/1020#note_1211728
"
They are out of place - fine-grained control over brightness isn't what the
power settings are for. As a result, they confuse the settings overall.
In both cases we have alternative controls, through keyboard hot keys or
through the shell's screen brightness slider.
"
---
panels/power/cc-power-panel.c | 87 +++++++++++++++++++++-------------
panels/power/cc-power-panel.ui | 36 --------------
2 files changed, 54 insertions(+), 69 deletions(-)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index 1e0a572b3..04987ff98 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -30,7 +30,6 @@
#include "shell/cc-object-storage.h"
#include "list-box-helper.h"
#include "cc-battery-row.h"
-#include "cc-brightness-scale.h"
#include "cc-power-profile-row.h"
#include "cc-power-profile-info-row.h"
#include "cc-power-panel.h"
@@ -70,15 +69,11 @@ struct _CcPowerPanel
GtkSizeGroup *battery_row_sizegroup;
HdyPreferencesGroup *battery_section;
HdyComboRow *blank_screen_row;
- GtkListBoxRow *brightness_row;
- CcBrightnessScale *brightness_scale;
GtkListBox *device_listbox;
HdyPreferencesGroup *device_section;
GtkListBoxRow *dim_screen_row;
GtkSwitch *dim_screen_switch;
HdyPreferencesGroup *general_section;
- GtkListBoxRow *kbd_brightness_row;
- CcBrightnessScale *kbd_brightness_scale;
GtkSizeGroup *level_sizegroup;
HdyComboRow *power_button_row;
GtkListBox *power_profile_listbox;
@@ -105,6 +100,7 @@ struct _CcPowerPanel
GDBusProxy *iio_proxy;
guint iio_proxy_watch_id;
+ gboolean has_brightness;
GDBusProxy *power_profiles_proxy;
guint power_profiles_prop_id;
@@ -469,11 +465,8 @@ static void
als_enabled_state_changed (CcPowerPanel *self)
{
gboolean enabled;
- gboolean has_brightness = FALSE;
gboolean visible = FALSE;
- has_brightness = cc_brightness_scale_get_has_brightness (self->brightness_scale);
-
if (self->iio_proxy != NULL)
{
g_autoptr(GVariant) v = g_dbus_proxy_get_cached_property (self->iio_proxy, "HasAmbientLight");
@@ -485,7 +478,7 @@ als_enabled_state_changed (CcPowerPanel *self)
g_debug ("ALS enabled: %s", enabled ? "on" : "off");
g_signal_handlers_block_by_func (self->als_switch, als_switch_changed_cb, self);
gtk_switch_set_active (self->als_switch, enabled);
- gtk_widget_set_visible (GTK_WIDGET (self->als_row), visible && has_brightness);
+ gtk_widget_set_visible (GTK_WIDGET (self->als_row), visible && self->has_brightness);
g_signal_handlers_unblock_by_func (self->als_switch, als_switch_changed_cb, self);
}
@@ -933,29 +926,34 @@ can_suspend_or_hibernate (CcPowerPanel *self,
}
static void
-has_brightness_cb (CcPowerPanel *self)
+got_brightness_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
- gboolean has_brightness;
+ g_autoptr(GVariant) result = NULL;
+ g_autoptr(GError) error = NULL;
+ gint32 brightness = -1.0;
+ CcPowerPanel *self;
- has_brightness = cc_brightness_scale_get_has_brightness (self->brightness_scale);
+ result = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), res, &error);
+ if (!result)
+ {
+ g_debug ("Failed to get Brightness property: %s", error->message);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ return;
+ }
+ else
+ {
+ g_autoptr(GVariant) v = NULL;
+ g_variant_get (result, "(v)", &v);
+ brightness = v ? g_variant_get_int32 (v) : -1.0;
+ }
- gtk_widget_set_visible (GTK_WIDGET (self->brightness_row), has_brightness);
- gtk_widget_set_visible (GTK_WIDGET (self->dim_screen_row), has_brightness);
+ self = user_data;
+ self->has_brightness = brightness >= 0.0;
+ gtk_widget_set_visible (GTK_WIDGET (self->dim_screen_row), self->has_brightness);
als_enabled_state_changed (self);
-
-}
-
-static void
-has_kbd_brightness_cb (CcPowerPanel *self,
- GParamSpec *pspec,
- GObject *object)
-{
- gboolean has_brightness;
-
- has_brightness = cc_brightness_scale_get_has_brightness (self->kbd_brightness_scale);
-
- gtk_widget_set_visible (GTK_WIDGET (self->kbd_brightness_row), has_brightness);
}
static void
@@ -992,6 +990,8 @@ populate_blank_screen_row (HdyComboRow *combo_row)
static void
setup_power_saving (CcPowerPanel *self)
{
+ g_autoptr(GDBusConnection) connection = NULL;
+ g_autoptr(GError) error = NULL;
int value;
/* ambient light sensor */
@@ -1005,6 +1005,33 @@ setup_power_saving (CcPowerPanel *self)
g_signal_connect_object (self->gsd_settings, "changed",
G_CALLBACK (als_enabled_setting_changed), self, G_CONNECT_SWAPPED);
+ connection = g_bus_get_sync (G_BUS_TYPE_SESSION,
+ cc_panel_get_cancellable (CC_PANEL (self)),
+ &error);
+ if (connection)
+ {
+ g_dbus_connection_call (connection,
+ "org.gnome.SettingsDaemon.Power",
+ "/org/gnome/SettingsDaemon/Power",
+ "org.freedesktop.DBus.Properties",
+ "Get",
+ g_variant_new ("(ss)",
+ "org.gnome.SettingsDaemon.Power.Screen",
+ "Brightness"),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cc_panel_get_cancellable (CC_PANEL (self)),
+ got_brightness_cb,
+ self);
+ }
+ else
+ {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("session bus not available: %s", error->message);
+ }
+
+
g_settings_bind (self->gsd_settings, "idle-dim",
self->dim_screen_switch, "active",
G_SETTINGS_BIND_DEFAULT);
@@ -1553,15 +1580,11 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_row_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, battery_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, blank_screen_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, device_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, dim_screen_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, dim_screen_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, general_section);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_row);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, kbd_brightness_scale);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
@@ -1580,8 +1603,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, als_switch_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, automatic_suspend_label_mnemonic_activate_cb);
- gtk_widget_class_bind_template_callback (widget_class, has_brightness_cb);
- gtk_widget_class_bind_template_callback (widget_class, has_kbd_brightness_cb);
gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_button_row_changed_cb);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index 29503b7e4..a8fafba21 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -140,22 +140,6 @@
<object class="HdyPreferencesGroup" id="power_saving_section">
<property name="visible">True</property>
<property name="title" translatable="yes">Power Saving Options</property>
- <child>
- <object class="HdyActionRow" id="brightness_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Screen Brightness</property>
- <property name="use_underline">True</property>
- <child>
- <object class="CcBrightnessScale" id="brightness_scale">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <property name="device">screen</property>
- <signal name="notify::has-brightness" handler="has_brightness_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
<child>
<object class="HdyActionRow" id="als_row">
<property name="visible">True</property>
@@ -169,22 +153,6 @@
</child>
</object>
</child>
- <child>
- <object class="HdyActionRow" id="kbd_brightness_row">
- <property name="visible">True</property>
- <property name="title" translatable="yes">_Keyboard Brightness</property>
- <property name="use_underline">True</property>
- <child>
- <object class="CcBrightnessScale" id="kbd_brightness_scale">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="expand">True</property>
- <property name="device">kbd</property>
- <signal name="notify::has-brightness" handler="has_kbd_brightness_cb" object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
<child>
<object class="HdyActionRow" id="dim_screen_row">
<property name="visible">True</property>
@@ -279,16 +247,12 @@
<object class="GtkSizeGroup" id="level_sizegroup">
<property name="mode">horizontal</property>
<widgets>
- <widget name="brightness_scale"/>
- <widget name="kbd_brightness_scale"/>
</widgets>
</object>
<object class="GtkSizeGroup" id="row_sizegroup">
<property name="mode">vertical</property>
<widgets>
- <widget name="brightness_row"/>
<widget name="als_row"/>
- <widget name="kbd_brightness_row"/>
<widget name="dim_screen_row"/>
<widget name="blank_screen_row"/>
<widget name="automatic_suspend_row"/>
--
2.32.0
From 3167196af8133997ead275a1b0c9c3ddffe0f4ea Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Mon, 26 Jul 2021 11:34:41 +0200
Subject: [PATCH 27/33] power: Remove unused CcBrightnessScale
---
panels/power/cc-brightness-scale.c | 281 -----------------------------
panels/power/cc-brightness-scale.h | 38 ----
panels/power/meson.build | 5 -
3 files changed, 324 deletions(-)
delete mode 100644 panels/power/cc-brightness-scale.c
delete mode 100644 panels/power/cc-brightness-scale.h
diff --git a/panels/power/cc-brightness-scale.c b/panels/power/cc-brightness-scale.c
deleted file mode 100644
index 2df1ab5ed..000000000
--- a/panels/power/cc-brightness-scale.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* cc-brightness-scale.c
- *
- * Copyright (C) 2010 Red Hat, Inc
- * Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
- * Copyright (C) 2010,2015 Richard Hughes <richard@hughsie.com>
- * Copyright (C) 2020 System76, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "cc-brightness-scale.h"
-#include "shell/cc-object-storage.h"
-
-struct _CcBrightnessScale {
- GtkScale parent_instance;
-
- GCancellable *cancellable;
- BrightnessDevice device;
- gboolean has_brightness;
- GDBusProxy *proxy;
- gboolean setting_brightness;
-};
-
-enum
-{
- PROP_0,
- PROP_HAS_BRIGHTNESS,
- PROP_DEVICE,
-};
-
-G_DEFINE_TYPE (CcBrightnessScale, cc_brightness_scale, GTK_TYPE_SCALE)
-
-static void
-set_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = NULL;
- GDBusProxy *proxy = G_DBUS_PROXY (source_object);
-
- result = g_dbus_proxy_call_finish (proxy, res, &error);
- if (result == NULL)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_printerr ("Error setting brightness: %s\n", error->message);
- return;
- }
-
- CcBrightnessScale *self = CC_BRIGHTNESS_SCALE (user_data);
-
- /* not setting, so pay attention to changed signals */
- self->setting_brightness = FALSE;
-}
-
-static void
-brightness_slider_value_changed_cb (CcBrightnessScale *self, GtkRange *range)
-{
- guint percentage;
- g_autoptr(GVariant) variant = NULL;
-
- percentage = (guint) gtk_range_get_value (range);
-
- /* do not loop */
- if (self->setting_brightness)
- return;
-
- self->setting_brightness = TRUE;
-
- if (self->device == BRIGHTNESS_DEVICE_KBD)
- variant = g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Keyboard',"
- "'Brightness', %v)",
- g_variant_new_int32 (percentage));
- else
- variant = g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Screen',"
- "'Brightness', %v)",
- g_variant_new_int32 (percentage));
-
- /* push this to g-s-d */
- g_dbus_proxy_call (self->proxy,
- "org.freedesktop.DBus.Properties.Set",
- g_variant_ref_sink (variant),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- self->cancellable,
- set_brightness_cb,
- self);
-}
-
-static void
-sync_brightness (CcBrightnessScale *self)
-{
- g_autoptr(GVariant) result = NULL;
- gint brightness;
- GtkRange *range;
-
- result = g_dbus_proxy_get_cached_property (self->proxy, "Brightness");
-
- if (result)
- {
- /* set the slider */
- brightness = g_variant_get_int32 (result);
- self->has_brightness = brightness >= 0.0;
- }
- else
- {
- self->has_brightness = FALSE;
- }
-
- g_object_notify (G_OBJECT (self), "has-brightness");
-
- if (self->has_brightness)
- {
- range = GTK_RANGE (self);
- self->setting_brightness = TRUE;
- gtk_range_set_value (range, brightness);
- self->setting_brightness = FALSE;
- }
-}
-
-static void
-got_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- g_autoptr(GError) error = NULL;
- CcBrightnessScale *self;
- GDBusProxy *proxy;
-
- proxy = cc_object_storage_create_dbus_proxy_finish (res, &error);
- if (proxy == NULL)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_printerr ("Error creating proxy: %s\n", error->message);
- return;
- }
-
- self = CC_BRIGHTNESS_SCALE (user_data);
- self->proxy = proxy;
-
- g_signal_connect_object (proxy, "g-properties-changed",
- G_CALLBACK (sync_brightness), self, G_CONNECT_SWAPPED);
-
- sync_brightness (self);
-}
-
-static void
-cc_brightness_scale_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- CcBrightnessScale *self;
-
- self = CC_BRIGHTNESS_SCALE (object);
-
- switch (prop_id) {
- case PROP_HAS_BRIGHTNESS:
- g_value_set_boolean (value, self->has_brightness);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-cc_brightness_scale_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- CcBrightnessScale *self;
-
- self = CC_BRIGHTNESS_SCALE (object);
-
- switch (prop_id) {
- case PROP_DEVICE:
- self->device = g_value_get_enum (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-cc_brightness_scale_constructed (GObject *object)
-{
- CcBrightnessScale *self;
- const gchar *interface;
-
- G_OBJECT_CLASS (cc_brightness_scale_parent_class)->constructed (object);
-
- self = CC_BRIGHTNESS_SCALE (object);
-
- self->cancellable = g_cancellable_new();
-
- g_signal_connect_object (GTK_SCALE (self), "value-changed",
- G_CALLBACK (brightness_slider_value_changed_cb), self, G_CONNECT_SWAPPED);
-
- if (self->device == BRIGHTNESS_DEVICE_KBD)
- interface = "org.gnome.SettingsDaemon.Power.Keyboard";
- else
- interface = "org.gnome.SettingsDaemon.Power.Screen";
-
- cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.gnome.SettingsDaemon.Power",
- "/org/gnome/SettingsDaemon/Power",
- interface,
- self->cancellable,
- got_proxy_cb,
- self);
-
- gtk_range_set_range (GTK_RANGE (self), 0, 100);
- gtk_range_set_increments (GTK_RANGE (self), 1, 10);
- gtk_range_set_round_digits (GTK_RANGE (self), 0);
- gtk_scale_set_draw_value (GTK_SCALE (self), FALSE);
-}
-
-static void
-cc_brightness_scale_finalize (GObject *object)
-{
- CcBrightnessScale *self = CC_BRIGHTNESS_SCALE (object);
-
- g_cancellable_cancel (self->cancellable);
-
- G_OBJECT_CLASS (cc_brightness_scale_parent_class)->finalize (object);
-}
-
-void
-cc_brightness_scale_class_init (CcBrightnessScaleClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = cc_brightness_scale_get_property;
- object_class->set_property = cc_brightness_scale_set_property;
- object_class->constructed = cc_brightness_scale_constructed;
- object_class->finalize = cc_brightness_scale_finalize;
-
- g_object_class_install_property (object_class,
- PROP_DEVICE,
- g_param_spec_enum ("device",
- "device",
- "device",
- brightness_device_get_type(),
- BRIGHTNESS_DEVICE_SCREEN,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
-
- g_object_class_install_property (object_class,
- PROP_HAS_BRIGHTNESS,
- g_param_spec_boolean ("has-brightness",
- "has brightness",
- "has brightness",
- FALSE,
- G_PARAM_READABLE));
-}
-
-static void
-cc_brightness_scale_init (CcBrightnessScale *self)
-{
-}
-
-
-gboolean
-cc_brightness_scale_get_has_brightness (CcBrightnessScale *self)
-{
- g_return_val_if_fail (CC_IS_BRIGHTNESS_SCALE (self), FALSE);
-
- return self->has_brightness;
-}
diff --git a/panels/power/cc-brightness-scale.h b/panels/power/cc-brightness-scale.h
deleted file mode 100644
index d566dff77..000000000
--- a/panels/power/cc-brightness-scale.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* cc-brightness-scale.h
- *
- * Copyright (C) 2020 System76, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#pragma once
-
-#include <gtk/gtk.h>
-#include "cc-brightness-scale-types.h"
-
-G_BEGIN_DECLS
-
-typedef enum {
- BRIGHTNESS_DEVICE_SCREEN,
- BRIGHTNESS_DEVICE_KBD,
-} BrightnessDevice;
-
-#define CC_TYPE_BRIGHTNESS_SCALE (cc_brightness_scale_get_type())
-G_DECLARE_FINAL_TYPE (CcBrightnessScale, cc_brightness_scale, CC, BRIGHTNESS_SCALE, GtkBox)
-
-gboolean cc_brightness_scale_get_has_brightness (CcBrightnessScale *scale);
-
-G_END_DECLS
diff --git a/panels/power/meson.build b/panels/power/meson.build
index 9066d24bd..0e3ea1d56 100644
--- a/panels/power/meson.build
+++ b/panels/power/meson.build
@@ -19,16 +19,11 @@ i18n.merge_file(
sources = files(
'cc-battery-row.c',
- 'cc-brightness-scale.c',
'cc-power-panel.c',
'cc-power-profile-row.c',
'cc-power-profile-info-row.c'
)
-sources += gnome.mkenums_simple(
- 'cc-brightness-scale-types',
- sources: ['cc-brightness-scale.h'])
-
resource_data = files(
'cc-battery-row.ui',
'cc-power-panel.ui'
--
2.32.0
From 04a299a3582eeae777052b2315bf9b2801f4865c Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Mon, 26 Jul 2021 11:38:38 +0200
Subject: [PATCH 28/33] power: Update and add subtitle to automatic brightness
row
As per:
https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/1020#note_1210702
---
panels/power/cc-power-panel.ui | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index a8fafba21..9880f6b7e 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -143,7 +143,8 @@
<child>
<object class="HdyActionRow" id="als_row">
<property name="visible">True</property>
- <property name="title" translatable="yes">Automatic Brightness</property>
+ <property name="title" translatable="yes">Automatic Screen Brightness</property>
+ <property name="subtitle" translatable="yes">Screen brightness adjusts to the surrounding light.</property>
<child>
<object class="GtkSwitch" id="als_switch">
<property name="visible">True</property>
--
2.32.0
From 52dc3f91abb83deac0b66611fd9ed6f96a78cb5f Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Tue, 3 Aug 2021 11:19:56 +0200
Subject: [PATCH 29/33] power: Dim the info box icon
This brings less focus to the icon and more to the text.
See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1421
---
panels/power/cc-power-profile-info-row.ui | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui
index bc49a24ac..6f411c688 100644
--- a/panels/power/cc-power-profile-info-row.ui
+++ b/panels/power/cc-power-profile-info-row.ui
@@ -21,7 +21,7 @@
<property name="icon-name">info-symbolic</property>
<property name="icon-size">5</property>
<style>
- <class name="power-profile"/>
+ <class name="dim-label"/>
</style>
</object>
</child>
--
2.32.0
From 254a9bfa8ac8be8403d0258742f0c3f8c8db9633 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Wed, 4 Aug 2021 11:26:33 +0200
Subject: [PATCH 30/33] power: Remove icons from power profiles
They were originally included was to educate users about what the icons
mean, for when they appeared in the top bar. However, since we no
longer plan on showing the status icon in the top bar, it's not so
important that people learn the meaning of the icons.
See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1421
---
panels/power/cc-power-profile-row.c | 13 +------------
panels/power/cc-power-profile-row.ui | 15 +--------------
2 files changed, 2 insertions(+), 26 deletions(-)
diff --git a/panels/power/cc-power-profile-row.c b/panels/power/cc-power-profile-row.c
index ee66bdfd0..a8458c366 100644
--- a/panels/power/cc-power-profile-row.c
+++ b/panels/power/cc-power-profile-row.c
@@ -35,7 +35,6 @@ struct _CcPowerProfileRow
GtkListBoxRow parent_instance;
GtkRadioButton *button;
- GtkImage *icon_image;
GtkLabel *subtitle_label;
GtkLabel *title_label;
@@ -106,7 +105,6 @@ cc_power_profile_row_class_init (CcPowerProfileRowClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/power/cc-power-profile-row.ui");
gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, button);
- gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, icon_image);
gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, subtitle_label);
gtk_widget_class_bind_template_child (widget_class, CcPowerProfileRow, title_label);
@@ -175,7 +173,7 @@ CcPowerProfileRow *
cc_power_profile_row_new (CcPowerProfile power_profile)
{
CcPowerProfileRow *self;
- const char *text, *subtext, *icon_name, *class_name;
+ const char *text, *subtext;
self = g_object_new (CC_TYPE_POWER_PROFILE_ROW, NULL);
@@ -185,20 +183,14 @@ cc_power_profile_row_new (CcPowerProfile power_profile)
case CC_POWER_PROFILE_PERFORMANCE:
text = _("Performance");
subtext = _("High performance and power usage.");
- icon_name = "power-profile-performance-symbolic";
- class_name = "performance";
break;
case CC_POWER_PROFILE_BALANCED:
text = _("Balanced Power");
subtext = _("Standard performance and power usage.");
- icon_name = "power-profile-balanced-symbolic";
- class_name = NULL;
break;
case CC_POWER_PROFILE_POWER_SAVER:
text = _("Power Saver");
subtext = _("Reduced performance and power usage.");
- icon_name = "power-profile-power-saver-symbolic";
- class_name = "low-power";
break;
default:
g_assert_not_reached ();
@@ -206,9 +198,6 @@ cc_power_profile_row_new (CcPowerProfile power_profile)
gtk_label_set_markup (self->title_label, text);
gtk_label_set_markup (self->subtitle_label, subtext);
- gtk_image_set_from_icon_name (self->icon_image, icon_name, GTK_ICON_SIZE_MENU);
- if (class_name != NULL)
- gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self->icon_image)), class_name);
return self;
}
diff --git a/panels/power/cc-power-profile-row.ui b/panels/power/cc-power-profile-row.ui
index 64516edf3..1391093ba 100644
--- a/panels/power/cc-power-profile-row.ui
+++ b/panels/power/cc-power-profile-row.ui
@@ -28,19 +28,6 @@
<property name="height">2</property>
</packing>
</child>
- <child>
- <object class="GtkImage" id="icon_image">
- <property name="visible">True</property>
- <property name="margin-end">6</property>
- <style>
- <class name="power-profile"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
<child>
<object class="GtkLabel" id="title_label">
<property name="visible">True</property>
@@ -53,7 +40,7 @@
<property name="margin-end">6</property>
</object>
<packing>
- <property name="left_attach">2</property>
+ <property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
--
2.32.0
From 96efcd2835a46b8009b5f6524a2d37089f40dd44 Mon Sep 17 00:00:00 2001
From: Allan Day <allanpday@gmail.com>
Date: Wed, 4 Aug 2021 11:28:14 +0200
Subject: [PATCH 31/33] power: Align power profile info boxes with profiles
text
See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1421
---
panels/power/cc-power-profile-info-row.ui | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/panels/power/cc-power-profile-info-row.ui b/panels/power/cc-power-profile-info-row.ui
index 6f411c688..34807c38c 100644
--- a/panels/power/cc-power-profile-info-row.ui
+++ b/panels/power/cc-power-profile-info-row.ui
@@ -8,11 +8,11 @@
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
- <property name="margin-start">8</property>
+ <property name="margin-start">4</property>
<property name="margin-end">8</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
- <property name="spacing">8</property>
+ <property name="spacing">4</property>
<child>
<object class="GtkImage" id="icon_image">
<property name="visible">True</property>
--
2.32.0
From 618e269230a71ae3ac84a35daaf15ad3db38f459 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 5 Aug 2021 15:24:58 +0200
Subject: [PATCH 32/33] power: Change "Balanced" power profile label
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4530#note_1241985
---
panels/power/cc-power-profile-row.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/panels/power/cc-power-profile-row.c b/panels/power/cc-power-profile-row.c
index a8458c366..9d7f1fe6b 100644
--- a/panels/power/cc-power-profile-row.c
+++ b/panels/power/cc-power-profile-row.c
@@ -185,7 +185,7 @@ cc_power_profile_row_new (CcPowerProfile power_profile)
subtext = _("High performance and power usage.");
break;
case CC_POWER_PROFILE_BALANCED:
- text = _("Balanced Power");
+ text = _("Balanced");
subtext = _("Standard performance and power usage.");
break;
case CC_POWER_PROFILE_POWER_SAVER:
--
2.32.0
From 98ed744dcefd8c4d8398b1489d0c583a4d5787d9 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 5 Aug 2021 15:24:58 +0200
Subject: [PATCH 33/33] power: Update power profile labels
Use "Balanced" instead of "Balanced Power", and make sure to add a
context for all the profiles for translators.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4530#note_1243075
---
panels/power/cc-power-profile-row.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/panels/power/cc-power-profile-row.c b/panels/power/cc-power-profile-row.c
index 9d7f1fe6b..f290caa10 100644
--- a/panels/power/cc-power-profile-row.c
+++ b/panels/power/cc-power-profile-row.c
@@ -181,15 +181,15 @@ cc_power_profile_row_new (CcPowerProfile power_profile)
switch (self->power_profile)
{
case CC_POWER_PROFILE_PERFORMANCE:
- text = _("Performance");
+ text = C_("Power profile", "Performance");
subtext = _("High performance and power usage.");
break;
case CC_POWER_PROFILE_BALANCED:
- text = _("Balanced");
+ text = C_("Power profile", "Balanced");
subtext = _("Standard performance and power usage.");
break;
case CC_POWER_PROFILE_POWER_SAVER:
- text = _("Power Saver");
+ text = C_("Power profile", "Power Saver");
subtext = _("Reduced performance and power usage.");
break;
default:
--
2.32.0