summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2009-05-05 14:41:02 (GMT)
committerRichard Hughes <richard@hughsie.com>2009-05-05 14:41:02 (GMT)
commit90000eb88dbc4ef404f6be0940a0b64572c588ff (patch)
treedf4c77e8df7d0e82ee7d7727fc6184870c1d22eb
parentaebba5d37fefeb7b84da5ab9768b9c5043a4766d (diff)
downloadgnome-power-manager-90000eb88dbc4ef404f6be0940a0b64572c588ff.zip
gnome-power-manager-90000eb88dbc4ef404f6be0940a0b64572c588ff.tar.xz
Add support for the DeviceKit-power property lid-is-closed so we can now run without --enable-legacy-buttons
-rw-r--r--src/gpm-button.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/gpm-button.c b/src/gpm-button.c
index bb31443..e42390f 100644
--- a/src/gpm-button.c
+++ b/src/gpm-button.c
@@ -29,6 +29,7 @@
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <X11/XF86keysym.h>
+#include <devkit-power-gobject/devicekit-power.h>
#ifdef HAVE_LEGACY_BUTTONS
#include <hal-manager.h>
@@ -53,6 +54,7 @@ struct GpmButtonPrivate
gchar *last_button;
GTimer *timer;
gboolean lid_is_closed;
+ DkpClient *client;
#ifdef HAVE_LEGACY_BUTTONS
HalManager *hal_manager; /* remove when input events is in the kernel */
HalDeviceStore *hal_device_store;
@@ -516,6 +518,31 @@ hal_daemon_new_device_cb (HalManager *hal_manager, const gchar *udi, GpmButton *
#endif
/**
+ * gpm_button_client_changed_cb
+ **/
+static void
+gpm_button_client_changed_cb (DkpClient *client, GpmButton *button)
+{
+ gboolean lid_is_closed;
+
+ /* get new state */
+ lid_is_closed = dkp_client_lid_is_closed (client);
+
+ /* same state */
+ if (button->priv->lid_is_closed == lid_is_closed)
+ return;
+
+ /* save state */
+ button->priv->lid_is_closed = lid_is_closed;
+
+ /* sent correct event */
+ if (lid_is_closed)
+ gpm_button_emit_type (button, GPM_BUTTON_LID_CLOSED);
+ else
+ gpm_button_emit_type (button, GPM_BUTTON_LID_OPEN);
+}
+
+/**
* gpm_button_init:
* @button: This class instance
**/
@@ -532,6 +559,9 @@ gpm_button_init (GpmButton *button)
button->priv->timer = g_timer_new ();
button->priv->lid_is_closed = FALSE;
+ button->priv->client = dkp_client_new ();
+ g_signal_connect (button->priv->client, "changed",
+ G_CALLBACK (gpm_button_client_changed_cb), button);
/* register the brightness keys */
gpm_button_xevent_key (button, XF86XK_PowerOff, GPM_BUTTON_POWER);
@@ -585,6 +615,7 @@ gpm_button_finalize (GObject *object)
button = GPM_BUTTON (object);
button->priv = GPM_BUTTON_GET_PRIVATE (button);
+ g_object_unref (button->priv->client);
#ifdef HAVE_LEGACY_BUTTONS
g_object_unref (button->priv->hal_manager);
g_object_unref (button->priv->hal_device_store);