diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-01-17 03:43:05 +0000 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-01-17 03:43:05 +0000 |
commit | 953eead14ccfe47904e73cee9cea6e1255f57356 (patch) | |
tree | 8727303ca854032eb046995d052805c969755f30 /community/mate-session-manager | |
parent | b296a78e1469d58c52acc47586bd5bb84f25fc0f (diff) |
Fri Jan 17 03:37:47 UTC 2014
Diffstat (limited to 'community/mate-session-manager')
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 +} |