You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
268 lines
7.6 KiB
268 lines
7.6 KiB
diff -up mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c.login1 mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c
|
|
--- mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c.login1 2013-07-25 10:35:06.000000000 -0500
|
|
+++ mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c 2013-09-10 08:25:55.450880450 -0500
|
|
@@ -200,13 +200,29 @@ gsm_logout_dialog_destroy (GsmLogoutDial
|
|
static gboolean
|
|
gsm_logout_supports_system_suspend (GsmLogoutDialog *logout_dialog)
|
|
{
|
|
- return up_client_get_can_suspend (logout_dialog->priv->up_client);
|
|
+ gboolean ret;
|
|
+#ifdef HAVE_SYSTEMD
|
|
+ if (LOGIND_RUNNING())
|
|
+ ret = gsm_systemd_can_suspend (logout_dialog->priv->systemd);
|
|
+ else
|
|
+#endif
|
|
+ ret = up_client_get_can_suspend (logout_dialog->priv->up_client);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
static gboolean
|
|
gsm_logout_supports_system_hibernate (GsmLogoutDialog *logout_dialog)
|
|
{
|
|
- return up_client_get_can_hibernate (logout_dialog->priv->up_client);
|
|
+ gboolean ret;
|
|
+#ifdef HAVE_SYSTEMD
|
|
+ if (LOGIND_RUNNING())
|
|
+ ret = gsm_systemd_can_hibernate (logout_dialog->priv->systemd);
|
|
+ else
|
|
+#endif
|
|
+ ret = up_client_get_can_hibernate (logout_dialog->priv->up_client);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
static gboolean
|
|
diff -up mate-session-manager-1.6.1/mate-session/gsm-manager.c.login1 mate-session-manager-1.6.1/mate-session/gsm-manager.c
|
|
--- mate-session-manager-1.6.1/mate-session/gsm-manager.c.login1 2013-07-25 10:35:06.000000000 -0500
|
|
+++ mate-session-manager-1.6.1/mate-session/gsm-manager.c 2013-09-10 08:39:41.199847380 -0500
|
|
@@ -1101,6 +1101,20 @@ manager_attempt_hibernate (GsmManager *m
|
|
GError *error;
|
|
gboolean ret;
|
|
|
|
+#ifdef HAVE_SYSTEMD
|
|
+ if (LOGIND_RUNNING()) {
|
|
+
|
|
+ GsmSystemd *systemd;
|
|
+
|
|
+ systemd = gsm_get_systemd ();
|
|
+
|
|
+ /* lock the screen before we suspend */
|
|
+ manager_perhaps_lock (manager);
|
|
+
|
|
+ gsm_systemd_attempt_hibernate (systemd);
|
|
+ }
|
|
+ else {
|
|
+#endif
|
|
can_hibernate = up_client_get_can_hibernate (manager->priv->up_client);
|
|
if (can_hibernate) {
|
|
|
|
@@ -1115,6 +1129,9 @@ manager_attempt_hibernate (GsmManager *m
|
|
g_error_free (error);
|
|
}
|
|
}
|
|
+#ifdef HAVE_SYSTEMD
|
|
+ }
|
|
+#endif
|
|
}
|
|
|
|
static void
|
|
@@ -1124,6 +1141,20 @@ manager_attempt_suspend (GsmManager *man
|
|
GError *error;
|
|
gboolean ret;
|
|
|
|
+#ifdef HAVE_SYSTEMD
|
|
+ if (LOGIND_RUNNING()) {
|
|
+
|
|
+ GsmSystemd *systemd;
|
|
+
|
|
+ systemd = gsm_get_systemd ();
|
|
+
|
|
+ /* lock the screen before we suspend */
|
|
+ manager_perhaps_lock (manager);
|
|
+
|
|
+ gsm_systemd_attempt_suspend (systemd);
|
|
+ }
|
|
+ else {
|
|
+#endif
|
|
can_suspend = up_client_get_can_suspend (manager->priv->up_client);
|
|
if (can_suspend) {
|
|
|
|
@@ -1138,6 +1169,9 @@ manager_attempt_suspend (GsmManager *man
|
|
g_error_free (error);
|
|
}
|
|
}
|
|
+#ifdef HAVE_SYSTEMD
|
|
+ }
|
|
+#endif
|
|
}
|
|
|
|
static void
|
|
diff -up mate-session-manager-1.6.1/mate-session/gsm-systemd.c.login1 mate-session-manager-1.6.1/mate-session/gsm-systemd.c
|
|
--- mate-session-manager-1.6.1/mate-session/gsm-systemd.c.login1 2013-07-25 10:35:06.000000000 -0500
|
|
+++ mate-session-manager-1.6.1/mate-session/gsm-systemd.c 2013-09-10 08:51:06.174857597 -0500
|
|
@@ -725,6 +725,141 @@ gsm_systemd_can_stop (GsmSystemd *manage
|
|
return can_stop;
|
|
}
|
|
|
|
+gboolean
|
|
+gsm_systemd_can_hibernate (GsmSystemd *manager)
|
|
+{
|
|
+ gboolean res;
|
|
+ gchar *value;
|
|
+ gboolean can_hibernate;
|
|
+ GError *error;
|
|
+
|
|
+ error = NULL;
|
|
+
|
|
+ if (!gsm_systemd_ensure_sd_connection (manager, &error)) {
|
|
+ g_warning ("Could not connect to Systemd: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy,
|
|
+ "CanHibernate",
|
|
+ INT_MAX,
|
|
+ &error,
|
|
+ G_TYPE_INVALID,
|
|
+ G_TYPE_STRING, &value,
|
|
+ G_TYPE_INVALID);
|
|
+ if (res == FALSE) {
|
|
+ g_warning ("Could not make DBUS call: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ can_hibernate = g_strcmp0 (value, "yes") == 0 ||
|
|
+ g_strcmp0 (value, "challenge") == 0;
|
|
+ g_free (value);
|
|
+ return can_hibernate;
|
|
+}
|
|
+
|
|
+gboolean
|
|
+gsm_systemd_can_suspend (GsmSystemd *manager)
|
|
+{
|
|
+ gboolean res;
|
|
+ gchar *value;
|
|
+ gboolean can_suspend;
|
|
+ GError *error;
|
|
+
|
|
+ error = NULL;
|
|
+
|
|
+ if (!gsm_systemd_ensure_sd_connection (manager, &error)) {
|
|
+ g_warning ("Could not connect to Systemd: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy,
|
|
+ "CanSuspend",
|
|
+ INT_MAX,
|
|
+ &error,
|
|
+ G_TYPE_INVALID,
|
|
+ G_TYPE_STRING, &value,
|
|
+ G_TYPE_INVALID);
|
|
+ if (res == FALSE) {
|
|
+ g_warning ("Could not make DBUS call: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ can_suspend = g_strcmp0 (value, "yes") == 0 ||
|
|
+ g_strcmp0 (value, "challenge") == 0;
|
|
+ g_free (value);
|
|
+ return can_suspend;
|
|
+}
|
|
+
|
|
+void
|
|
+gsm_systemd_attempt_hibernate (GsmSystemd *manager)
|
|
+{
|
|
+ gboolean res;
|
|
+ GError *error;
|
|
+
|
|
+ error = NULL;
|
|
+
|
|
+ if (!gsm_systemd_ensure_sd_connection (manager, &error)) {
|
|
+ g_warning ("Could not connect to Systemd: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy,
|
|
+ "Hibernate",
|
|
+ INT_MAX,
|
|
+ &error,
|
|
+ G_TYPE_BOOLEAN, TRUE, /* interactive */
|
|
+ G_TYPE_INVALID,
|
|
+ G_TYPE_INVALID);
|
|
+ if (res == FALSE) {
|
|
+ g_warning ("Could not make DBUS call: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+}
|
|
+
|
|
+void
|
|
+gsm_systemd_attempt_suspend (GsmSystemd *manager)
|
|
+{
|
|
+ gboolean res;
|
|
+ GError *error;
|
|
+
|
|
+ error = NULL;
|
|
+
|
|
+ if (!gsm_systemd_ensure_sd_connection (manager, &error)) {
|
|
+ g_warning ("Could not connect to Systemd: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+
|
|
+ res = dbus_g_proxy_call_with_timeout (manager->priv->sd_proxy,
|
|
+ "Suspend",
|
|
+ INT_MAX,
|
|
+ &error,
|
|
+ G_TYPE_BOOLEAN, TRUE, /* interactive */
|
|
+ G_TYPE_INVALID,
|
|
+ G_TYPE_INVALID);
|
|
+ if (res == FALSE) {
|
|
+ g_warning ("Could not make DBUS call: %s",
|
|
+ error->message);
|
|
+ g_error_free (error);
|
|
+ return FALSE;
|
|
+ }
|
|
+}
|
|
+
|
|
gchar *
|
|
gsm_systemd_get_current_session_type (GsmSystemd *manager)
|
|
{
|
|
diff -up mate-session-manager-1.6.1/mate-session/gsm-systemd.h.login1 mate-session-manager-1.6.1/mate-session/gsm-systemd.h
|
|
--- mate-session-manager-1.6.1/mate-session/gsm-systemd.h.login1 2013-07-25 10:35:06.000000000 -0500
|
|
+++ mate-session-manager-1.6.1/mate-session/gsm-systemd.h 2013-09-10 08:39:15.689107516 -0500
|
|
@@ -89,10 +89,18 @@ gboolean gsm_systemd_can_stop
|
|
|
|
gboolean gsm_systemd_can_restart (GsmSystemd *manager);
|
|
|
|
+gboolean gsm_systemd_can_hibernate (GsmSystemd *manager);
|
|
+
|
|
+gboolean gsm_systemd_can_suspend (GsmSystemd *manager);
|
|
+
|
|
void gsm_systemd_attempt_stop (GsmSystemd *manager);
|
|
|
|
void gsm_systemd_attempt_restart (GsmSystemd *manager);
|
|
|
|
+void gsm_systemd_attempt_hibernate (GsmSystemd *manager);
|
|
+
|
|
+void gsm_systemd_attempt_suspend (GsmSystemd *manager);
|
|
+
|
|
void gsm_systemd_set_session_idle (GsmSystemd *manager,
|
|
gboolean is_idle);
|
|
|