Login
Log in using an SSO provider:
Fedora Account System
Red Hat Associate
Red Hat Customer
Login using a Red Hat Bugzilla account
Forgot Password
Create an Account
Red Hat Bugzilla – Attachment 1815267 Details for
Bug 1994475
Backport power-profiles-daemon UI
Home
New
Search
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh92 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
[?]
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
power-profiles-backport-gnome-40.patch
power-profiles-backport-gnome-40.patch (text/plain), 230.08 KB, created by
Bastien Nocera
on 2021-08-18 15:37:33 UTC
(
hide
)
Description:
power-profiles-backport-gnome-40.patch
Filename:
MIME Type:
Creator:
Bastien Nocera
Created:
2021-08-18 15:37:33 UTC
Size:
230.08 KB
patch
obsolete
>From 2fdc09b4da3c4218bed51ea501ca16f41e863736 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Wed, 18 Aug 2021 17:12:28 +0200 >Subject: [PATCH 01/32] Revert "panels: Fix build with NetworkManager disabled" > >This reverts commit d9ea8554088ed225d603917bb3955b03e344dc4d. >--- > panels/power/cc-power-panel.c | 4 ---- > 1 file changed, 4 deletions(-) > >diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c >index e728df90e..a96616ea3 100644 >--- a/panels/power/cc-power-panel.c >+++ b/panels/power/cc-power-panel.c >@@ -1747,15 +1747,11 @@ 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, idle_delay_combo_changed_cb); > gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb); >-#ifdef HAVE_NETWORK_MANAGER > gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb); >-#endif > gtk_widget_class_bind_template_callback (widget_class, power_button_combo_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); >-#ifdef HAVE_NETWORK_MANAGER > gtk_widget_class_bind_template_callback (widget_class, wifi_switch_changed_cb); >-#endif > } > > static void >-- >2.31.1 > > >From 8ee885d02cb0fc79867e52269a2966567bd43728 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/32] 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 a96616ea3..86bd1bc62 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; > >@@ -170,8 +167,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; >@@ -870,60 +865,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 >@@ -1560,8 +1507,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"); >@@ -1781,7 +1726,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); >@@ -1791,7 +1735,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); >@@ -1810,7 +1753,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); >@@ -1818,15 +1760,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.31.1 > > >From 53e5e999b73a67919b23329f91d100d0829518af 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/32] 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 86bd1bc62..c804a735f 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) >@@ -1662,8 +1658,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); >@@ -1776,7 +1770,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.31.1 > > >From 6f6331fdebabc95991848f164a741cfddce9c7c0 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/32] 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 c804a735f..dddef7510 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; >@@ -578,6 +577,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) > { >@@ -870,25 +912,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); > } > >@@ -1172,6 +1207,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) > { >@@ -1192,10 +1258,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 >@@ -1654,7 +1721,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); >@@ -1684,7 +1750,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 "Blank screen" in "Power" panel.">1 minute</col> >- <col id="1">60</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">2 minutes</col> >- <col id="1">120</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">3 minutes</col> >- <col id="1">180</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">4 minutes</col> >- <col id="1">240</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">5 minutes</col> >- <col id="1">300</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">8 minutes</col> >- <col id="1">480</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">10 minutes</col> >- <col id="1">600</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">12 minutes</col> >- <col id="1">720</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" panel.">15 minutes</col> >- <col id="1">900</col> >- </row> >- <row> >- <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for "Blank screen" in "Power" 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.31.1 > > >From 4ec7014fb435edfa0b886b9c7db26652284bf32f 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/32] 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 dddef7510..d67d299fa 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; >@@ -928,25 +926,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); > } > >@@ -1049,10 +1040,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; >@@ -1064,20 +1056,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 >@@ -1636,10 +1636,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; > } >@@ -1726,8 +1733,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); >@@ -1753,7 +1758,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.31.1 > > >From 155c1e739c3a12e96993fc9d159a69f63496dc57 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/32] 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 d67d299fa..534451c10 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; >@@ -235,8 +233,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); >@@ -248,8 +244,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); >@@ -987,23 +981,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; > } > >@@ -1713,13 +1704,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); >@@ -1760,7 +1749,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.31.1 > > >From 07f91052b4526d0cf157b09e3db1a0a1cb2573de 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/32] 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 534451c10..c99f681e4 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; >@@ -260,7 +253,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) >@@ -391,10 +383,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); >@@ -1698,7 +1689,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); >@@ -1709,13 +1699,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); >@@ -1723,11 +1710,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); >@@ -1756,11 +1740,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 ()); >@@ -1777,46 +1756,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 & 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.31.1 > > >From 979d812c88384ed5bb0d6dd97f72bbd0b49c927c 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/32] 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 & 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 & 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.31.1 > > >From f3775a378bc7b6f665be2de147aa2ee802f76f64 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/32] 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.31.1 > > >From a70b474f22f2306c186ddf757f6579b2dfd0ac13 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/32] 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.31.1 > > >From a32623c105709cf0795126b39dab9cefb82eff94 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/32] 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 c99f681e4..9c55f8772 100644 >--- a/panels/power/cc-power-panel.c >+++ b/panels/power/cc-power-panel.c >@@ -889,7 +889,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.31.1 > > >From e400d6310765a65bdbe390fcbcb557fec71acc6e 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/32] 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 9c55f8772..861fd9eb4 100644 >--- a/panels/power/cc-power-panel.c >+++ b/panels/power/cc-power-panel.c >@@ -243,25 +243,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.31.1 > > >From a1baed4ce38ec5eebcbd17ec5d8cfb2548265995 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/32] 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 861fd9eb4..3540e397a 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.31.1 > > >From bbb78b1a8ff1fed8f876446ba8bab5400e0d5bee 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/32] 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 3540e397a..a4f2ac696 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; >@@ -1366,6 +1368,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, >@@ -1421,8 +1454,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) > { >@@ -1505,7 +1543,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; >@@ -1558,7 +1597,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; >@@ -1716,6 +1760,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.31.1 > > >From b9eec538ff18b98a208a774d0e1e378f3f99a670 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/32] 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 a4f2ac696..2ee3037bd 100644 >--- a/panels/power/cc-power-panel.c >+++ b/panels/power/cc-power-panel.c >@@ -1369,34 +1369,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 >@@ -1460,7 +1461,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) > { >@@ -1601,8 +1602,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; >@@ -1650,6 +1649,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.31.1 > > >From 4631151b3eb739ec5641dd1a07df2831f18fa08e 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/32] 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 2ee3037bd..d21486e99 100644 >--- a/panels/power/cc-power-panel.c >+++ b/panels/power/cc-power-panel.c >@@ -1344,6 +1344,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) >@@ -1428,18 +1440,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.31.1 > > >From 7c58444e55084bf2a9c29b4a21a6f2aeaa4b8757 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/32] 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 d21486e99..f3560ada0 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 >@@ -1384,12 +1385,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); >@@ -1409,6 +1423,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); > } > } > >@@ -1459,7 +1533,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.31.1 > > >From bf691a95a88a7bf28bc65344a05670c8e5af0f70 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/32] 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.31.1 > > >From 0199bca534274ea98f21107a5f7f82bdc533b56b 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/32] 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 f3560ada0..21183f39c 100644 >--- a/panels/power/cc-power-panel.c >+++ b/panels/power/cc-power-panel.c >@@ -1416,7 +1416,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.31.1 > > >From f018efc160907141f1a6c79f58f13c6808729c8a Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Wed, 21 Jul 2021 12:29:55 +0200 >Subject: [PATCH 20/32] 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.31.1 > > >From d68105282410b403f372f3d810e670544504173d Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Tue, 27 Jul 2021 15:49:26 +0200 >Subject: [PATCH 21/32] 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.31.1 > > >From fafd9dffd6bf091716775a28fd7b94c948e63ce0 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Thu, 22 Jul 2021 18:29:43 +0200 >Subject: [PATCH 22/32] 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.31.1 > > >From 4aa3bbec9b64c01f4c3f206185b5c1ac18af72bc Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Thu, 22 Jul 2021 18:33:41 +0200 >Subject: [PATCH 23/32] 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.31.1 > > >From a6e7ec5598aa78f103d01e863aef3efdd50aaff3 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Fri, 23 Jul 2021 16:09:54 +0200 >Subject: [PATCH 24/32] 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.31.1 > > >From 55bda067125ed8e320fc40b9e1a515a90805f5fe Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Mon, 26 Jul 2021 11:32:23 +0200 >Subject: [PATCH 25/32] 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.31.1 > > >From aa910624b12b0a9b14ec0f5d44e3a446174949f2 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Mon, 26 Jul 2021 11:34:41 +0200 >Subject: [PATCH 26/32] 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.31.1 > > >From fced2b1e7e3a269a27b11e4568e58d0cc823befe Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Mon, 26 Jul 2021 11:38:38 +0200 >Subject: [PATCH 27/32] 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.31.1 > > >From 0de84fde5e8cb16a73336bd7dcb04d60b7d0f144 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Tue, 3 Aug 2021 11:19:56 +0200 >Subject: [PATCH 28/32] 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.31.1 > > >From ddd4b60753d87cc191c02dee14f0202e180f72d3 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Wed, 4 Aug 2021 11:26:33 +0200 >Subject: [PATCH 29/32] 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.31.1 > > >From c9d44941fbb92734589fdec23c165afbd28ee1d3 Mon Sep 17 00:00:00 2001 >From: Allan Day <allanpday@gmail.com> >Date: Wed, 4 Aug 2021 11:28:14 +0200 >Subject: [PATCH 30/32] 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.31.1 > > >From 0aa9b811bde9448d9548867d6fc3e6d56a501334 Mon Sep 17 00:00:00 2001 >From: Bastien Nocera <hadess@hadess.net> >Date: Thu, 5 Aug 2021 15:24:58 +0200 >Subject: [PATCH 31/32] 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.31.1 > > >From bb5072cb6159bb26c3d042149f3d080baac12353 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/32] 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.31.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1994475
:
1815228
| 1815267