openbsd-ports/sysutils/upower/patches/patch-src_openbsd_up-backend_c
dcoppa d565673e24 Make upower behave like apmd (check for minutes_left to be > 0, not >= 0)
While here, reword comment a little bit.

OK ajacoutot@
2011-07-08 08:16:09 +00:00

81 lines
2.7 KiB
Plaintext

$OpenBSD: patch-src_openbsd_up-backend_c,v 1.3 2011/07/08 08:16:09 dcoppa Exp $
Return true if apm_fd wasn't initialized yet - fixes history
XXX Sometimes apm(4) is not fast enough in calculating the right
time-to-empty value and 'minutes_left' is left as -1, causing
gnome-power-manager to show something like "1193046 hours 27 minutes
of battery power remaining". To avoid this, check that battery is
discharging *and* minutes_left is positive, otherwise set
new_time_to_emtpy to zero XXX
Properly initialize update-time when creating devices
--- src/openbsd/up-backend.c.orig Tue May 31 12:07:03 2011
+++ src/openbsd/up-backend.c Thu Jul 7 19:24:21 2011
@@ -62,7 +62,7 @@ enum {
static guint signals [SIGNAL_LAST] = { 0 };
-int apm_fd; /* ugly global.. needs to move to a device native object */
+int apm_fd = 0; /* ugly global.. needs to move to a device native object */
G_DEFINE_TYPE (UpBackend, up_backend, G_TYPE_OBJECT)
@@ -324,8 +324,11 @@ up_backend_update_battery_state(UpDevice* device)
if (a.ac_state == APM_AC_ON)
new_state = UP_DEVICE_STATE_CHARGING;
- // zero out new_time_to empty if we're not discharging
- new_time_to_empty = (new_state == UP_DEVICE_STATE_DISCHARGING ? a.minutes_left : 0);
+ // zero out new_time_to_empty if we're not discharging, if minutes_left has a negative value
+ if (new_state == UP_DEVICE_STATE_DISCHARGING && (int)a.minutes_left > 0)
+ new_time_to_empty = a.minutes_left;
+ else
+ new_time_to_empty = 0;
if (cur_state != new_state ||
percentage != (gdouble) a.battery_life ||
@@ -424,6 +427,11 @@ up_apm_device_refresh(UpDevice* device)
GTimeVal timeval;
gboolean ret;
+ if (apm_fd == 0) {
+ g_debug("refresh callback called but apm_fd is not initialized yet");
+ return TRUE;
+ }
+
g_object_get (device, "type", &type, NULL);
switch (type) {
@@ -544,6 +552,7 @@ static void
up_backend_init (UpBackend *backend)
{
GError *err = NULL;
+ GTimeVal timeval;
UpDeviceClass *device_class;
backend->priv = UP_BACKEND_GET_PRIVATE (backend);
@@ -573,6 +582,7 @@ up_backend_init (UpBackend *backend)
}
/* setup dummy */
+ g_get_current_time (&timeval);
g_object_set (backend->priv->battery,
"type", UP_DEVICE_KIND_BATTERY,
"power-supply", TRUE,
@@ -582,11 +592,13 @@ up_backend_init (UpBackend *backend)
"state", UP_DEVICE_STATE_UNKNOWN,
"percentage", 0.0f,
"time-to-empty", (gint64) 0,
+ "update-time", (guint64) timeval.tv_sec,
(void*) NULL);
g_object_set (backend->priv->ac,
"type", UP_DEVICE_KIND_LINE_POWER,
"online", TRUE,
"power-supply", TRUE,
+ "update-time", (guint64) timeval.tv_sec,
(void*) NULL);
} else {
backend->priv->ac = NULL;