[Xfce4-commits] [xfce/xfce4-power-manager] 01/01: Hidden option to show percentage/remaining time in panel plugin (Bug #4499)

noreply at xfce.org noreply at xfce.org
Fri Jun 5 10:25:25 CEST 2015


This is an automated email from the git hooks/post-receive script.

ochosi pushed a commit to branch master
in repository xfce/xfce4-power-manager.

commit 441882e4af1cce692352697c4cef4fc9ed42f30b
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Fri Jun 5 10:21:56 2015 +0200

    Hidden option to show percentage/remaining time in panel plugin (Bug #4499)
    
    The property /xfce4-power-manager/show-panel-label has to be added to the channel
    xfce4-power-manager as INT. Then you can set the value from 0 to 3, where
    0: hides the label
    1: shows the percentage
    2: shows the remaining time and
    3: shows time and percentage.
    
    The format is not configurable for now and the label is hidden when UPower reports
    the status of the display device as "fully charged".
---
 common/xfpm-config.h                               |    1 +
 .../power-manager-plugin/power-manager-button.c    |  203 +++++++++++++++-----
 2 files changed, 161 insertions(+), 43 deletions(-)

diff --git a/common/xfpm-config.h b/common/xfpm-config.h
index 1a19194..1202cb5 100644
--- a/common/xfpm-config.h
+++ b/common/xfpm-config.h
@@ -76,6 +76,7 @@ G_BEGIN_DECLS
 #define BRIGHTNESS_SWITCH_SAVE               "brightness-switch-restore-on-exit"
 #define HANDLE_BRIGHTNESS_KEYS               "handle-brightness-keys"
 #define SHOW_BRIGHTNESS_POPUP                "show-brightness-popup"
+#define SHOW_PANEL_LABEL                     "show-panel-label"
 
 G_END_DECLS
 
diff --git a/panel-plugins/power-manager-plugin/power-manager-button.c b/panel-plugins/power-manager-plugin/power-manager-button.c
index fd47138..bb300ee 100644
--- a/panel-plugins/power-manager-plugin/power-manager-button.c
+++ b/panel-plugins/power-manager-plugin/power-manager-button.c
@@ -69,6 +69,8 @@ struct PowerManagerButtonPrivate
 
     /* The actual panel icon image */
     GtkWidget       *panel_icon_image;
+    GtkWidget       *panel_label;
+    GtkWidget       *hbox;
     /* Keep track of icon name to redisplay during size changes */
     gchar           *panel_icon_name;
     /* Keep track of the last icon size for use during updates */
@@ -93,6 +95,8 @@ struct PowerManagerButtonPrivate
      */
     gint32           brightness_min_level;
 
+    gint             show_panel_label;
+
     /* filter range value changed events for snappier UI feedback */
     guint            set_level_timeout;
 };
@@ -113,6 +117,7 @@ typedef enum
 {
     PROP_0 = 0,
     PROP_BRIGHTNESS_MIN_LEVEL,
+    PROP_SHOW_PANEL_LABEL,
 } POWER_MANAGER_BUTTON_PROPERTIES;
 
 enum {
@@ -129,6 +134,8 @@ static void power_manager_button_finalize   (GObject *object);
 static GList* find_device_in_list (PowerManagerButton *button, const gchar *object_path);
 static gboolean power_manager_button_device_icon_expose (GtkWidget *img, GdkEventExpose *event, gpointer userdata);
 static void power_manager_button_set_icon (PowerManagerButton *button);
+static void power_manager_button_set_label (PowerManagerButton *button, gdouble percentage, guint64 time_to_empty_or_full);
+static void power_manager_button_update_label (PowerManagerButton *button, UpDevice *device);
 static gboolean power_manager_button_press_event (GtkWidget *widget, GdkEventButton *event);
 static gboolean power_manager_button_menu_add_device (PowerManagerButton *button, BatteryDevice *battery_device, gboolean append);
 static void increase_brightness (PowerManagerButton *button);
@@ -187,6 +194,42 @@ get_display_device (PowerManagerButton *button)
     return display_device;
 }
 
+static GList*
+find_device_in_list (PowerManagerButton *button, const gchar *object_path)
+{
+    GList *item = NULL;
+
+    TRACE("entering");
+
+    g_return_val_if_fail ( POWER_MANAGER_IS_BUTTON(button), NULL );
+
+    for (item = g_list_first (button->priv->devices); item != NULL; item = g_list_next (item))
+    {
+        BatteryDevice *battery_device = item->data;
+        if (battery_device == NULL)
+        {
+            DBG("!battery_device");
+            continue;
+        }
+
+        if (g_strcmp0 (battery_device->object_path, object_path) == 0)
+            return item;
+    }
+
+    return NULL;
+}
+
+static void
+power_manager_button_set_icon (PowerManagerButton *button)
+{
+    gtk_image_set_from_icon_name (GTK_IMAGE (button->priv->panel_icon_image), button->priv->panel_icon_name, GTK_ICON_SIZE_BUTTON);
+    gtk_image_set_pixel_size (GTK_IMAGE (button->priv->panel_icon_image), button->priv->panel_icon_width);
+
+    /* Notify others the icon name changed */
+    g_signal_emit (button, __signals[SIG_ICON_NAME_CHANGED], 0);
+
+}
+
 static void
 power_manager_button_set_tooltip (PowerManagerButton *button)
 {
@@ -226,29 +269,57 @@ power_manager_button_set_tooltip (PowerManagerButton *button)
     g_signal_emit (button, __signals[SIG_TOOLTIP_CHANGED], 0);
 }
 
-static GList*
-find_device_in_list (PowerManagerButton *button, const gchar *object_path)
+const gchar *
+power_manager_button_get_icon_name (PowerManagerButton *button)
 {
-    GList *item = NULL;
-
-    TRACE("entering");
+    return button->priv->panel_icon_name;
+}
 
-    g_return_val_if_fail ( POWER_MANAGER_IS_BUTTON(button), NULL );
+const gchar *
+power_manager_button_get_tooltip (PowerManagerButton *button)
+{
+    return button->priv->tooltip;
+}
 
-    for (item = g_list_first (button->priv->devices); item != NULL; item = g_list_next (item))
+static void
+power_manager_button_set_label (PowerManagerButton *button, gdouble percentage,
+                                guint64 time_to_empty_or_full)
+{
+    gchar *label_string;
+    gint   hours;
+    gint   minutes;
+    gchar *remaining_time = NULL;
+
+    /* Create the short timestring in the format hh:mm */
+    minutes = (int) ( ( time_to_empty_or_full / 60.0 ) + 0.5 );
+    if (minutes < 60)
     {
-        BatteryDevice *battery_device = item->data;
-        if (battery_device == NULL)
-        {
-            DBG("!battery_device");
-            continue;
-        }
-
-        if (g_strcmp0 (battery_device->object_path, object_path) == 0)
-            return item;
+        if (minutes < 10)
+            remaining_time = g_strdup_printf ("0:0%d", minutes);
+        else
+            remaining_time = g_strdup_printf ("0:%d", minutes);
+    }
+    else
+    {
+        hours = minutes / 60;
+        minutes = minutes % 60;
+        if (minutes < 10)
+            remaining_time = g_strdup_printf ("%d:0%d", hours, minutes);
+        else
+            remaining_time = g_strdup_printf ("%d:%d", hours, minutes);
     }
 
-    return NULL;
+    /* Set the label accordingly or hide it if the battery is full */
+    if (button->priv->show_panel_label == 1)
+        label_string = g_strdup_printf ("%d%%", (int) percentage);
+    else if (button->priv->show_panel_label == 2)
+        label_string = g_strdup_printf ("%s", remaining_time);
+    else if (button->priv->show_panel_label == 3)
+        label_string = g_strdup_printf ("(%s, %d%%)", remaining_time, (int) percentage);
+
+    gtk_label_set_text (GTK_LABEL (button->priv->panel_label), label_string);
+
+    g_free (label_string);
 }
 
 static gboolean
@@ -406,7 +477,7 @@ power_manager_button_update_device_icon_and_details (PowerManagerButton *button,
     if (battery_device == display_device)
     {
         DBG("this is the display device, updating");
-        /* it is! update the panel button */
+        /* update the icon */
         g_free (button->priv->panel_icon_name);
 #ifdef XFCE_PLUGIN
         g_object_get (device,
@@ -417,8 +488,10 @@ power_manager_button_update_device_icon_and_details (PowerManagerButton *button,
 #endif
         button->priv->panel_icon_name = g_strdup (icon_name);
         power_manager_button_set_icon (button);
-        /* update tooltip */
+        /* update the tooltip */
         power_manager_button_set_tooltip (button);
+        /* update the label */
+        power_manager_button_update_label (button, device);
     }
     g_free (icon_name);
 
@@ -720,6 +793,12 @@ power_manager_button_set_property (GObject *object,
         case PROP_BRIGHTNESS_MIN_LEVEL:
             set_brightness_min_level (button, g_value_get_int (value));
             break;
+#ifdef XFCE_PLUGIN
+        case PROP_SHOW_PANEL_LABEL:
+            button->priv->show_panel_label = g_value_get_int (value);
+            power_manager_button_update_label (button, button->priv->display_device);
+            break;
+#endif
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
             break;
@@ -741,6 +820,11 @@ power_manager_button_get_property(GObject *object,
         case PROP_BRIGHTNESS_MIN_LEVEL:
             g_value_set_int (value, button->priv->brightness_min_level);
             break;
+#ifdef XFCE_PLUGIN
+        case PROP_SHOW_PANEL_LABEL:
+            g_value_set_int (value, button->priv->show_panel_label);
+            break;
+#endif
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
             break;
@@ -794,6 +878,12 @@ power_manager_button_class_init (PowerManagerButtonClass *klass)
                                                      BRIGHTNESS_SLIDER_MIN_LEVEL,
                                                      -1, G_MAXINT32, -1,
                                                      XFPM_PARAM_FLAGS));
+
+    g_object_class_install_property (object_class, PROP_SHOW_PANEL_LABEL,
+                                     g_param_spec_int (SHOW_PANEL_LABEL,
+                                                       NULL, NULL,
+                                                       0, G_MAXINT16, 3,
+                                                       XFPM_PARAM_FLAGS));
 #undef XFPM_PARAM_FLAGS
 }
 
@@ -900,33 +990,12 @@ power_manager_button_new (void)
     xfconf_g_property_bind (button->priv->channel,
                             PROPERTIES_PREFIX BRIGHTNESS_SLIDER_MIN_LEVEL, G_TYPE_INT,
                             G_OBJECT (button), BRIGHTNESS_SLIDER_MIN_LEVEL);
+    xfconf_g_property_bind (button->priv->channel, PROPERTIES_PREFIX SHOW_PANEL_LABEL, G_TYPE_INT,
+                            G_OBJECT (button), SHOW_PANEL_LABEL);
 
     return GTK_WIDGET (button);
 }
 
-static void
-power_manager_button_set_icon (PowerManagerButton *button)
-{
-    gtk_image_set_from_icon_name (GTK_IMAGE (button->priv->panel_icon_image), button->priv->panel_icon_name, GTK_ICON_SIZE_BUTTON);
-    gtk_image_set_pixel_size (GTK_IMAGE (button->priv->panel_icon_image), button->priv->panel_icon_width);
-
-    /* Notify others the icon name changed */
-    g_signal_emit (button, __signals[SIG_ICON_NAME_CHANGED], 0);
-
-}
-
-const gchar *
-power_manager_button_get_icon_name (PowerManagerButton *button)
-{
-    return button->priv->panel_icon_name;
-}
-
-const gchar *
-power_manager_button_get_tooltip (PowerManagerButton *button)
-{
-    return button->priv->tooltip;
-}
-
 static gboolean
 power_manager_button_press_event (GtkWidget *widget, GdkEventButton *event)
 {
@@ -1006,6 +1075,7 @@ void
 power_manager_button_show (PowerManagerButton *button)
 {
     GtkWidget *mi;
+    GtkWidget *hbox;
 
     g_return_if_fail (POWER_MANAGER_IS_BUTTON (button));
 
@@ -1015,7 +1085,12 @@ power_manager_button_show (PowerManagerButton *button)
 #endif
 
     button->priv->panel_icon_image = gtk_image_new ();
-    gtk_container_add (GTK_CONTAINER (button), button->priv->panel_icon_image);
+    button->priv->panel_label = gtk_label_new ("");
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (button->priv->panel_icon_image), TRUE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (button->priv->panel_label), TRUE, FALSE, 0);
+
+    gtk_container_add (GTK_CONTAINER (button), GTK_WIDGET (hbox));
 
     /* help dialog */
     mi = gtk_menu_item_new_with_mnemonic (_("_Help"));
@@ -1037,6 +1112,8 @@ power_manager_button_show (PowerManagerButton *button)
 #endif
 
     gtk_widget_show_all (GTK_WIDGET(button));
+
+    power_manager_button_update_label (button, button->priv->display_device);
     power_manager_button_set_tooltip (button);
 
     /* Add all the devcies currently attached to the system */
@@ -1044,6 +1121,46 @@ power_manager_button_show (PowerManagerButton *button)
 }
 
 static void
+power_manager_button_update_label (PowerManagerButton *button, UpDevice *device)
+{
+    guint state;
+    gdouble percentage;
+    guint64 time_to_empty;
+    guint64 time_to_full;
+
+    if (!POWER_MANAGER_IS_BUTTON (button) || !UP_IS_DEVICE (device))
+        return;
+
+#ifdef XFCE_PLUGIN
+    if (button->priv->show_panel_label <= 0 || button->priv->show_panel_label >3)
+    {
+        gtk_widget_hide (GTK_WIDGET (button->priv->panel_label));
+        power_manager_button_size_changed_cb (button->priv->plugin,
+                                              xfce_panel_plugin_get_size (button->priv->plugin),
+                                              button);
+        return;
+    }
+    else
+        gtk_widget_show (GTK_WIDGET (button->priv->panel_label));
+#endif
+
+    g_object_get (device,
+                  "state", &state,
+                  "percentage", &percentage,
+                  "time-to-empty", &time_to_empty,
+                  "time-to-full", &time_to_full,
+                  NULL);
+
+    /* Hide the label if the battery is fully charged */
+    if (state == UP_DEVICE_STATE_CHARGING)
+        power_manager_button_set_label (button, percentage, time_to_full);
+    else if (state == UP_DEVICE_STATE_FULLY_CHARGED)
+        gtk_widget_hide (GTK_WIDGET (button->priv->panel_label));
+    else
+        power_manager_button_set_label (button, percentage, time_to_empty);
+}
+
+static void
 menu_destroyed_cb(GtkMenuShell *menu, gpointer user_data)
 {
     PowerManagerButton *button = POWER_MANAGER_BUTTON (user_data);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list