[gnome-session] [gsm] Port from gnome-power-manager to DeviceKit-power



commit 5952b7a9efc11b631910688b531ed8176f89440a
Author: Richard Hughes <richard hughsie com>
Date:   Wed Jul 22 12:43:50 2009 +0100

    [gsm] Port from gnome-power-manager to DeviceKit-power

 configure.in                      |    2 +
 gnome-session/Makefile.am         |    5 +-
 gnome-session/gsm-logout-dialog.c |   21 +-
 gnome-session/gsm-manager.c       |   69 ++++--
 gnome-session/gsm-power-manager.c |  480 -------------------------------------
 gnome-session/gsm-power-manager.h |   87 -------
 6 files changed, 68 insertions(+), 596 deletions(-)
---
diff --git a/configure.in b/configure.in
index 689bd01..d25424f 100644
--- a/configure.in
+++ b/configure.in
@@ -50,6 +50,7 @@ LIBGNOMEUI_REQUIRED=2.2.0
 GTK_REQUIRED=2.12.0
 DBUS_GLIB_REQUIRED=0.76
 POLKIT_GNOME_REQUIRED=0.7
+DEVKIT_POWER_REQUIRED=008
 
 dnl ====================================================================
 dnl Dependency Checks
@@ -61,6 +62,7 @@ PKG_CHECK_MODULES(GNOME_SESSION,
         gio-2.0 >= $GLIB_REQUIRED
         gtk+-2.0 >= $GTK_REQUIRED
         dbus-glib-1 >= $DBUS_GLIB_REQUIRED
+        devkit-power-gobject >= $DEVKIT_POWER_REQUIRED
 )
 
 PKG_CHECK_MODULES(SESSION_PROPERTIES,
diff --git a/gnome-session/Makefile.am b/gnome-session/Makefile.am
index 7d9d535..659e358 100644
--- a/gnome-session/Makefile.am
+++ b/gnome-session/Makefile.am
@@ -24,7 +24,8 @@ INCLUDES =					\
 	-DLIBEXECDIR=\"$(libexecdir)\"		\
 	-DGTKBUILDER_DIR=\""$(pkgdatadir)"\"		\
 	-DGCONF_SANITY_CHECK=\""$(GCONF_SANITY_CHECK)"\" \
-	-DGCONFTOOL_CMD=\"$(GCONFTOOL)\"
+	-DGCONFTOOL_CMD=\"$(GCONFTOOL)\"	\
+	-DI_KNOW_THE_DEVICEKIT_POWER_API_IS_SUBJECT_TO_CHANGE
 
 test_inhibit_SOURCES = 	\
 	test-inhibit.c	\
@@ -74,8 +75,6 @@ gnome_session_SOURCES =				\
 	gsm-logout-dialog.c			\
 	gsm-inhibit-dialog.h			\
 	gsm-inhibit-dialog.c			\
-	gsm-power-manager.h			\
-	gsm-power-manager.c			\
 	gs-idle-monitor.h			\
 	gs-idle-monitor.c			\
 	gsm-presence.h				\
diff --git a/gnome-session/gsm-logout-dialog.c b/gnome-session/gsm-logout-dialog.c
index b6efd08..2de3f12 100644
--- a/gnome-session/gsm-logout-dialog.c
+++ b/gnome-session/gsm-logout-dialog.c
@@ -27,8 +27,9 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
+#include <devkit-power-gobject/devicekit-power.h>
+
 #include "gsm-logout-dialog.h"
-#include "gsm-power-manager.h"
 #include "gsm-consolekit.h"
 #include "gdm.h"
 
@@ -49,7 +50,7 @@ struct _GsmLogoutDialogPrivate
 {
         GsmDialogLogoutType  type;
 
-        GsmPowerManager     *power_manager;
+        DkpClient           *dkp_client;
         GsmConsolekit       *consolekit;
 
         int                  timeout;
@@ -141,7 +142,7 @@ gsm_logout_dialog_init (GsmLogoutDialog *logout_dialog)
         gtk_window_set_keep_above (GTK_WINDOW (logout_dialog), TRUE);
         gtk_window_stick (GTK_WINDOW (logout_dialog));
 
-        logout_dialog->priv->power_manager = gsm_get_power_manager ();
+        logout_dialog->priv->dkp_client = dkp_client_new ();
 
         logout_dialog->priv->consolekit = gsm_get_consolekit ();
 
@@ -165,9 +166,9 @@ gsm_logout_dialog_destroy (GsmLogoutDialog *logout_dialog,
                 logout_dialog->priv->timeout_id = 0;
         }
 
-        if (logout_dialog->priv->power_manager) {
-                g_object_unref (logout_dialog->priv->power_manager);
-                logout_dialog->priv->power_manager = NULL;
+        if (logout_dialog->priv->dkp_client) {
+                g_object_unref (logout_dialog->priv->dkp_client);
+                logout_dialog->priv->dkp_client = NULL;
         }
 
         if (logout_dialog->priv->consolekit) {
@@ -182,7 +183,9 @@ static gboolean
 gsm_logout_supports_system_suspend (GsmLogoutDialog *logout_dialog)
 {
         gboolean ret;
-        ret = gsm_power_manager_can_suspend (logout_dialog->priv->power_manager);
+        g_object_get (logout_dialog->priv->dkp_client,
+                      "can-suspend", &ret,
+                      NULL);
         return ret;
 }
 
@@ -190,7 +193,9 @@ static gboolean
 gsm_logout_supports_system_hibernate (GsmLogoutDialog *logout_dialog)
 {
         gboolean ret;
-        ret = gsm_power_manager_can_hibernate (logout_dialog->priv->power_manager);
+        g_object_get (logout_dialog->priv->dkp_client,
+                      "can-hibernate", &ret,
+                      NULL);
         return ret;
 }
 
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index 8b1d743..e031836 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -38,6 +38,8 @@
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-lowlevel.h>
 
+#include <devkit-power-gobject/devicekit-power.h>
+
 #include <gtk/gtk.h> /* for logout dialog */
 #include <gconf/gconf-client.h>
 
@@ -58,7 +60,6 @@
 #include "gsm-logout-dialog.h"
 #include "gsm-inhibit-dialog.h"
 #include "gsm-consolekit.h"
-#include "gsm-power-manager.h"
 #include "gsm-session-save.h"
 
 #define GSM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_MANAGER, GsmManagerPrivate))
@@ -130,6 +131,9 @@ struct GsmManagerPrivate
 
         DBusGProxy             *bus_proxy;
         DBusGConnection        *connection;
+
+        /* Interface with other parts of the system */
+        DkpClient              *dkp_client;
 };
 
 enum {
@@ -923,29 +927,47 @@ manager_switch_user (GsmManager *manager)
 static void
 manager_attempt_hibernate (GsmManager *manager)
 {
-        GsmPowerManager *power_manager;
+        gboolean  can_hibernate;
+        GError   *error;
+        gboolean  ret;
 
-        power_manager = gsm_get_power_manager ();
+        g_object_get (manager->priv->dkp_client,
+                      "can-hibernate", &can_hibernate,
+                      NULL);
 
-        if (gsm_power_manager_can_hibernate (power_manager)) {
-                gsm_power_manager_attempt_hibernate (power_manager);
-        }
+        if (can_hibernate) {
+                error = NULL;
+                ret = dkp_client_hibernate (manager->priv->dkp_client, &error);
 
-        g_object_unref (power_manager);
+                if (!ret) {
+                        g_warning ("Unexpected hibernate failure: %s",
+                                   error->message);
+                        g_error_free (error);
+                }
+        }
 }
 
 static void
 manager_attempt_suspend (GsmManager *manager)
 {
-        GsmPowerManager *power_manager;
+        gboolean  can_suspend;
+        GError   *error;
+        gboolean  ret;
 
-        power_manager = gsm_get_power_manager ();
+        g_object_get (manager->priv->dkp_client,
+                      "can-suspend", &can_suspend,
+                      NULL);
 
-        if (gsm_power_manager_can_suspend (power_manager)) {
-                gsm_power_manager_attempt_suspend (power_manager);
-        }
+        if (can_suspend) {
+                error = NULL;
+                ret = dkp_client_suspend (manager->priv->dkp_client, &error);
 
-        g_object_unref (power_manager);
+                if (!ret) {
+                        g_warning ("Unexpected suspend failure: %s",
+                                   error->message);
+                        g_error_free (error);
+                }
+        }
 }
 
 static void
@@ -2118,6 +2140,11 @@ gsm_manager_dispose (GObject *object)
                 manager->priv->gconf_client = NULL;
         }
 
+        if (manager->priv->dkp_client != NULL) {
+                g_object_unref (manager->priv->dkp_client);
+                manager->priv->dkp_client = NULL;
+        }
+
         G_OBJECT_CLASS (gsm_manager_parent_class)->dispose (object);
 }
 
@@ -2346,6 +2373,8 @@ gsm_manager_init (GsmManager *manager)
                           G_CALLBACK (on_presence_status_changed),
                           manager);
 
+        manager->priv->dkp_client = dkp_client_new ();
+
         /* GConf setup */
         gconf_client_add_dir (manager->priv->gconf_client,
                               KEY_DESKTOP_DIR,
@@ -2865,20 +2894,24 @@ gsm_manager_can_shutdown (GsmManager *manager,
                           GError    **error)
 {
         GsmConsolekit *consolekit;
-        GsmPowerManager *power_manager;
+        gboolean can_suspend;
+        gboolean can_hibernate;
+
+        g_object_get (manager->priv->dkp_client,
+                      "can-suspend", &can_suspend,
+                      "can-hibernate", &can_hibernate,
+                      NULL);
 
         g_debug ("GsmManager: CanShutdown called");
 
         g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
 
         consolekit = gsm_get_consolekit ();
-        power_manager = gsm_get_power_manager ();
         *shutdown_available = gsm_consolekit_can_stop (consolekit)
                               || gsm_consolekit_can_restart (consolekit)
-                              || gsm_power_manager_can_suspend (power_manager)
-                              || gsm_power_manager_can_hibernate (power_manager);
+                              || can_suspend
+                              || can_hibernate;
         g_object_unref (consolekit);
-        g_object_unref (power_manager);
 
         return TRUE;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]