diff --git a/mate-session-manager-1.6.1-login1.patch b/mate-session-manager-1.6.1-login1.patch new file mode 100644 index 0000000..6fa5797 --- /dev/null +++ b/mate-session-manager-1.6.1-login1.patch @@ -0,0 +1,280 @@ +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-09-10 07:09:21.965737816 -0500 ++++ mate-session-manager-1.6.1/mate-session/gsm-logout-dialog.c 2013-09-10 07:09:30.356639223 -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-09-10 07:04:56.443898534 -0500 ++++ mate-session-manager-1.6.1/mate-session/gsm-manager.c 2013-09-10 08:22:14.914707541 -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); ++ ++ ret = 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); ++ ++ ret = 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:11:51.654036013 -0500 +@@ -725,6 +725,154 @@ 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; ++} ++ ++gboolean ++gsm_systemd_attempt_hibernate (GsmSystemd *manager) ++{ ++ gboolean res; ++ gchar *value; ++ gboolean 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, ++ "Hibernate", ++ 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; ++ } ++ ++ hibernate = g_strcmp0 (value, "yes") == 0 || ++ g_strcmp0 (value, "challenge") == 0; ++ g_free (value); ++ return hibernate; ++} ++ ++gboolean ++gsm_systemd_attempt_suspend (GsmSystemd *manager) ++{ ++ gboolean res; ++ gchar *value; ++ gboolean 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, ++ "Suspend", ++ 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; ++ } ++ ++ suspend = g_strcmp0 (value, "yes") == 0 || ++ g_strcmp0 (value, "challenge") == 0; ++ g_free (value); ++ return suspend; ++} ++ + 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:18:49.810155735 -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); + ++gboolean gsm_systemd_attempt_hibernate (GsmSystemd *manager); ++ ++gboolean gsm_systemd_attempt_suspend (GsmSystemd *manager); ++ + void gsm_systemd_set_session_idle (GsmSystemd *manager, + gboolean is_idle); + diff --git a/mate-session-manager.spec b/mate-session-manager.spec index 44f4455..9becd35 100644 --- a/mate-session-manager.spec +++ b/mate-session-manager.spec @@ -1,11 +1,14 @@ Name: mate-session-manager Version: 1.6.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: MATE Desktop session manager License: GPLv2+ URL: http://mate-desktop.org Source0: http://pub.mate-desktop.org/releases/1.6/%{name}-%{version}.tar.xz +# add systemd-login1 suspend/hibernate love (upstreamable) +Patch1: mate-session-manager-1.6.1-login1.patch + BuildRequires: dbus-glib-devel BuildRequires: desktop-file-utils BuildRequires: gtk2-devel @@ -35,6 +38,8 @@ full-featured user session. %prep %setup -q + +%patch1 -p1 -b .login1 %build %configure --disable-static \ @@ -95,6 +100,9 @@ fi %changelog +* Tue Sep 10 2013 Rex Dieter 1.6.1-2 +- initial attempt at systemd-login1 suspend/hibernate support + * Fri Jul 26 2013 Wolfgang Ulbrich - 1.6.1-1 - drop comment out patch from spec file - remove unnecessary BRs