mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-02-03 23:00:32 +01:00
Add a property lid-is-closed so that we can finally drop the HAL dep in g-p-m and x-p-m
This commit is contained in:
parent
dccd5fc898
commit
7bd2dfefcb
7 changed files with 104 additions and 7 deletions
|
|
@ -48,6 +48,7 @@ struct DkpClientPrivate
|
|||
gchar *daemon_version;
|
||||
gboolean can_suspend;
|
||||
gboolean can_hibernate;
|
||||
gboolean lid_is_closed;
|
||||
gboolean on_battery;
|
||||
gboolean on_low_battery;
|
||||
};
|
||||
|
|
@ -238,6 +239,13 @@ dkp_client_ensure_properties (DkpClient *client)
|
|||
}
|
||||
client->priv->can_hibernate = g_value_get_boolean (value);
|
||||
|
||||
value = g_hash_table_lookup (props, "lid-is-closed");
|
||||
if (value == NULL) {
|
||||
g_warning ("No 'lid-is-closed' property");
|
||||
goto out;
|
||||
}
|
||||
client->priv->lid_is_closed = g_value_get_boolean (value);
|
||||
|
||||
value = g_hash_table_lookup (props, "on-battery");
|
||||
if (value == NULL) {
|
||||
g_warning ("No 'on-battery' property");
|
||||
|
|
@ -282,6 +290,17 @@ dkp_client_can_hibernate (DkpClient *client)
|
|||
return client->priv->can_hibernate;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_client_lid_is_closed:
|
||||
**/
|
||||
gboolean
|
||||
dkp_client_lid_is_closed (DkpClient *client)
|
||||
{
|
||||
g_return_val_if_fail (DKP_IS_CLIENT (client), FALSE);
|
||||
dkp_client_ensure_properties (client);
|
||||
return client->priv->lid_is_closed;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_client_can_suspend:
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ gboolean dkp_client_hibernate (DkpClient *client,
|
|||
GError **error);
|
||||
const gchar *dkp_client_get_daemon_version (DkpClient *client);
|
||||
gboolean dkp_client_can_hibernate (DkpClient *client);
|
||||
gboolean dkp_client_lid_is_closed (DkpClient *client);
|
||||
gboolean dkp_client_can_suspend (DkpClient *client);
|
||||
gboolean dkp_client_on_battery (DkpClient *client);
|
||||
gboolean dkp_client_on_low_battery (DkpClient *client);
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ devkit_power_daemon_SOURCES = \
|
|||
dkp-device-list.h dkp-device-list.c \
|
||||
dkp-supply.h dkp-supply.c \
|
||||
dkp-csr.h dkp-csr.c \
|
||||
dkp-input.h dkp-input.c \
|
||||
dkp-wup.h dkp-wup.c \
|
||||
dkp-hid.h dkp-hid.c \
|
||||
dkp-qos.h dkp-qos.c \
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include "dkp-csr.h"
|
||||
#include "dkp-wup.h"
|
||||
#include "dkp-hid.h"
|
||||
#include "dkp-input.h"
|
||||
#include "dkp-device-list.h"
|
||||
|
||||
#include "dkp-daemon-glue.h"
|
||||
|
|
@ -54,6 +55,7 @@ enum
|
|||
PROP_CAN_HIBERNATE,
|
||||
PROP_ON_BATTERY,
|
||||
PROP_ON_LOW_BATTERY,
|
||||
PROP_LID_IS_CLOSED,
|
||||
};
|
||||
|
||||
enum
|
||||
|
|
@ -65,7 +67,7 @@ enum
|
|||
LAST_SIGNAL,
|
||||
};
|
||||
|
||||
static const gchar *subsystems[] = {"power_supply", "usb", "tty", NULL};
|
||||
static const gchar *subsystems[] = {"power_supply", "usb", "tty", "input", NULL};
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
|
@ -75,21 +77,47 @@ struct DkpDaemonPrivate
|
|||
DBusGProxy *proxy;
|
||||
DkpPolkit *polkit;
|
||||
DkpDeviceList *list;
|
||||
GPtrArray *inputs;
|
||||
gboolean on_battery;
|
||||
gboolean low_battery;
|
||||
DevkitClient *devkit_client;
|
||||
gboolean lid_is_closed;
|
||||
};
|
||||
|
||||
static void dkp_daemon_class_init (DkpDaemonClass *klass);
|
||||
static void dkp_daemon_init (DkpDaemon *seat);
|
||||
static void dkp_daemon_finalize (GObject *object);
|
||||
static gboolean dkp_daemon_get_on_battery_local (DkpDaemon *daemon);
|
||||
static gboolean dkp_daemon_get_low_battery_local (DkpDaemon *daemon);
|
||||
static void dkp_daemon_class_init (DkpDaemonClass *klass);
|
||||
static void dkp_daemon_init (DkpDaemon *seat);
|
||||
static void dkp_daemon_finalize (GObject *object);
|
||||
static gboolean dkp_daemon_get_on_battery_local (DkpDaemon *daemon);
|
||||
static gboolean dkp_daemon_get_low_battery_local (DkpDaemon *daemon);
|
||||
|
||||
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))
|
||||
|
||||
/**
|
||||
* dkp_daemon_set_lid_is_closed:
|
||||
**/
|
||||
gboolean
|
||||
dkp_daemon_set_lid_is_closed (DkpDaemon *daemon, gboolean lid_is_closed)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
|
||||
g_return_val_if_fail (DKP_IS_DAEMON (daemon), FALSE);
|
||||
|
||||
egg_debug ("lid_is_closed=%i", lid_is_closed);
|
||||
if (daemon->priv->lid_is_closed == lid_is_closed) {
|
||||
egg_debug ("ignoring duplicate");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* save */
|
||||
g_signal_emit (daemon, signals[CHANGED_SIGNAL], 0);
|
||||
daemon->priv->lid_is_closed = lid_is_closed;
|
||||
ret = TRUE;
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* dkp_daemon_error_quark:
|
||||
**/
|
||||
|
|
@ -177,6 +205,10 @@ dkp_daemon_get_property (GObject *object,
|
|||
g_value_set_boolean (value, daemon->priv->on_battery && daemon->priv->low_battery);
|
||||
break;
|
||||
|
||||
case PROP_LID_IS_CLOSED:
|
||||
g_value_set_boolean (value, daemon->priv->lid_is_closed);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
|
@ -270,6 +302,14 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
|
|||
FALSE,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_LID_IS_CLOSED,
|
||||
g_param_spec_boolean ("lid-is-closed",
|
||||
"Laptop lid is closed",
|
||||
"If the laptop lid is closed",
|
||||
FALSE,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
dbus_g_object_type_install_info (DKP_TYPE_DAEMON, &dbus_glib_dkp_daemon_object_info);
|
||||
|
||||
dbus_g_error_domain_register (DKP_DAEMON_ERROR, NULL, DKP_DAEMON_TYPE_ERROR);
|
||||
|
|
@ -283,6 +323,8 @@ dkp_daemon_init (DkpDaemon *daemon)
|
|||
{
|
||||
daemon->priv = DKP_DAEMON_GET_PRIVATE (daemon);
|
||||
daemon->priv->polkit = dkp_polkit_new ();
|
||||
daemon->priv->lid_is_closed = FALSE;
|
||||
daemon->priv->inputs = g_ptr_array_new ();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -310,6 +352,10 @@ dkp_daemon_finalize (GObject *object)
|
|||
g_object_unref (daemon->priv->list);
|
||||
g_object_unref (daemon->priv->polkit);
|
||||
|
||||
/* unref inputs */
|
||||
g_ptr_array_foreach (daemon->priv->inputs, (GFunc) g_object_unref, NULL);
|
||||
g_ptr_array_free (daemon->priv->inputs, TRUE);
|
||||
|
||||
G_OBJECT_CLASS (dkp_daemon_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
|
@ -426,6 +472,7 @@ gpk_daemon_device_get (DkpDaemon *daemon, DevkitDevice *d)
|
|||
const gchar *subsys;
|
||||
const gchar *native_path;
|
||||
DkpDevice *device = NULL;
|
||||
DkpInput *input;
|
||||
gboolean ret;
|
||||
|
||||
subsys = devkit_device_get_subsystem (d);
|
||||
|
|
@ -472,6 +519,22 @@ gpk_daemon_device_get (DkpDaemon *daemon, DevkitDevice *d)
|
|||
/* no valid USB object ;-( */
|
||||
device = NULL;
|
||||
|
||||
} else if (g_strcmp0 (subsys, "input") == 0) {
|
||||
|
||||
/* check input device */
|
||||
input = dkp_input_new ();
|
||||
ret = dkp_input_coldplug (input, daemon, d);
|
||||
if (!ret) {
|
||||
g_object_unref (input);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* we can't use the device list as it's not a DkpDevice */
|
||||
g_ptr_array_add (daemon->priv->inputs, input);
|
||||
|
||||
/* no valid input object */
|
||||
device = NULL;
|
||||
|
||||
} else {
|
||||
native_path = devkit_device_get_native_path (d);
|
||||
egg_warning ("native path %s (%s) ignoring", native_path, subsys);
|
||||
|
|
@ -500,7 +563,7 @@ gpk_daemon_device_add (DkpDaemon *daemon, DevkitDevice *d, gboolean emit_event)
|
|||
/* get the right sort of device */
|
||||
device = gpk_daemon_device_get (daemon, d);
|
||||
if (device == NULL) {
|
||||
egg_debug ("ignoring add event on %s", devkit_device_get_native_path (d));
|
||||
egg_debug ("not adding device %s", devkit_device_get_native_path (d));
|
||||
ret = FALSE;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,6 +79,8 @@ gboolean dkp_daemon_can_suspend (DkpDaemon *daemon,
|
|||
gboolean dkp_daemon_can_hibernate (DkpDaemon *daemon,
|
||||
gboolean interactive,
|
||||
DBusGMethodInvocation *context);
|
||||
gboolean dkp_daemon_set_lid_is_closed (DkpDaemon *daemon,
|
||||
gboolean lid_is_closed);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
|
|
|||
|
|
@ -162,6 +162,16 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
|
|||
</doc:para></doc:description></doc:doc>
|
||||
</property>
|
||||
|
||||
<property name="lid-is-closed" type="b" access="read">
|
||||
<doc:doc>
|
||||
<doc:description>
|
||||
<doc:para>
|
||||
Indicates if the laptop lid is closed where the display cannot be seen.
|
||||
</doc:para>
|
||||
</doc:description>
|
||||
</doc:doc>
|
||||
</property>
|
||||
|
||||
<signal name="Changed">
|
||||
<doc:doc>
|
||||
<doc:description>
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ dkp_client_print (DkpClient *client)
|
|||
g_print (" can-hibernate %s\n", dkp_client_can_hibernate (client) ? "yes" : "no");
|
||||
g_print (" on-battery: %s\n", dkp_client_on_battery (client) ? "yes" : "no");
|
||||
g_print (" on-low-battery: %s\n", dkp_client_on_low_battery (client) ? "yes" : "no");
|
||||
g_print (" lid-is-closed: %s\n", dkp_client_lid_is_closed (client) ? "yes" : "no");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue