mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-04-03 05:40:34 +02:00
Refresh all battery devices after a power event, and again after a short delay. Fixes rh#512995
This commit is contained in:
parent
969c6a928a
commit
fbbc823a48
3 changed files with 50 additions and 3 deletions
|
|
@ -102,7 +102,10 @@ G_DEFINE_TYPE (DkpDaemon, dkp_daemon, G_TYPE_OBJECT)
|
|||
#define DKP_DAEMON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DKP_TYPE_DAEMON, DkpDaemonPrivate))
|
||||
|
||||
/* if using more memory compared to usable swap, disable hibernate */
|
||||
#define DKP_DAEMON_SWAP_WATERLINE 80.0f /* % */
|
||||
#define DKP_DAEMON_SWAP_WATERLINE 80.0f /* % */
|
||||
|
||||
/* refresh all the devices after this much time when on-battery has changed */
|
||||
#define DKP_DAEMON_ON_BATTERY_REFRESH_DEVICES_DELAY 3 /* seconds */
|
||||
|
||||
/**
|
||||
* dkp_daemon_set_lid_is_closed:
|
||||
|
|
@ -616,6 +619,43 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_daemon_refresh_battery_devices:
|
||||
**/
|
||||
static gboolean
|
||||
dkp_daemon_refresh_battery_devices (DkpDaemon *daemon)
|
||||
{
|
||||
guint i;
|
||||
const GPtrArray *array;
|
||||
DkpDevice *device;
|
||||
DkpDeviceType type;
|
||||
|
||||
/* refresh all devices in array */
|
||||
array = dkp_device_list_get_array (daemon->priv->power_devices);
|
||||
for (i=0; i<array->len; i++) {
|
||||
device = (DkpDevice *) g_ptr_array_index (array, i);
|
||||
/* only refresh battery devices */
|
||||
g_object_get (device,
|
||||
"type", &type,
|
||||
NULL);
|
||||
if (type == DKP_DEVICE_TYPE_BATTERY)
|
||||
dkp_device_refresh_internal (device);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_daemon_refresh_battery_devices_cb:
|
||||
**/
|
||||
static gboolean
|
||||
dkp_daemon_refresh_battery_devices_cb (DkpDaemon *daemon)
|
||||
{
|
||||
egg_debug ("doing the delayed refresh");
|
||||
dkp_daemon_refresh_battery_devices (daemon);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_daemon_device_changed:
|
||||
**/
|
||||
|
|
@ -644,6 +684,13 @@ gpk_daemon_device_changed (DkpDaemon *daemon, GUdevDevice *d, gboolean synthesiz
|
|||
egg_debug ("now on_battery = %s", ret ? "yes" : "no");
|
||||
g_signal_emit (daemon, signals[CHANGED_SIGNAL], 0);
|
||||
|
||||
/* refresh all the devices now */
|
||||
dkp_daemon_refresh_battery_devices (daemon);
|
||||
|
||||
/* refresh again in a little while */
|
||||
g_timeout_add_seconds (DKP_DAEMON_ON_BATTERY_REFRESH_DEVICES_DELAY,
|
||||
(GSourceFunc) dkp_daemon_refresh_battery_devices_cb, daemon);
|
||||
|
||||
/* set pm-utils power policy */
|
||||
dkp_daemon_set_pmutils_powersave (daemon, daemon->priv->on_battery);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ struct DkpDevicePrivate
|
|||
static void dkp_device_class_init (DkpDeviceClass *klass);
|
||||
static void dkp_device_init (DkpDevice *device);
|
||||
static gboolean dkp_device_register_device (DkpDevice *device);
|
||||
static gboolean dkp_device_refresh_internal (DkpDevice *device);
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
@ -703,7 +702,7 @@ out:
|
|||
/**
|
||||
* dkp_device_refresh_internal:
|
||||
**/
|
||||
static gboolean
|
||||
gboolean
|
||||
dkp_device_refresh_internal (DkpDevice *device)
|
||||
{
|
||||
gboolean ret;
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ gboolean dkp_device_get_low_battery (DkpDevice *device,
|
|||
gboolean dkp_device_get_online (DkpDevice *device,
|
||||
gboolean *online);
|
||||
void dkp_device_emit_changed (DkpDevice *device);
|
||||
gboolean dkp_device_refresh_internal (DkpDevice *device);
|
||||
|
||||
/* exported methods */
|
||||
gboolean dkp_device_refresh (DkpDevice *device,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue