diff options
Diffstat (limited to 'x11/gnome-session/files/patch-gnome-session_gsm-power-manager.c')
-rw-r--r-- | x11/gnome-session/files/patch-gnome-session_gsm-power-manager.c | 483 |
1 files changed, 0 insertions, 483 deletions
diff --git a/x11/gnome-session/files/patch-gnome-session_gsm-power-manager.c b/x11/gnome-session/files/patch-gnome-session_gsm-power-manager.c deleted file mode 100644 index 05342ff0fbf1..000000000000 --- a/x11/gnome-session/files/patch-gnome-session_gsm-power-manager.c +++ /dev/null @@ -1,483 +0,0 @@ ---- gnome-session/gsm-power-manager.c.orig 2009-08-26 14:14:31.000000000 -0400 -+++ gnome-session/gsm-power-manager.c 2009-08-26 14:15:07.000000000 -0400 -@@ -0,0 +1,480 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- -+ * -+ * power-manager.h: functions for powering down, restarting, and -+ * suspending the computer -+ * Copyright (C) 2006 Ray Strode <rstrode@redhat.com> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -+ * 02111-1307, USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include "gsm-power-manager.h" -+ -+#include <errno.h> -+#include <string.h> -+ -+#include <glib.h> -+#include <glib-object.h> -+#include <glib/gi18n.h> -+ -+#include <dbus/dbus-glib.h> -+ -+struct _GsmPowerManagerPrivate -+{ -+ DBusGConnection *dbus_connection; -+ DBusGProxy *bus_proxy; -+ DBusGProxy *gpm_proxy; -+ guint32 is_connected : 1; -+}; -+ -+static void gsm_power_manager_finalize (GObject *object); -+ -+static void gsm_power_manager_class_install_signals (GsmPowerManagerClass *manager_class); -+ -+static void gsm_power_manager_class_install_properties (GsmPowerManagerClass *manager_class); -+ -+static void gsm_power_manager_get_property (GObject *object, -+ guint prop_id, -+ GValue *value, -+ GParamSpec *pspec); -+ -+static gboolean ensure_gpm_connection (GsmPowerManager *manager, -+ GError **error); -+ -+enum { -+ PROP_0 = 0, -+ PROP_IS_CONNECTED -+}; -+ -+enum { -+ REQUEST_FAILED = 0, -+ LAST_SIGNAL -+}; -+ -+static guint signals[LAST_SIGNAL]; -+ -+G_DEFINE_TYPE (GsmPowerManager, gsm_power_manager, G_TYPE_OBJECT); -+ -+static void -+gsm_power_manager_class_init (GsmPowerManagerClass *manager_class) -+{ -+ GObjectClass *object_class; -+ -+ object_class = G_OBJECT_CLASS (manager_class); -+ -+ object_class->finalize = gsm_power_manager_finalize; -+ -+ gsm_power_manager_class_install_properties (manager_class); -+ gsm_power_manager_class_install_signals (manager_class); -+ -+ g_type_class_add_private (manager_class, -+ sizeof (GsmPowerManagerPrivate)); -+} -+ -+static void -+gsm_power_manager_class_install_signals (GsmPowerManagerClass *manager_class) -+{ -+ GObjectClass *object_class; -+ -+ object_class = G_OBJECT_CLASS (manager_class); -+ -+ signals[REQUEST_FAILED] = -+ g_signal_new ("request-failed", -+ G_OBJECT_CLASS_TYPE (object_class), -+ G_SIGNAL_RUN_LAST, -+ G_STRUCT_OFFSET (GsmPowerManagerClass, request_failed), -+ NULL, -+ NULL, -+ g_cclosure_marshal_VOID__POINTER, -+ G_TYPE_NONE, -+ 1, G_TYPE_POINTER); -+ -+ manager_class->request_failed = NULL; -+} -+ -+static void -+gsm_power_manager_class_install_properties (GsmPowerManagerClass *manager_class) -+{ -+ GObjectClass *object_class; -+ GParamSpec *param_spec; -+ -+ object_class = G_OBJECT_CLASS (manager_class); -+ object_class->get_property = gsm_power_manager_get_property; -+ -+ param_spec = g_param_spec_boolean ("is-connected", -+ "Is connected", -+ "Whether the session is connected to " -+ "the power manager", -+ FALSE, -+ G_PARAM_READABLE); -+ -+ g_object_class_install_property (object_class, PROP_IS_CONNECTED, -+ param_spec); -+} -+ -+static void -+on_name_owner_changed (DBusGProxy *bus_proxy, -+ const char *name, -+ const char *prev_owner, -+ const char *new_owner, -+ GsmPowerManager *manager) -+{ -+ if (strcmp (name, "org.freedesktop.PowerManagement") != 0) { -+ return; -+ } -+ -+ if (manager->priv->gpm_proxy != NULL) { -+ g_object_unref (manager->priv->gpm_proxy); -+ manager->priv->gpm_proxy = NULL; -+ } -+ -+ ensure_gpm_connection (manager, NULL); -+} -+ -+static gboolean -+ensure_gpm_connection (GsmPowerManager *manager, -+ GError **error) -+{ -+ GError *connection_error; -+ gboolean is_connected; -+ -+ connection_error = NULL; -+ if (manager->priv->dbus_connection == NULL) { -+ manager->priv->dbus_connection = dbus_g_bus_get (DBUS_BUS_SESSION, -+ &connection_error); -+ -+ if (manager->priv->dbus_connection == NULL) { -+ g_propagate_error (error, connection_error); -+ is_connected = FALSE; -+ goto out; -+ } -+ } -+ -+ if (manager->priv->bus_proxy == NULL) { -+ manager->priv->bus_proxy = -+ dbus_g_proxy_new_for_name_owner (manager->priv->dbus_connection, -+ DBUS_SERVICE_DBUS, -+ DBUS_PATH_DBUS, -+ DBUS_INTERFACE_DBUS, -+ &connection_error); -+ -+ if (manager->priv->bus_proxy == NULL) { -+ g_propagate_error (error, connection_error); -+ is_connected = FALSE; -+ goto out; -+ } -+ -+ dbus_g_proxy_add_signal (manager->priv->bus_proxy, -+ "NameOwnerChanged", -+ G_TYPE_STRING, -+ G_TYPE_STRING, -+ G_TYPE_STRING, -+ G_TYPE_INVALID); -+ -+ dbus_g_proxy_connect_signal (manager->priv->bus_proxy, -+ "NameOwnerChanged", -+ G_CALLBACK (on_name_owner_changed), -+ manager, NULL); -+ } -+ -+ if (manager->priv->gpm_proxy == NULL) { -+ manager->priv->gpm_proxy = -+ dbus_g_proxy_new_for_name_owner ( -+ manager->priv->dbus_connection, -+ "org.freedesktop.PowerManagement", -+ "/org/freedesktop/PowerManagement", -+ "org.freedesktop.PowerManagement", -+ &connection_error); -+ -+ if (manager->priv->gpm_proxy == NULL) { -+ g_propagate_error (error, connection_error); -+ is_connected = FALSE; -+ goto out; -+ } -+ } -+ -+ is_connected = TRUE; -+ -+ out: -+ if (manager->priv->is_connected != is_connected) { -+ manager->priv->is_connected = is_connected; -+ g_object_notify (G_OBJECT (manager), "is-connected"); -+ } -+ -+ if (!is_connected) { -+ if (manager->priv->dbus_connection == NULL) { -+ if (manager->priv->bus_proxy != NULL) { -+ g_object_unref (manager->priv->bus_proxy); -+ manager->priv->bus_proxy = NULL; -+ } -+ -+ if (manager->priv->gpm_proxy != NULL) { -+ g_object_unref (manager->priv->gpm_proxy); -+ manager->priv->gpm_proxy = NULL; -+ } -+ } else if (manager->priv->bus_proxy == NULL) { -+ if (manager->priv->gpm_proxy != NULL) { -+ g_object_unref (manager->priv->gpm_proxy); -+ manager->priv->gpm_proxy = NULL; -+ } -+ } -+ } -+ -+ return is_connected; -+} -+ -+static void -+gsm_power_manager_init (GsmPowerManager *manager) -+{ -+ GError *error; -+ -+ manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, -+ GSM_TYPE_POWER_MANAGER, -+ GsmPowerManagerPrivate); -+ -+ manager->priv->dbus_connection = NULL; -+ manager->priv->bus_proxy = NULL; -+ manager->priv->gpm_proxy = NULL; -+ manager->priv->is_connected = FALSE; -+ -+ error = NULL; -+ -+ if (!ensure_gpm_connection (manager, &error)) { -+ g_message ("Could not connect to power manager: %s", -+ error->message); -+ g_error_free (error); -+ } -+} -+ -+static void -+gsm_power_manager_finalize (GObject *object) -+{ -+ GsmPowerManager *manager; -+ GObjectClass *parent_class; -+ -+ manager = GSM_POWER_MANAGER (object); -+ -+ parent_class = G_OBJECT_CLASS (gsm_power_manager_parent_class); -+ -+ if (parent_class->finalize != NULL) { -+ parent_class->finalize (object); -+ } -+} -+ -+static void -+gsm_power_manager_get_property (GObject *object, -+ guint prop_id, -+ GValue *value, -+ GParamSpec *pspec) -+{ -+ GsmPowerManager *manager = GSM_POWER_MANAGER (object); -+ -+ switch (prop_id) { -+ case PROP_IS_CONNECTED: -+ g_value_set_boolean (value, -+ manager->priv->is_connected); -+ break; -+ -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, -+ prop_id, -+ pspec); -+ } -+} -+ -+GQuark -+gsm_power_manager_error_quark (void) -+{ -+ static GQuark error_quark = 0; -+ -+ if (error_quark == 0) -+ error_quark = g_quark_from_static_string ("gsm-power-manager-error"); -+ -+ return error_quark; -+} -+ -+GsmPowerManager * -+gsm_power_manager_new (void) -+{ -+ GsmPowerManager *manager; -+ -+ manager = g_object_new (GSM_TYPE_POWER_MANAGER, NULL); -+ -+ return manager; -+} -+ -+gboolean -+gsm_power_manager_can_suspend (GsmPowerManager *manager) -+{ -+ GError *error; -+ gboolean can_suspend; -+ -+ error = NULL; -+ -+ if (!ensure_gpm_connection (manager, &error)) { -+ g_message ("Could not connect to power manager: %s", -+ error->message); -+ -+ g_error_free (error); -+ -+ return FALSE; -+ } -+ -+ can_suspend = FALSE; -+ -+ if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "CanSuspend", -+ &error, -+ G_TYPE_INVALID, -+ G_TYPE_BOOLEAN, &can_suspend, G_TYPE_INVALID)) { -+ if (error != NULL) { -+ g_message ("Could not ask power manager if user can suspend: %s", -+ error->message); -+ -+ g_error_free (error); -+ } -+ -+ can_suspend = FALSE; -+ } -+ -+ return can_suspend; -+} -+ -+gboolean -+gsm_power_manager_can_hibernate (GsmPowerManager *manager) -+{ -+ GError *error; -+ gboolean can_hibernate; -+ -+ error = NULL; -+ -+ if (!ensure_gpm_connection (manager, &error)) { -+ g_message ("Could not connect to power manager: %s", -+ error->message); -+ -+ g_error_free (error); -+ -+ return FALSE; -+ } -+ -+ can_hibernate = FALSE; -+ -+ if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "CanHibernate", -+ &error, -+ G_TYPE_INVALID, -+ G_TYPE_BOOLEAN, &can_hibernate, G_TYPE_INVALID)) { -+ if (error != NULL) { -+ g_message ("Could not ask power manager if user can suspend: %s", -+ error->message); -+ -+ g_error_free (error); -+ } -+ -+ can_hibernate = FALSE; -+ } -+ -+ return can_hibernate; -+} -+ -+void -+gsm_power_manager_attempt_suspend (GsmPowerManager *manager) -+{ -+ GError *error; -+ -+ error = NULL; -+ -+ if (!ensure_gpm_connection (manager, &error)) { -+ g_warning ("Could not connect to power manager: %s", -+ error->message); -+ g_error_free (error); -+ return; -+ } -+ -+ if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "Suspend", -+ &error, -+ G_TYPE_INVALID, G_TYPE_INVALID) && -+ error != NULL) { -+ GError *call_error; -+ -+ g_warning ("Could not ask power manager to suspend: %s", -+ error->message); -+ -+ call_error = g_error_new_literal (GSM_POWER_MANAGER_ERROR, -+ GSM_POWER_MANAGER_ERROR_SUSPENDING, -+ error->message); -+ -+ g_error_free (error); -+ -+ g_signal_emit (G_OBJECT (manager), -+ signals[REQUEST_FAILED], -+ 0, call_error); -+ -+ g_error_free (call_error); -+ } -+} -+ -+void -+gsm_power_manager_attempt_hibernate (GsmPowerManager *manager) -+{ -+ GError *error; -+ -+ error = NULL; -+ if (!ensure_gpm_connection (manager, &error)) { -+ g_warning ("Could not connect to power manager: %s", -+ error->message); -+ -+ g_error_free (error); -+ -+ return; -+ } -+ -+ if (!dbus_g_proxy_call (manager->priv->gpm_proxy, "Hibernate", -+ &error, -+ G_TYPE_INVALID, G_TYPE_INVALID) && -+ error != NULL) { -+ GError *call_error; -+ -+ g_warning ("Could not ask power manager to hibernate: %s", -+ error->message); -+ -+ call_error = g_error_new_literal (GSM_POWER_MANAGER_ERROR, -+ GSM_POWER_MANAGER_ERROR_HIBERNATING, -+ error->message); -+ -+ g_error_free (error); -+ -+ g_signal_emit (G_OBJECT (manager), -+ signals[REQUEST_FAILED], -+ 0, call_error); -+ -+ g_error_free (call_error); -+ } -+} -+ -+ -+GsmPowerManager * -+gsm_get_power_manager (void) -+{ -+ static GsmPowerManager *manager = NULL; -+ -+ if (manager == NULL) { -+ manager = gsm_power_manager_new (); -+ } -+ -+ return g_object_ref (manager); -+} |