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.
gentoo-overlay/mate-base/mate-session-manager/files/mate-session-manager-1.6.1-...

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);