[gnome-control-center/wip/hadess/power-fixes: 58/61] power: Add Battery percentage preference
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/hadess/power-fixes: 58/61] power: Add Battery percentage preference
- Date: Mon, 6 Jul 2020 15:27:22 +0000 (UTC)
commit 3649efbac8725e89128d8eda4f662d9f701ffbd5
Author: Bastien Nocera <hadess hadess net>
Date: Mon Jul 6 13:31:32 2020 +0200
power: Add Battery percentage preference
This matches the preferences available in a lot of other OSes, whether
desktop or mobile, and can help with identifying the state of the
battery quicker for some people, as a number might be parsed quicker
than an icon/colour combination.
Closes: #481
panels/power/cc-power-panel.c | 88 ++++++++++++++++++++++++++++++-------------
1 file changed, 62 insertions(+), 26 deletions(-)
---
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index c9cc0c245..e0595f21c 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -59,6 +59,7 @@ struct _CcPowerPanel
GSettings *gsd_settings;
GSettings *session_settings;
+ GSettings *interface_settings;
GtkWidget *main_scroll;
GtkWidget *main_box;
GtkWidget *vbox_power;
@@ -147,6 +148,7 @@ cc_power_panel_dispose (GObject *object)
g_clear_pointer (&self->chassis_type, g_free);
g_clear_object (&self->gsd_settings);
g_clear_object (&self->session_settings);
+ g_clear_object (&self->interface_settings);
g_clear_pointer (&self->automatic_suspend_dialog, gtk_widget_destroy);
g_clear_object (&self->screen_proxy);
g_clear_object (&self->kbd_proxy);
@@ -2212,6 +2214,37 @@ can_suspend_or_hibernate (CcPowerPanel *self,
return g_strcmp0 (s, "yes") == 0;
}
+static void
+add_battery_percentage (CcPowerPanel *self)
+{
+ GtkWidget *widget, *box, *label, *title;
+ GtkWidget *row;
+ GtkWidget *sw;
+ g_autofree gchar *s = NULL;
+
+ if (!self->has_batteries)
+ return;
+
+ /* Show Battery Percentage */
+ row = no_prelight_row_new ();
+ gtk_widget_show (row);
+ box = row_box_new ();
+ gtk_container_add (GTK_CONTAINER (row), box);
+ title = row_title_new (_("Show Battery _Percentage"), NULL, &label);
+ gtk_box_pack_start (GTK_BOX (box), title, TRUE, TRUE, 0);
+
+ sw = gtk_switch_new ();
+ gtk_widget_show (sw);
+ g_settings_bind (self->interface_settings, "show-battery-percentage",
+ sw, "active",
+ G_SETTINGS_BIND_DEFAULT);
+ gtk_widget_set_valign (sw, GTK_ALIGN_CENTER);
+ gtk_box_pack_start (GTK_BOX (box), sw, FALSE, TRUE, 0);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), sw);
+ gtk_container_add (GTK_CONTAINER (widget), row);
+ gtk_size_group_add_widget (self->row_sizegroup, row);
+}
+
static void
add_general_section (CcPowerPanel *self)
{
@@ -2224,30 +2257,6 @@ add_general_section (CcPowerPanel *self)
GsdPowerButtonActionType button_value;
gboolean can_suspend, can_hibernate;
- can_suspend = can_suspend_or_hibernate (self, "CanSuspend");
- can_hibernate = can_suspend_or_hibernate (self, "CanHibernate");
-
- /* If the machine can neither suspend nor hibernate, we have nothing to do */
- if (!can_suspend && !can_hibernate)
- return;
-
- /* The default values for these settings are unfortunate for us;
- * timeout == 0, action == suspend means 'do nothing' - just
- * as timout === anything, action == nothing.
- * For our switch/combobox combination, the second choice works
- * much better, so translate the first to the second here.
- */
- if (g_settings_get_int (self->gsd_settings, "sleep-inactive-ac-timeout") == 0)
- {
- g_settings_set_enum (self->gsd_settings, "sleep-inactive-ac-type", GSD_POWER_ACTION_NOTHING);
- g_settings_set_int (self->gsd_settings, "sleep-inactive-ac-timeout", 3600);
- }
- if (g_settings_get_int (self->gsd_settings, "sleep-inactive-battery-timeout") == 0)
- {
- g_settings_set_enum (self->gsd_settings, "sleep-inactive-battery-type", GSD_POWER_ACTION_NOTHING);
- g_settings_set_int (self->gsd_settings, "sleep-inactive-battery-timeout", 1800);
- }
-
/* Frame header */
s = g_markup_printf_escaped ("<b>%s</b>", _("Suspend & Power Button"));
label = gtk_label_new (s);
@@ -2283,6 +2292,26 @@ add_general_section (CcPowerPanel *self)
gtk_container_add (GTK_CONTAINER (box), widget);
gtk_box_pack_start (GTK_BOX (self->vbox_power), box, FALSE, TRUE, 0);
+ can_suspend = can_suspend_or_hibernate (self, "CanSuspend");
+ can_hibernate = can_suspend_or_hibernate (self, "CanHibernate");
+
+ /* The default values for these settings are unfortunate for us;
+ * timeout == 0, action == suspend means 'do nothing' - just
+ * as timout === anything, action == nothing.
+ * For our switch/combobox combination, the second choice works
+ * much better, so translate the first to the second here.
+ */
+ if (g_settings_get_int (self->gsd_settings, "sleep-inactive-ac-timeout") == 0)
+ {
+ g_settings_set_enum (self->gsd_settings, "sleep-inactive-ac-type", GSD_POWER_ACTION_NOTHING);
+ g_settings_set_int (self->gsd_settings, "sleep-inactive-ac-timeout", 3600);
+ }
+ if (g_settings_get_int (self->gsd_settings, "sleep-inactive-battery-timeout") == 0)
+ {
+ g_settings_set_enum (self->gsd_settings, "sleep-inactive-battery-type", GSD_POWER_ACTION_NOTHING);
+ g_settings_set_int (self->gsd_settings, "sleep-inactive-battery-timeout", 1800);
+ }
+
/* Automatic suspend row */
if (can_suspend)
{
@@ -2338,10 +2367,14 @@ add_general_section (CcPowerPanel *self)
update_automatic_suspend_label (self);
}
- if (g_strcmp0 (self->chassis_type, "vm") == 0 ||
+ if ((!can_hibernate && !can_suspend) ||
+ g_strcmp0 (self->chassis_type, "vm") == 0 ||
g_strcmp0 (self->chassis_type, "tablet") == 0 ||
g_strcmp0 (self->chassis_type, "handset") == 0)
- return;
+ {
+ add_battery_percentage (self);
+ return;
+ }
/* Power button row */
row = no_prelight_row_new ();
@@ -2367,6 +2400,8 @@ add_general_section (CcPowerPanel *self)
gtk_label_set_mnemonic_widget (GTK_LABEL (label), self->power_button_combo);
gtk_container_add (GTK_CONTAINER (widget), row);
gtk_size_group_add_widget (self->row_sizegroup, row);
+
+ add_battery_percentage (self);
}
static gint
@@ -2519,6 +2554,7 @@ cc_power_panel_init (CcPowerPanel *self)
self->gsd_settings = g_settings_new ("org.gnome.settings-daemon.plugins.power");
self->session_settings = g_settings_new ("org.gnome.desktop.session");
+ self->interface_settings = g_settings_new ("org.gnome.desktop.interface");
self->battery_row_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
self->row_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]