From: Phillip Susi Last-Updated: 2011-03-18 Description: Upower took over suspend/hibernate functionality from g-p-m. When it did so, it omitted the argument to the Sleeping and Resuming signals indicating whether the sleep is a suspend or hibernate. This patch adds that argument back. The reason for this is so that g-p-m can properly lock the screen and other activities it takes in response to suspending or hibernating. Index: b/src/org.freedesktop.UPower.xml =================================================================== --- a/src/org.freedesktop.UPower.xml +++ b/src/org.freedesktop.UPower.xml @@ -123,8 +123,12 @@ before the sleep action is taken (such as sending out Avahi or Jabber messages). + + The argument type specifies either 0 for Suspend or 1 for Hibernate + + @@ -138,8 +142,12 @@ Session and system programs can then do anything required (such as sending out Avahi or Jabber messages). + + The argument type specifies either 0 for Suspend or 1 for Hibernate + + Index: b/src/up-daemon.c =================================================================== --- a/src/up-daemon.c +++ b/src/up-daemon.c @@ -91,6 +91,7 @@ guint about_to_sleep_id; guint conf_sleep_timeout; gboolean conf_allow_hibernate_encrypted_swap; + guint sleeptype; }; static void up_daemon_finalize (GObject *object); @@ -337,7 +338,7 @@ /* we've told the clients we're going down */ g_debug ("emitting sleeping"); - g_signal_emit (daemon, signals[SIGNAL_SLEEPING], 0); + g_signal_emit (daemon, signals[SIGNAL_SLEEPING], 0, priv->sleeptype); g_timer_start (priv->about_to_sleep_timer); daemon->priv->sent_sleeping_signal = TRUE; @@ -383,7 +384,7 @@ /* emit signal for session components */ g_debug ("emitting resuming"); - g_signal_emit (daemon, signals[SIGNAL_RESUMING], 0); + g_signal_emit (daemon, signals[SIGNAL_RESUMING], 0, priv->sleeptype); /* reset the about-to-sleep logic */ g_timer_reset (priv->about_to_sleep_timer); @@ -427,7 +428,7 @@ /* we didn't use AboutToSleep() so send the signal for clients now */ if (!priv->sent_sleeping_signal) { g_debug ("no AboutToSleep(), so emitting ::Sleeping()"); - g_signal_emit (daemon, signals[SIGNAL_SLEEPING], 0); + g_signal_emit (daemon, signals[SIGNAL_SLEEPING], 0, priv->sleeptype); priv->about_to_sleep_id = g_timeout_add (priv->conf_sleep_timeout, (GSourceFunc) up_daemon_deferred_sleep_cb, sleep); #if GLIB_CHECK_VERSION(2,25,8) @@ -466,6 +467,7 @@ const gchar *command; UpDaemonPrivate *priv = daemon->priv; + priv->sleeptype = 0; /* no kernel support */ if (!priv->kernel_can_suspend) { error = g_error_new (UP_DAEMON_ERROR, @@ -569,6 +571,7 @@ const gchar *command; UpDaemonPrivate *priv = daemon->priv; + priv->sleeptype = 1; /* no kernel support */ if (!priv->kernel_can_hibernate) { error = g_error_new (UP_DAEMON_ERROR, @@ -1222,16 +1225,16 @@ G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_VOID__UINT, + G_TYPE_NONE, 1, G_TYPE_UINT); signals[SIGNAL_RESUMING] = g_signal_new ("resuming", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_VOID__UINT, + G_TYPE_NONE, 1, G_TYPE_UINT); g_object_class_install_property (object_class, PROP_DAEMON_VERSION,