summaryrefslogtreecommitdiff
path: root/panels/power/cc-power-panel.c
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@gnome.org>2013-11-14 12:03:03 +0100
committerDebarshi Ray <debarshir@gnome.org>2014-02-17 19:53:29 +0100
commitd413fcc82e2764a86fbc9af3f1dc3aef5034fa46 (patch)
treed8c91ae6383d5288e6474ae47002684f9c88f05a /panels/power/cc-power-panel.c
parentdcdf571127dd788188f5f769aa1b9a82e3947f5c (diff)
downloadgnome-control-center-d413fcc82e2764a86fbc9af3f1dc3aef5034fa46.tar.gz
Revert "power: Use the new display device"
This reverts commit 93997f5ee82107e710d1d22b55d6d1137ab97127.
Diffstat (limited to 'panels/power/cc-power-panel.c')
-rw-r--r--panels/power/cc-power-panel.c86
1 files changed, 73 insertions, 13 deletions
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index f636f9010..dfde0ab90 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -625,9 +625,22 @@ up_client_changed (UpClient *client,
GList *children, *l;
gint i;
UpDeviceKind kind;
+ UpDeviceState state;
guint n_batteries;
gboolean on_ups;
UpDevice *composite;
+ gdouble percentage = 0.0;
+ gdouble energy = 0.0;
+ gdouble energy_full = 0.0;
+ gdouble energy_rate = 0.0;
+ gdouble energy_total = 0.0;
+ gdouble energy_full_total = 0.0;
+ gdouble energy_rate_total = 0.0;
+ gint64 time_to_empty = 0;
+ gint64 time_to_full = 0;
+ gboolean is_charging = FALSE;
+ gboolean is_discharging = FALSE;
+ gboolean is_fully_charged = TRUE;
gchar *s;
children = gtk_container_get_children (GTK_CONTAINER (priv->battery_list));
@@ -692,21 +705,38 @@ up_client_changed (UpClient *client,
on_ups = FALSE;
n_batteries = 0;
- composite = up_client_get_display_device (priv->up_client);
- g_object_get (composite, "kind", &kind, NULL);
- if (kind == UP_DEVICE_KIND_UPS)
- {
- on_ups = TRUE;
- }
- else
+ composite = up_device_new ();
+ g_object_set (composite,
+ "kind", UP_DEVICE_KIND_BATTERY,
+ "is-rechargeable", TRUE,
+ "native-path", "dummy:composite_battery",
+ "power-supply", TRUE,
+ "is-present", TRUE,
+ NULL);
+ for (i = 0; priv->devices != NULL && i < priv->devices->len; i++)
{
- /* Count the batteries */
- for (i = 0; priv->devices != NULL && i < priv->devices->len; i++)
+ UpDevice *device = (UpDevice*) g_ptr_array_index (priv->devices, i);
+ g_object_get (device,
+ "kind", &kind,
+ "state", &state,
+ "energy", &energy,
+ "energy-full", &energy_full,
+ "energy-rate", &energy_rate,
+ NULL);
+ if (kind == UP_DEVICE_KIND_UPS && state == UP_DEVICE_STATE_DISCHARGING)
+ on_ups = TRUE;
+ if (kind == UP_DEVICE_KIND_BATTERY)
{
- UpDevice *device = (UpDevice*) g_ptr_array_index (priv->devices, i);
- g_object_get (device, "kind", &kind, NULL);
- if (kind == UP_DEVICE_KIND_BATTERY)
- n_batteries++;
+ if (state == UP_DEVICE_STATE_CHARGING)
+ is_charging = TRUE;
+ if (state == UP_DEVICE_STATE_DISCHARGING)
+ is_discharging = TRUE;
+ if (state != UP_DEVICE_STATE_FULLY_CHARGED)
+ is_fully_charged = FALSE;
+ energy_total += energy;
+ energy_full_total += energy_full;
+ energy_rate_total += energy_rate;
+ n_batteries++;
}
}
@@ -717,6 +747,36 @@ up_client_changed (UpClient *client,
gtk_label_set_label (GTK_LABEL (priv->battery_heading), s);
g_free (s);
+ if (energy_full_total > 0.0)
+ percentage = 100.0 * energy_total / energy_full_total;
+
+ if (is_charging)
+ state = UP_DEVICE_STATE_CHARGING;
+ else if (is_discharging)
+ state = UP_DEVICE_STATE_DISCHARGING;
+ else if (is_fully_charged)
+ state = UP_DEVICE_STATE_FULLY_CHARGED;
+ else
+ state = UP_DEVICE_STATE_UNKNOWN;
+
+ if (energy_rate_total > 0)
+ {
+ if (state == UP_DEVICE_STATE_DISCHARGING)
+ time_to_empty = 3600 * (energy_total / energy_rate_total);
+ else if (state == UP_DEVICE_STATE_CHARGING)
+ time_to_full = 3600 * ((energy_full_total - energy_total) / energy_rate_total);
+ }
+
+ g_object_set (composite,
+ "energy", energy_total,
+ "energy-full", energy_full_total,
+ "energy-rate", energy_rate_total,
+ "time-to-empty", time_to_empty,
+ "time-to-full", time_to_full,
+ "percentage", percentage,
+ "state", state,
+ NULL);
+
if (!on_ups && n_batteries > 1)
set_primary (self, composite);