diff --git a/devkit-power-gobject/dkp-client.c b/devkit-power-gobject/dkp-client.c
index c547d00..8754d5c 100644
--- a/devkit-power-gobject/dkp-client.c
+++ b/devkit-power-gobject/dkp-client.c
@@ -50,6 +50,7 @@ struct DkpClientPrivate
gboolean lid_is_closed;
gboolean on_battery;
gboolean on_low_battery;
+ gboolean lid_is_present;
};
enum {
@@ -67,7 +68,9 @@ enum {
PROP_CAN_HIBERNATE,
PROP_ON_BATTERY,
PROP_ON_LOW_BATTERY,
- PROP_LID_IS_CLOSED
+ PROP_LID_IS_CLOSED,
+ PROP_LID_IS_PRESENT,
+ PROP_LAST
};
static guint signals [DKP_CLIENT_LAST_SIGNAL] = { 0 };
@@ -293,6 +296,13 @@ dkp_client_ensure_properties (DkpClient *client)
}
client->priv->on_low_battery = g_value_get_boolean (value);
+ value = g_hash_table_lookup (props, "lid-is-present");
+ if (value == NULL) {
+ g_warning ("No 'lid-is-present' property");
+ goto out;
+ }
+ client->priv->lid_is_present = g_value_get_boolean (value);
+
/* cached */
client->priv->have_properties = TRUE;
@@ -339,7 +349,7 @@ dkp_client_can_hibernate (DkpClient *client)
*
* Get whether the laptop lid is closed.
*
- * Return value: TRUE if lid is closed FALSE other wise.
+ * Return value: %TRUE if lid is closed or %FALSE otherwise.
*/
gboolean
dkp_client_lid_is_closed (DkpClient *client)
@@ -349,6 +359,22 @@ dkp_client_lid_is_closed (DkpClient *client)
return client->priv->lid_is_closed;
}
+/**
+ * dkp_client_get_lid_is_present:
+ * @client : a #DkpClient instance.
+ *
+ * Gets if the system has a lide device.
+ *
+ * Return value: %TRUE if system has a lid that can be closed or %FALSE otherwise.
+ */
+gboolean
+dkp_client_get_lid_is_present (DkpClient *client)
+{
+ g_return_val_if_fail (DKP_IS_CLIENT (client), FALSE);
+ dkp_client_ensure_properties (client);
+ return client->priv->lid_is_present;
+}
+
/**
* dkp_client_can_suspend:
* @client : a #DkpClient instance.
@@ -479,18 +505,21 @@ dkp_client_get_property (GObject *object,
case PROP_CAN_SUSPEND:
g_value_set_boolean (value, client->priv->can_suspend);
break;
- case PROP_CAN_HIBERNATE:
+ case PROP_CAN_HIBERNATE:
g_value_set_boolean (value, client->priv->can_hibernate);
break;
case PROP_ON_BATTERY:
g_value_set_boolean (value, client->priv->on_battery);
break;
- case PROP_ON_LOW_BATTERY:
+ case PROP_ON_LOW_BATTERY:
g_value_set_boolean (value, client->priv->on_low_battery);
break;
- case PROP_LID_IS_CLOSED:
+ case PROP_LID_IS_CLOSED:
g_value_set_boolean (value, client->priv->lid_is_closed);
break;
+ case PROP_LID_IS_PRESENT:
+ g_value_set_boolean (value, client->priv->lid_is_present);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -553,6 +582,13 @@ dkp_client_class_init (DkpClientClass *klass)
FALSE,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_LID_IS_PRESENT,
+ g_param_spec_boolean ("lid-is-present",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
signals [DKP_DEVICE_ADDED] =
g_signal_new ("device-added",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
diff --git a/devkit-power-gobject/dkp-client.h b/devkit-power-gobject/dkp-client.h
index 722ad5b..e50d8e3 100644
--- a/devkit-power-gobject/dkp-client.h
+++ b/devkit-power-gobject/dkp-client.h
@@ -85,6 +85,7 @@ 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);
+gboolean dkp_client_get_lid_is_present (DkpClient *client);
G_END_DECLS
diff --git a/src/dkp-daemon.c b/src/dkp-daemon.c
index 1362bdf..895b769 100644
--- a/src/dkp-daemon.c
+++ b/src/dkp-daemon.c
@@ -56,6 +56,8 @@ enum
PROP_ON_BATTERY,
PROP_ON_LOW_BATTERY,
PROP_LID_IS_CLOSED,
+ PROP_LID_IS_PRESENT,
+ PROP_LAST
};
enum
@@ -82,6 +84,7 @@ struct DkpDaemonPrivate
gboolean low_battery;
DevkitClient *devkit_client;
gboolean lid_is_closed;
+ gboolean lid_is_present;
};
static void dkp_daemon_class_init (DkpDaemonClass *klass);
@@ -220,6 +223,10 @@ dkp_daemon_get_property (GObject *object,
g_value_set_boolean (value, daemon->priv->lid_is_closed);
break;
+ case PROP_LID_IS_PRESENT:
+ g_value_set_boolean (value, daemon->priv->lid_is_present);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -281,6 +288,14 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
NULL,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_LID_IS_PRESENT,
+ g_param_spec_boolean ("lid-is-present",
+ "Is a laptop",
+ "If this computer is probably a laptop",
+ FALSE,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class,
PROP_CAN_SUSPEND,
g_param_spec_boolean ("can-suspend",
@@ -334,6 +349,7 @@ dkp_daemon_init (DkpDaemon *daemon)
{
daemon->priv = DKP_DAEMON_GET_PRIVATE (daemon);
daemon->priv->polkit = dkp_polkit_new ();
+ daemon->priv->lid_is_present = FALSE;
daemon->priv->lid_is_closed = FALSE;
}
@@ -595,6 +611,9 @@ dkp_daemon_device_get (DkpDaemon *daemon, DevkitDevice *d)
goto out;
}
+ /* we now have a lid */
+ daemon->priv->lid_is_present = TRUE;
+
/* not a power device */
dkp_device_list_insert (daemon->priv->managed_devices, d, G_OBJECT (input));
diff --git a/src/org.freedesktop.DeviceKit.Power.xml b/src/org.freedesktop.DeviceKit.Power.xml
index 6b5ce03..dd310cd 100644
--- a/src/org.freedesktop.DeviceKit.Power.xml
+++ b/src/org.freedesktop.DeviceKit.Power.xml
@@ -129,7 +129,6 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
-
Version of the running daemon, e.g. 002.
@@ -172,6 +171,16 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
+
+
+
+
+ If the system has a lid device.
+
+
+
+
+