summaryrefslogtreecommitdiff
path: root/community/mate-session-manager
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-01-17 03:43:05 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-01-17 03:43:05 +0000
commit953eead14ccfe47904e73cee9cea6e1255f57356 (patch)
tree8727303ca854032eb046995d052805c969755f30 /community/mate-session-manager
parentb296a78e1469d58c52acc47586bd5bb84f25fc0f (diff)
Fri Jan 17 03:37:47 UTC 2014
Diffstat (limited to 'community/mate-session-manager')
-rw-r--r--community/mate-session-manager/PKGBUILD54
-rw-r--r--community/mate-session-manager/e934e91226e9a93956121c9c84ecf3664fcd68be.diff293
-rw-r--r--community/mate-session-manager/f0b5b1ab78879d64f80117415aacf029359afea5.diff271
-rw-r--r--community/mate-session-manager/mate-session-manager.install12
4 files changed, 630 insertions, 0 deletions
diff --git a/community/mate-session-manager/PKGBUILD b/community/mate-session-manager/PKGBUILD
new file mode 100644
index 000000000..f068aafd5
--- /dev/null
+++ b/community/mate-session-manager/PKGBUILD
@@ -0,0 +1,54 @@
+# $Id: PKGBUILD 104191 2014-01-16 16:24:45Z flexiondotorg $
+# Maintainer : Martin Wimpress <code@flexion.org>
+# Contributor: Giovanni Ricciardi <kar98k.sniper@gmail.com>
+# Contributor: Xpander <xpander0@gmail.com>
+
+pkgname=mate-session-manager
+pkgver=1.6.1
+pkgrel=9
+pkgdesc="The MATE Session Handler"
+url="http://mate-desktop.org"
+arch=('i686' 'x86_64')
+license=('GPL' 'LGPL')
+depends=('dbus-glib' 'gtk2' 'libsm' 'libxtst' 'mate-desktop' 'mate-polkit'
+ 'mate-settings-daemon')
+makedepends=('mate-common' 'perl-xml-parser' 'xmlto')
+options=('!emptydirs')
+groups=('mate')
+source=("http://pub.mate-desktop.org/releases/1.6/${pkgname}-${pkgver}.tar.xz"
+ f0b5b1ab78879d64f80117415aacf029359afea5.diff
+ e934e91226e9a93956121c9c84ecf3664fcd68be.diff)
+sha1sums=('46188f6c02cc5978688af9d5db4be09f1b9199a5'
+ '20fb99c29731d05191cd0029d0573db784b06ccf'
+ '4312495bcd12ca5a20f7d5442b7517902605534c')
+install=${pkgname}.install
+
+prepare() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ # fix systemd-login1 support for hibernate/suspend
+ # https://github.com/mate-desktop/mate-session-manager/commit/f0b5b1ab78879d64f80117415aacf029359afea5
+ patch -Np1 -i "${srcdir}/f0b5b1ab78879d64f80117415aacf029359afea5.diff"
+
+ # Make upower optional
+ # https://github.com/mate-desktop/mate-session-manager/commit/e934e91226e9a93956121c9c84ecf3664fcd68be
+ patch -Np1 -i "${srcdir}/e934e91226e9a93956121c9c84ecf3664fcd68be.diff"
+
+ # Recreate the build system because configure.ac was patched.
+ autoreconf -fi
+}
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure \
+ --prefix=/usr \
+ --libexecdir=/usr/lib/${pkgname} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --disable-upower
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+}
diff --git a/community/mate-session-manager/e934e91226e9a93956121c9c84ecf3664fcd68be.diff b/community/mate-session-manager/e934e91226e9a93956121c9c84ecf3664fcd68be.diff
new file mode 100644
index 000000000..bd42a4722
--- /dev/null
+++ b/community/mate-session-manager/e934e91226e9a93956121c9c84ecf3664fcd68be.diff
@@ -0,0 +1,293 @@
+diff --git a/configure.ac b/configure.ac
+index 37bb191..a9e20ef 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -70,7 +70,6 @@ PKG_CHECK_MODULES(MATE_SESSION,
+ gio-2.0 >= $GIO_REQUIRED
+ gtk+-$GTK_API_VERSION >= $GTK_REQUIRED
+ dbus-glib-1 >= $DBUS_GLIB_REQUIRED
+- upower-glib >= $UPOWER_REQUIRED
+ )
+
+ PKG_CHECK_MODULES(SESSION_PROPERTIES,
+@@ -128,6 +127,24 @@ AM_CONDITIONAL(HAVE_SYSTEMD, test "x$use_systemd" = "xyes")
+ AC_SUBST(HAVE_SYSTEMD)
+
+ dnl ====================================================================
++dnl UPOWER
++dnl ====================================================================
++
++AC_ARG_ENABLE(upower,
++ AS_HELP_STRING([--enable-upower],
++ [Use upower to suspend/hibernate]),
++ enable_upower=$enableval,
++ enable_upower=yes)
++if test "x$enable_upower" = "xyes"; then
++ PKG_CHECK_MODULES(UPOWER, upower-glib >= $UPOWER_REQUIRED, has_upower=yes, has_upower=no)
++ AC_DEFINE(HAVE_UPOWER, 1, [upower support])
++ AC_SUBST(UPOWER_CFLAGS)
++ AC_SUBST(UPOWER_LIBS)
++fi
++AM_CONDITIONAL(HAVE_UPOWER, test "x$enable_upower" = "xyes")
++AC_SUBST(HAVE_UPOWER)
++
++dnl ====================================================================
+ dnl X development libraries check
+ dnl ====================================================================
+
+@@ -385,6 +402,7 @@ echo "
+ GTK+ version: ${with_gtk}
+ Default WM: ${with_default_wm}
+ Systemd support: ${use_systemd}
++ Upower support: ${enable_upower}
+ IPv6 support: ${have_full_ipv6}
+ Backtrace support: ${have_backtrace}
+ XRender support: ${have_xrender}
+diff --git a/mate-session/Makefile.am b/mate-session/Makefile.am
+index f37a0e2..53f0fc7 100644
+--- a/mate-session/Makefile.am
++++ b/mate-session/Makefile.am
+@@ -7,6 +7,7 @@ noinst_PROGRAMS = \
+ AM_CPPFLAGS = \
+ $(MATE_SESSION_CFLAGS) \
+ $(SYSTEMD_CFLAGS) \
++ $(UPOWER_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+ AM_CFLAGS = $(WARN_CFLAGS)
+@@ -76,6 +77,7 @@ mate_session_LDADD = \
+ $(XEXT_LIBS) \
+ $(MATE_SESSION_LIBS) \
+ $(SYSTEMD_LIBS) \
++ $(UPOWER_LIBS) \
+ $(EXECINFO_LIBS)
+
+ libgsmutil_la_SOURCES = \
+diff --git a/mate-session/gsm-logout-dialog.c b/mate-session/gsm-logout-dialog.c
+index 1a79875..323f123 100644
+--- a/mate-session/gsm-logout-dialog.c
++++ b/mate-session/gsm-logout-dialog.c
+@@ -27,7 +27,9 @@
+ #include <glib/gi18n.h>
+ #include <gtk/gtk.h>
+
++#ifdef HAVE_UPOWER
+ #include <upower.h>
++#endif
+
+ #include "gsm-logout-dialog.h"
+ #ifdef HAVE_SYSTEMD
+@@ -52,8 +54,9 @@
+ struct _GsmLogoutDialogPrivate
+ {
+ GsmDialogLogoutType type;
+-
++#ifdef HAVE_UPOWER
+ UpClient *up_client;
++#endif
+ #ifdef HAVE_SYSTEMD
+ GsmSystemd *systemd;
+ #endif
+@@ -147,9 +150,9 @@ enum {
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (logout_dialog), TRUE);
+ gtk_window_set_keep_above (GTK_WINDOW (logout_dialog), TRUE);
+ gtk_window_stick (GTK_WINDOW (logout_dialog));
+-
++#ifdef HAVE_UPOWER
+ logout_dialog->priv->up_client = up_client_new ();
+-
++#endif
+ #ifdef HAVE_SYSTEMD
+ if (LOGIND_RUNNING())
+ logout_dialog->priv->systemd = gsm_get_systemd ();
+@@ -176,12 +179,12 @@ enum {
+ g_source_remove (logout_dialog->priv->timeout_id);
+ logout_dialog->priv->timeout_id = 0;
+ }
+-
++#ifdef HAVE_UPOWER
+ if (logout_dialog->priv->up_client) {
+ g_object_unref (logout_dialog->priv->up_client);
+ logout_dialog->priv->up_client = NULL;
+ }
+-
++#endif
+ #ifdef HAVE_SYSTEMD
+ if (logout_dialog->priv->systemd) {
+ g_object_unref (logout_dialog->priv->systemd);
+@@ -201,13 +204,17 @@ enum {
+ gsm_logout_supports_system_suspend (GsmLogoutDialog *logout_dialog)
+ {
+ gboolean ret;
++ ret = FALSE;
+ #ifdef HAVE_SYSTEMD
+ if (LOGIND_RUNNING())
+ ret = gsm_systemd_can_suspend (logout_dialog->priv->systemd);
++#endif
++#if defined(HAVE_SYSTEMD) && defined(HAVE_UPOWER)
+ else
+ #endif
++#ifdef HAVE_UPOWER
+ ret = up_client_get_can_suspend (logout_dialog->priv->up_client);
+-
++#endif
+ return ret;
+ }
+
+@@ -215,13 +222,17 @@ enum {
+ gsm_logout_supports_system_hibernate (GsmLogoutDialog *logout_dialog)
+ {
+ gboolean ret;
++ ret = FALSE;
+ #ifdef HAVE_SYSTEMD
+ if (LOGIND_RUNNING())
+ ret = gsm_systemd_can_hibernate (logout_dialog->priv->systemd);
++#endif
++#if defined(HAVE_SYSTEMD) && defined(HAVE_UPOWER)
+ else
+ #endif
++#ifdef HAVE_UPOWER
+ ret = up_client_get_can_hibernate (logout_dialog->priv->up_client);
+-
++#endif
+ return ret;
+ }
+
+diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c
+index 79d0829..17a20b8 100644
+--- a/mate-session/gsm-manager.c
++++ b/mate-session/gsm-manager.c
+@@ -38,7 +38,9 @@
+ #include <dbus/dbus-glib.h>
+ #include <dbus/dbus-glib-lowlevel.h>
+
++#ifdef HAVE_UPOWER
+ #include <upower.h>
++#endif
+
+ #include <gtk/gtk.h> /* for logout dialog */
+ #include <gio/gio.h> /* for gsettings */
+@@ -144,9 +146,10 @@ struct GsmManagerPrivate
+
+ DBusGProxy *bus_proxy;
+ DBusGConnection *connection;
+-
++#ifdef HAVE_UPOWER
+ /* Interface with other parts of the system */
+ UpClient *up_client;
++#endif
+ };
+
+ enum {
+@@ -1097,10 +1100,11 @@ enum {
+ static void
+ manager_attempt_hibernate (GsmManager *manager)
+ {
++#ifdef HAVE_UPOWER
+ gboolean can_hibernate;
+ GError *error;
+ gboolean ret;
+-
++#endif
+ #ifdef HAVE_SYSTEMD
+ if (LOGIND_RUNNING()) {
+
+@@ -1113,8 +1117,11 @@ enum {
+
+ gsm_systemd_attempt_hibernate (systemd);
+ }
++#endif
++#if defined(HAVE_SYSTEMD) && defined(HAVE_UPOWER)
+ else {
+ #endif
++#ifdef HAVE_UPOWER
+ can_hibernate = up_client_get_can_hibernate (manager->priv->up_client);
+ if (can_hibernate) {
+
+@@ -1129,7 +1136,8 @@ enum {
+ g_error_free (error);
+ }
+ }
+-#ifdef HAVE_SYSTEMD
++#endif
++#if defined(HAVE_SYSTEMD) && defined(HAVE_UPOWER)
+ }
+ #endif
+ }
+@@ -1137,10 +1145,11 @@ enum {
+ static void
+ manager_attempt_suspend (GsmManager *manager)
+ {
++#ifdef HAVE_UPOWER
+ gboolean can_suspend;
+ GError *error;
+ gboolean ret;
+-
++#endif
+ #ifdef HAVE_SYSTEMD
+ if (LOGIND_RUNNING()) {
+
+@@ -1153,8 +1162,11 @@ enum {
+
+ gsm_systemd_attempt_suspend (systemd);
+ }
++#endif
++#if defined(HAVE_SYSTEMD) && defined(HAVE_UPOWER)
+ else {
+ #endif
++#ifdef HAVE_UPOWER
+ can_suspend = up_client_get_can_suspend (manager->priv->up_client);
+ if (can_suspend) {
+
+@@ -1169,7 +1181,8 @@ enum {
+ g_error_free (error);
+ }
+ }
+-#ifdef HAVE_SYSTEMD
++#endif
++#if defined(HAVE_SYSTEMD) && defined(HAVE_UPOWER)
+ }
+ #endif
+ }
+@@ -2341,12 +2354,12 @@ enum {
+ g_object_unref (manager->priv->settings_screensaver);
+ manager->priv->settings_screensaver = NULL;
+ }
+-
++#ifdef HAVE_UPOWER
+ if (manager->priv->up_client != NULL) {
+ g_object_unref (manager->priv->up_client);
+ manager->priv->up_client = NULL;
+ }
+-
++#endif
+ G_OBJECT_CLASS (gsm_manager_parent_class)->dispose (object);
+ }
+
+@@ -2553,9 +2566,9 @@ enum {
+ "status-changed",
+ G_CALLBACK (on_presence_status_changed),
+ manager);
+-
++#ifdef HAVE_UPOWER
+ manager->priv->up_client = up_client_new ();
+-
++#endif
+ g_signal_connect (manager->priv->settings_session,
+ "changed",
+ G_CALLBACK (on_gsettings_key_changed),
+@@ -3224,12 +3237,12 @@ enum {
+ #endif
+ gboolean can_suspend;
+ gboolean can_hibernate;
+-
++#ifdef HAVE_UPOWER
+ g_object_get (manager->priv->up_client,
+ "can-suspend", &can_suspend,
+ "can-hibernate", &can_hibernate,
+ NULL);
+-
++#endif
+ g_debug ("GsmManager: CanShutdown called");
+
+ g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
diff --git a/community/mate-session-manager/f0b5b1ab78879d64f80117415aacf029359afea5.diff b/community/mate-session-manager/f0b5b1ab78879d64f80117415aacf029359afea5.diff
new file mode 100644
index 000000000..ffbe19a5d
--- /dev/null
+++ b/community/mate-session-manager/f0b5b1ab78879d64f80117415aacf029359afea5.diff
@@ -0,0 +1,271 @@
+diff --git a/mate-session/gsm-logout-dialog.c b/mate-session/gsm-logout-dialog.c
+index 2d2947c..1a79875 100644
+--- a/mate-session/gsm-logout-dialog.c
++++ b/mate-session/gsm-logout-dialog.c
+@@ -200,13 +200,29 @@ enum {
+ 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 --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c
+index 8143d1f..b4986ac 100644
+--- a/mate-session/gsm-manager.c
++++ b/mate-session/gsm-manager.c
+@@ -1109,6 +1109,20 @@ enum {
+ 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) {
+
+@@ -1123,6 +1137,9 @@ enum {
+ g_error_free (error);
+ }
+ }
++#ifdef HAVE_SYSTEMD
++ }
++#endif
+ }
+
+ static void
+@@ -1132,6 +1149,20 @@ enum {
+ 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) {
+
+@@ -1146,6 +1177,9 @@ enum {
+ g_error_free (error);
+ }
+ }
++#ifdef HAVE_SYSTEMD
++ }
++#endif
+ }
+
+ static void
+diff --git a/mate-session/gsm-systemd.c b/mate-session/gsm-systemd.c
+index 377f026..dbe8ea0 100644
+--- a/mate-session/gsm-systemd.c
++++ b/mate-session/gsm-systemd.c
+@@ -725,6 +725,141 @@ static void gsm_systemd_on_name_owner_changed (DBusGProxy *bus_proxy,
+ 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 --git a/mate-session/gsm-systemd.h b/mate-session/gsm-systemd.h
+index 8e886ba..e0e21c4 100644
+--- a/mate-session/gsm-systemd.h
++++ b/mate-session/gsm-systemd.h
+@@ -89,10 +89,18 @@ enum _GsmSystemdError {
+
+ 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);
+
diff --git a/community/mate-session-manager/mate-session-manager.install b/community/mate-session-manager/mate-session-manager.install
new file mode 100644
index 000000000..b30edffe9
--- /dev/null
+++ b/community/mate-session-manager/mate-session-manager.install
@@ -0,0 +1,12 @@
+post_install() {
+ glib-compile-schemas /usr/share/glib-2.0/schemas/
+ gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}