summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2014-04-23 15:34:24 +0200
committerBastien Nocera <hadess@hadess.net>2014-04-23 15:48:48 +0200
commitdbf7eb7e557674a9b888a088f1cae4f36b77e14d (patch)
tree67d467f9d21c8bbc0e9fe89213a9f47eefc7ae9e
parentd650df8af80b734f6c44a0acb2080493330b8836 (diff)
downloadupower-dbf7eb7e557674a9b888a088f1cae4f36b77e14d.tar.gz
daemon: Fix shutdown on boot on some machines
On the Lenovo A600 all-in-one, there's a HCI/HID dual-mode Broadcom device which will try to get the battery level of the supplied mouse and keyboard, but will usually fail to do so. So we have a battery of type "battery" (it's not either a mouse or a keyboard, as it's supposed to handle both) but our display device battery code doesn't check whether those batteries are power supplies or not, using this "empty" (0% after the check timed out) battery in the shutdown policy. Check better for power supply devices, not all the "battery" types are power supply batteries, they might be non-power supply ones from unknown device types.
-rw-r--r--src/up-daemon.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/up-daemon.c b/src/up-daemon.c
index df0a7b7..ef90be4 100644
--- a/src/up-daemon.c
+++ b/src/up-daemon.c
@@ -208,6 +208,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
gdouble energy_rate = 0.0;
gint64 time_to_empty = 0;
gint64 time_to_full = 0;
+ gboolean power_supply = FALSE;
device = g_ptr_array_index (array, i);
g_object_get (device,
@@ -219,6 +220,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
"energy-rate", &energy_rate,
"time-to-empty", &time_to_empty,
"time-to-full", &time_to_full,
+ "power-supply", &power_supply,
NULL);
/* When we have a UPS, it's either a desktop, and
@@ -236,7 +238,8 @@ up_daemon_update_display_battery (UpDaemon *daemon)
is_present_total = TRUE;
break;
}
- if (kind != UP_DEVICE_KIND_BATTERY)
+ if (kind != UP_DEVICE_KIND_BATTERY ||
+ power_supply == FALSE)
continue;
/* If one battery is charging, then the composite is charging
@@ -389,17 +392,21 @@ up_daemon_refresh_battery_devices (UpDaemon *daemon)
guint i;
GPtrArray *array;
UpDevice *device;
- UpDeviceKind type;
/* refresh all devices in array */
array = up_device_list_get_array (daemon->priv->power_devices);
for (i=0; i<array->len; i++) {
+ UpDeviceKind type;
+ gboolean power_supply;
+
device = (UpDevice *) g_ptr_array_index (array, i);
/* only refresh battery devices */
g_object_get (device,
"type", &type,
+ "power-supply", &power_supply,
NULL);
- if (type == UP_DEVICE_KIND_BATTERY)
+ if (type == UP_DEVICE_KIND_BATTERY &&
+ power_supply)
up_device_refresh_internal (device);
}
g_ptr_array_unref (array);