mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-06-08 11:28:20 +02:00
Query the kernel to decide if we have hibernate and suspend support
This commit is contained in:
parent
e44e8b0b79
commit
9805175e6e
1 changed files with 37 additions and 5 deletions
|
|
@ -85,6 +85,8 @@ struct DkpDaemonPrivate
|
|||
GUdevClient *gudev_client;
|
||||
gboolean lid_is_closed;
|
||||
gboolean lid_is_present;
|
||||
gboolean can_suspend;
|
||||
gboolean can_hibernate;
|
||||
};
|
||||
|
||||
static void dkp_daemon_class_init (DkpDaemonClass *klass);
|
||||
|
|
@ -200,13 +202,11 @@ dkp_daemon_get_property (GObject *object,
|
|||
break;
|
||||
|
||||
case PROP_CAN_SUSPEND:
|
||||
/* TODO: for now assume we can always suspend */
|
||||
g_value_set_boolean (value, TRUE);
|
||||
g_value_set_boolean (value, daemon->priv->can_suspend);
|
||||
break;
|
||||
|
||||
case PROP_CAN_HIBERNATE:
|
||||
/* TODO for now assume we can always hibernate */
|
||||
g_value_set_boolean (value, TRUE);
|
||||
g_value_set_boolean (value, daemon->priv->can_hibernate);
|
||||
break;
|
||||
|
||||
case PROP_ON_BATTERY:
|
||||
|
|
@ -303,7 +303,7 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
|
|||
G_PARAM_READABLE));
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_CAN_SUSPEND,
|
||||
PROP_CAN_HIBERNATE,
|
||||
g_param_spec_boolean ("can-hibernate",
|
||||
"Can Hibernate",
|
||||
"Whether the system can hibernate",
|
||||
|
|
@ -339,6 +339,33 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
|
|||
dbus_g_error_domain_register (DKP_DAEMON_ERROR, NULL, DKP_DAEMON_TYPE_ERROR);
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_daemon_check_state:
|
||||
**/
|
||||
static gboolean
|
||||
dkp_daemon_check_state (DkpDaemon *daemon)
|
||||
{
|
||||
gchar *contents = NULL;
|
||||
GError *error = NULL;
|
||||
gboolean ret;
|
||||
const gchar *filename = "/sys/power/state";
|
||||
|
||||
/* see what kernel can do */
|
||||
ret = g_file_get_contents (filename, &contents, NULL, &error);
|
||||
if (!ret) {
|
||||
egg_warning ("failed to open %s: %s", filename, error->message);
|
||||
g_error_free (error);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* does the kernel advertise this */
|
||||
daemon->priv->can_suspend = (g_strstr_len (contents, -1, "mem") != NULL);
|
||||
daemon->priv->can_hibernate = (g_strstr_len (contents, -1, "disk") != NULL);
|
||||
out:
|
||||
g_free (contents);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_daemon_init:
|
||||
**/
|
||||
|
|
@ -349,6 +376,11 @@ dkp_daemon_init (DkpDaemon *daemon)
|
|||
daemon->priv->polkit = dkp_polkit_new ();
|
||||
daemon->priv->lid_is_present = FALSE;
|
||||
daemon->priv->lid_is_closed = FALSE;
|
||||
daemon->priv->can_suspend = FALSE;
|
||||
daemon->priv->can_hibernate = FALSE;
|
||||
|
||||
/* check if we have support */
|
||||
dkp_daemon_check_state (daemon);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue