diff options
author | Debarshi Ray <debarshir@gnome.org> | 2013-11-14 12:03:03 +0100 |
---|---|---|
committer | Debarshi Ray <debarshir@gnome.org> | 2014-02-17 19:53:29 +0100 |
commit | d413fcc82e2764a86fbc9af3f1dc3aef5034fa46 (patch) | |
tree | d8c91ae6383d5288e6474ae47002684f9c88f05a /panels/power/cc-power-panel.c | |
parent | dcdf571127dd788188f5f769aa1b9a82e3947f5c (diff) | |
download | gnome-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.c | 86 |
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); |