[gnome-control-center/wip/hadess/power-fixes: 6/9] power: Add Battery percentage preference



commit 6a65dcf693a3c71d7554357b027d5cdc8de80d00
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]