summaryrefslogtreecommitdiff
path: root/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch')
-rw-r--r--mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch267
1 files changed, 267 insertions, 0 deletions
diff --git a/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch b/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch
new file mode 100644
index 00000000000..009677b1cc4
--- /dev/null
+++ b/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-login1.patch
@@ -0,0 +1,267 @@
+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);
+