aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xfce
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2013-04-13 13:53:32 +0200
committerMartin Jansa <Martin.Jansa@gmail.com>2013-04-15 16:22:03 +0200
commit17c747d85e155f3eb2fab97c5a1ad66a68d809bc (patch)
tree4e9eb7d387bfcc614014110e851359bb1b8832cc /meta-xfce
parent5f26b009643d8a1a73aecb3aa0b7c5873943e7a1 (diff)
downloadmeta-openembedded-contrib-17c747d85e155f3eb2fab97c5a1ad66a68d809bc.tar.gz
xfce4-session: move systemd support from meta-systemd back to meta-xfce
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'meta-xfce')
-rw-r--r--meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Add-shutdown-reboot-functionality-for-systemd-bug-87.patch482
-rw-r--r--meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Handle-multiple-interactive-session-save-bug-5379.patch (renamed from meta-xfce/recipes-xfce/xfce4-session/files/0001-Handle-multiple-interactive-session-save-bug-5379.patch)0
-rw-r--r--meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0002-Remove-gnome-keyring-remains.patch (renamed from meta-xfce/recipes-xfce/xfce4-session/files/0002-Remove-gnome-keyring-remains.patch)0
-rw-r--r--meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0003-configure.in-hard-code-path-to-iceauth.patch (renamed from meta-xfce/recipes-xfce/xfce4-session/files/0003-configure.in-hard-code-path-to-iceauth.patch)0
-rw-r--r--meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.10.0.bb4
5 files changed, 485 insertions, 1 deletions
diff --git a/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Add-shutdown-reboot-functionality-for-systemd-bug-87.patch b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Add-shutdown-reboot-functionality-for-systemd-bug-87.patch
new file mode 100644
index 0000000000..ca5c362229
--- /dev/null
+++ b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Add-shutdown-reboot-functionality-for-systemd-bug-87.patch
@@ -0,0 +1,482 @@
+From ae28aef315a7a6b90f1649ce6d1f30b842791cbf Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Sun, 4 Nov 2012 21:23:36 +0100
+Subject: [PATCH] Add shutdown/reboot functionality for systemd (bug #8729).
+
+Based on patch by Christian Hesse and Evangelos Foutras.
+
+Upstream-Status: backport
+---
+ configure.in | 4 +
+ xfce4-session/Makefile.am | 14 ++-
+ xfce4-session/xfsm-shutdown.c | 35 ++++++-
+ xfce4-session/xfsm-systemd.c | 229 +++++++++++++++++++++++++++++++++++++++++
+ xfce4-session/xfsm-systemd.h | 55 ++++++++++
+ 5 files changed, 333 insertions(+), 4 deletions(-)
+ create mode 100644 xfce4-session/xfsm-systemd.c
+ create mode 100644 xfce4-session/xfsm-systemd.h
+
+diff --git a/configure.in b/configure.in
+index 9aa4f8f..134d0f7 100644
+--- a/configure.in
++++ b/configure.in
+@@ -96,6 +96,10 @@ XDT_CHECK_PACKAGE([DBUS], [dbus-1], [1.1.0])
+ XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.84])
+ XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.9.0])
+
++dnl Check for polkit / systemd integration
++XDT_CHECK_OPTIONAL_PACKAGE([SYSTEMD], [polkit-gobject-1], [0.100],
++ [systemd], [Systemd support (through polit)])
++
+ dnl Check for debugging support
+ XDT_FEATURE_DEBUG([xfsm_debug_default])
+
+diff --git a/xfce4-session/Makefile.am b/xfce4-session/Makefile.am
+index c015154..f748b2b 100644
+--- a/xfce4-session/Makefile.am
++++ b/xfce4-session/Makefile.am
+@@ -38,8 +38,6 @@ xfce4_session_SOURCES = \
+ xfsm-compat-gnome.h \
+ xfsm-compat-kde.c \
+ xfsm-compat-kde.h \
+- xfsm-consolekit.c \
+- xfsm-consolekit.h \
+ xfsm-dns.c \
+ xfsm-dns.h \
+ xfsm-error.c \
+@@ -65,6 +63,16 @@ xfce4_session_SOURCES = \
+ xfsm-upower.c \
+ xfsm-upower.h
+
++if HAVE_SYSTEMD
++xfce4_session_SOURCES += \
++ xfsm-systemd.c \
++ xfsm-systemd.h
++else
++xfce4_session_SOURCES += \
++ xfsm-consolekit.c \
++ xfsm-consolekit.h
++endif
++
+ xfce4_session_CFLAGS = \
+ $(LIBSM_CFLAGS) \
+ $(LIBX11_CFLAGS) \
+@@ -72,6 +80,7 @@ xfce4_session_CFLAGS = \
+ $(DBUS_CFLAGS) \
+ $(DBUS_GLIB_CFLAGS) \
+ $(LIBWNCK_CFLAGS) \
++ $(SYSTEMD_CFLAGS) \
+ $(XFCONF_CFLAGS) \
+ $(GMODULE_CFLAGS) \
+ $(PLATFORM_CFLAGS)
+@@ -91,6 +100,7 @@ xfce4_session_LDADD = \
+ $(DBUS_LIBS) \
+ $(DBUS_GLIB_LIBS) \
+ $(LIBWNCK_LIBS) \
++ $(SYSTEMD_LIBS) \
+ $(XFCONF_LIBS) \
+ -lm
+
+diff --git a/xfce4-session/xfsm-shutdown.c b/xfce4-session/xfsm-shutdown.c
+index d8757a8..4c483a7 100644
+--- a/xfce4-session/xfsm-shutdown.c
++++ b/xfce4-session/xfsm-shutdown.c
+@@ -66,10 +66,13 @@
+ #include <xfce4-session/xfsm-fadeout.h>
+ #include <xfce4-session/xfsm-global.h>
+ #include <xfce4-session/xfsm-legacy.h>
+-#include <xfce4-session/xfsm-consolekit.h>
+ #include <xfce4-session/xfsm-upower.h>
+
+-
++#ifdef HAVE_SYSTEMD
++#include <xfce4-session/xfsm-systemd.h>
++#else
++#include <xfce4-session/xfsm-consolekit.h>
++#endif
+
+ static void xfsm_shutdown_finalize (GObject *object);
+ static void xfsm_shutdown_sudo_free (XfsmShutdown *shutdown);
+@@ -93,7 +96,11 @@ struct _XfsmShutdown
+ {
+ GObject __parent__;
+
++#ifdef HAVE_SYSTEMD
++ XfsmSystemd *systemd;
++#else
+ XfsmConsolekit *consolekit;
++#endif
+ XfsmUPower *upower;
+
+ /* kiosk settings */
+@@ -131,7 +138,11 @@ xfsm_shutdown_init (XfsmShutdown *shutdown)
+ {
+ XfceKiosk *kiosk;
+
++#ifdef HAVE_SYSTEMD
++ shutdown->systemd = xfsm_systemd_get ();
++#else
+ shutdown->consolekit = xfsm_consolekit_get ();
++#endif
+ shutdown->upower = xfsm_upower_get ();
+ shutdown->helper_state = SUDO_NOT_INITIAZED;
+ shutdown->helper_require_password = FALSE;
+@@ -150,7 +161,11 @@ xfsm_shutdown_finalize (GObject *object)
+ {
+ XfsmShutdown *shutdown = XFSM_SHUTDOWN (object);
+
++#ifdef HAVE_SYSTEMD
++ g_object_unref (G_OBJECT (shutdown->systemd));
++#else
+ g_object_unref (G_OBJECT (shutdown->consolekit));
++#endif
+ g_object_unref (G_OBJECT (shutdown->upower));
+
+ /* close down helper */
+@@ -641,7 +656,11 @@ xfsm_shutdown_try_restart (XfsmShutdown *shutdown,
+ if (shutdown->helper_state == SUDO_AVAILABLE)
+ return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_RESTART, error);
+ else
++#ifdef HAVE_SYSTEMD
++ return xfsm_systemd_try_restart (shutdown->systemd, error);
++#else
+ return xfsm_consolekit_try_restart (shutdown->consolekit, error);
++#endif
+ }
+
+
+@@ -658,7 +677,11 @@ xfsm_shutdown_try_shutdown (XfsmShutdown *shutdown,
+ if (shutdown->helper_state == SUDO_AVAILABLE)
+ return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_SHUTDOWN, error);
+ else
++#ifdef HAVE_SYSTEMD
++ return xfsm_systemd_try_shutdown (shutdown->systemd, error);
++#else
+ return xfsm_consolekit_try_shutdown (shutdown->consolekit, error);
++#endif
+ }
+
+
+@@ -698,7 +721,11 @@ xfsm_shutdown_can_restart (XfsmShutdown *shutdown,
+ return TRUE;
+ }
+
++#ifdef HAVE_SYSTEMD
++ if (xfsm_systemd_can_restart (shutdown->systemd, can_restart, error))
++#else
+ if (xfsm_consolekit_can_restart (shutdown->consolekit, can_restart, error))
++#endif
+ return TRUE;
+
+ if (xfsm_shutdown_sudo_init (shutdown, error))
+@@ -725,7 +752,11 @@ xfsm_shutdown_can_shutdown (XfsmShutdown *shutdown,
+ return TRUE;
+ }
+
++#ifdef HAVE_SYSTEMD
++ if (xfsm_systemd_can_shutdown (shutdown->systemd, can_shutdown, error))
++#else
+ if (xfsm_consolekit_can_shutdown (shutdown->consolekit, can_shutdown, error))
++#endif
+ return TRUE;
+
+ if (xfsm_shutdown_sudo_init (shutdown, error))
+diff --git a/xfce4-session/xfsm-systemd.c b/xfce4-session/xfsm-systemd.c
+new file mode 100644
+index 0000000..7bdd39d
+--- /dev/null
++++ b/xfce4-session/xfsm-systemd.c
+@@ -0,0 +1,229 @@
++/*-
++ * Copyright (C) 2012 Christian Hesse
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2, or (at your option)
++ * any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++ * MA 02110-1301 USA.
++ */
++
++#include <config.h>
++
++#include <gio/gio.h>
++#include <polkit/polkit.h>
++#include <dbus/dbus-glib.h>
++#include <dbus/dbus-glib-lowlevel.h>
++
++#include <xfce4-session/xfsm-systemd.h>
++
++
++
++#define SYSTEMD_DBUS_NAME "org.freedesktop.login1"
++#define SYSTEMD_DBUS_PATH "/org/freedesktop/login1"
++#define SYSTEMD_DBUS_INTERFACE "org.freedesktop.login1.Manager"
++#define SYSTEMD_REBOOT_ACTION "Reboot"
++#define SYSTEMD_POWEROFF_ACTION "PowerOff"
++#define SYSTEMD_REBOOT_TEST "org.freedesktop.login1.reboot"
++#define SYSTEMD_POWEROFF_TEST "org.freedesktop.login1.power-off"
++
++
++
++static void xfsm_systemd_finalize (GObject *object);
++
++
++
++struct _XfsmSystemdClass
++{
++ GObjectClass __parent__;
++};
++
++struct _XfsmSystemd
++{
++ GObject __parent__;
++
++ PolkitAuthority *authority;
++ PolkitSubject *subject;
++};
++
++
++
++G_DEFINE_TYPE (XfsmSystemd, xfsm_systemd, G_TYPE_OBJECT)
++
++
++
++static void
++xfsm_systemd_class_init (XfsmSystemdClass *klass)
++{
++ GObjectClass *gobject_class;
++
++ gobject_class = G_OBJECT_CLASS (klass);
++ gobject_class->finalize = xfsm_systemd_finalize;
++}
++
++
++
++static void
++xfsm_systemd_init (XfsmSystemd *systemd)
++{
++ systemd->authority = polkit_authority_get_sync (NULL, NULL);
++ systemd->subject = polkit_unix_process_new (getpid());
++}
++
++
++
++static void
++xfsm_systemd_finalize (GObject *object)
++{
++ XfsmSystemd *systemd = XFSM_SYSTEMD (object);
++
++ g_object_unref (G_OBJECT (systemd->authority));
++ g_object_unref (G_OBJECT (systemd->subject));
++
++ (*G_OBJECT_CLASS (xfsm_systemd_parent_class)->finalize) (object);
++}
++
++
++static gboolean
++xfsm_systemd_can_method (XfsmSystemd *systemd,
++ gboolean *can_method,
++ const gchar *method,
++ GError **error)
++{
++ PolkitAuthorizationResult *res;
++ GError *local_error = NULL;
++
++ *can_method = FALSE;
++
++ res = polkit_authority_check_authorization_sync (systemd->authority,
++ systemd->subject,
++ method,
++ NULL,
++ POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE,
++ NULL,
++ &local_error);
++
++ if (res == NULL)
++ {
++ g_propagate_error (error, local_error);
++ return FALSE;
++ }
++
++ *can_method = polkit_authorization_result_get_is_authorized (res)
++ || polkit_authorization_result_get_is_challenge (res);
++
++ g_object_unref (G_OBJECT (res));
++
++ return TRUE;
++}
++
++
++
++static gboolean
++xfsm_systemd_try_method (XfsmSystemd *systemd,
++ const gchar *method,
++ GError **error)
++{
++ GDBusConnection *bus;
++ GError *local_error = NULL;
++
++ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, error);
++ if (G_UNLIKELY (bus == NULL))
++ return FALSE;
++
++ g_dbus_connection_call_sync (bus,
++ SYSTEMD_DBUS_NAME,
++ SYSTEMD_DBUS_PATH,
++ SYSTEMD_DBUS_INTERFACE,
++ method,
++ g_variant_new ("(b)", TRUE),
++ NULL, 0, G_MAXINT, NULL,
++ &local_error);
++
++ g_object_unref (G_OBJECT (bus));
++
++ if (local_error != NULL)
++ {
++ g_propagate_error (error, local_error);
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++
++
++XfsmSystemd *
++xfsm_systemd_get (void)
++{
++ static XfsmSystemd *object = NULL;
++
++ if (G_LIKELY (object != NULL))
++ {
++ g_object_ref (G_OBJECT (object));
++ }
++ else
++ {
++ object = g_object_new (XFSM_TYPE_SYSTEMD, NULL);
++ g_object_add_weak_pointer (G_OBJECT (object), (gpointer) &object);
++ }
++
++ return object;
++}
++
++
++
++gboolean
++xfsm_systemd_try_restart (XfsmSystemd *systemd,
++ GError **error)
++{
++ return xfsm_systemd_try_method (systemd,
++ SYSTEMD_REBOOT_ACTION,
++ error);
++}
++
++
++
++gboolean
++xfsm_systemd_try_shutdown (XfsmSystemd *systemd,
++ GError **error)
++{
++ return xfsm_systemd_try_method (systemd,
++ SYSTEMD_POWEROFF_ACTION,
++ error);
++}
++
++
++
++gboolean
++xfsm_systemd_can_restart (XfsmSystemd *systemd,
++ gboolean *can_restart,
++ GError **error)
++{
++ return xfsm_systemd_can_method (systemd,
++ can_restart,
++ SYSTEMD_REBOOT_TEST,
++ error);
++}
++
++
++
++gboolean
++xfsm_systemd_can_shutdown (XfsmSystemd *systemd,
++ gboolean *can_shutdown,
++ GError **error)
++{
++ return xfsm_systemd_can_method (systemd,
++ can_shutdown,
++ SYSTEMD_POWEROFF_TEST,
++ error);
++}
+diff --git a/xfce4-session/xfsm-systemd.h b/xfce4-session/xfsm-systemd.h
+new file mode 100644
+index 0000000..8223622
+--- /dev/null
++++ b/xfce4-session/xfsm-systemd.h
+@@ -0,0 +1,55 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2012 Christian Hesse
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++#ifndef __XFSM_SYSTEMD_H__
++#define __XFSM_SYSTEMD_H__
++
++typedef struct _XfsmSystemdClass XfsmSystemdClass;
++typedef struct _XfsmSystemd XfsmSystemd;
++
++#define XFSM_TYPE_SYSTEMD (xfsm_systemd_get_type ())
++#define XFSM_SYSTEMD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFSM_TYPE_SYSTEMD, XfsmSystemd))
++#define XFSM_SYSTEMD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XFSM_TYPE_SYSTEMD, XfsmSystemdClass))
++#define XFSM_IS_SYSTEMD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFSM_TYPE_SYSTEMD))
++#define XFSM_IS_SYSTEMD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFSM_TYPE_SYSTEMD))
++#define XFSM_SYSTEMD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFSM_TYPE_SYSTEMD, XfsmSystemdClass))
++
++GType xfsm_systemd_get_type (void) G_GNUC_CONST;
++
++XfsmSystemd *xfsm_systemd_get (void);
++
++gboolean xfsm_systemd_try_restart (XfsmSystemd *systemd,
++ GError **error);
++
++gboolean xfsm_systemd_try_shutdown (XfsmSystemd *systemd,
++ GError **error);
++
++gboolean xfsm_systemd_can_restart (XfsmSystemd *systemd,
++ gboolean *can_restart,
++ GError **error);
++
++gboolean xfsm_systemd_can_shutdown (XfsmSystemd *systemd,
++ gboolean *can_shutdown,
++ GError **error);
++
++G_END_DECLS
++
++#endif /* __XFSM_SYSTEMD_H__ */
+--
+1.7.4.4
+
diff --git a/meta-xfce/recipes-xfce/xfce4-session/files/0001-Handle-multiple-interactive-session-save-bug-5379.patch b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Handle-multiple-interactive-session-save-bug-5379.patch
index dd9c6d4674..dd9c6d4674 100644
--- a/meta-xfce/recipes-xfce/xfce4-session/files/0001-Handle-multiple-interactive-session-save-bug-5379.patch
+++ b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-Handle-multiple-interactive-session-save-bug-5379.patch
diff --git a/meta-xfce/recipes-xfce/xfce4-session/files/0002-Remove-gnome-keyring-remains.patch b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0002-Remove-gnome-keyring-remains.patch
index b26669f6e0..b26669f6e0 100644
--- a/meta-xfce/recipes-xfce/xfce4-session/files/0002-Remove-gnome-keyring-remains.patch
+++ b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0002-Remove-gnome-keyring-remains.patch
diff --git a/meta-xfce/recipes-xfce/xfce4-session/files/0003-configure.in-hard-code-path-to-iceauth.patch b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0003-configure.in-hard-code-path-to-iceauth.patch
index 41a527c61c..41a527c61c 100644
--- a/meta-xfce/recipes-xfce/xfce4-session/files/0003-configure.in-hard-code-path-to-iceauth.patch
+++ b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0003-configure.in-hard-code-path-to-iceauth.patch
diff --git a/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.10.0.bb b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.10.0.bb
index 6ad834d66f..2c185a5155 100644
--- a/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.10.0.bb
+++ b/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.10.0.bb
@@ -3,8 +3,9 @@ SECTION = "x11"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
DEPENDS = "virtual/libx11 libsm libxfce4util libxfce4ui gtk+ libwnck dbus dbus-glib xfconf"
+DEPENDS += "${@base_contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}"
RDEPENDS_${PN} = "netbase xinit dbus-x11 iceauth consolekit upower"
-PR = "r2"
+PR = "r5"
inherit xfce
@@ -13,6 +14,7 @@ SRC_URI[sha256sum] = "bb8aa9a74c3d382840596fb4875144d66c7f3f47c8e9ee81d31e3428a7
SRC_URI += "file://0001-Handle-multiple-interactive-session-save-bug-5379.patch \
file://0002-Remove-gnome-keyring-remains.patch \
file://0003-configure.in-hard-code-path-to-iceauth.patch \
+ file://0001-Add-shutdown-reboot-functionality-for-systemd-bug-87.patch \
"
# protect from frightening message that xfce might not work correctly