mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-05-30 00:50:00 +00:00
xfce4-session: update to 4.10.1
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
This commit is contained in:
committed by
Martin Jansa
parent
35e9de7c66
commit
3d381d8e1f
-482
@@ -1,482 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
-152
@@ -1,152 +0,0 @@
|
|||||||
From 9f3077be682355e1cd07e9a9463e76307292208c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dimitar Zhekov <hamster@mbox.contact.bg>
|
|
||||||
Date: Thu, 30 Aug 2012 22:52:14 +0200
|
|
||||||
Subject: [PATCH] Handle multiple interactive session save (bug #5379).
|
|
||||||
|
|
||||||
Additionnaly, we now use SmSaveGlobal on log out / shutdown without
|
|
||||||
session save which avoids data loss. Previously clients would not save
|
|
||||||
anything on log out without session save.
|
|
||||||
|
|
||||||
Based on original work by Chris Bainbridge (chris.bainbridge@gmail.com).
|
|
||||||
---
|
|
||||||
Upstream-Status: applied
|
|
||||||
xfce4-session/xfsm-manager.c | 81 ++++++++++++++++++++++++-----------------
|
|
||||||
1 files changed, 47 insertions(+), 34 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/xfce4-session/xfsm-manager.c b/xfce4-session/xfsm-manager.c
|
|
||||||
index bf6a446..35811c5 100644
|
|
||||||
--- a/xfce4-session/xfsm-manager.c
|
|
||||||
+++ b/xfce4-session/xfsm-manager.c
|
|
||||||
@@ -98,6 +98,7 @@ struct _XfsmManager
|
|
||||||
|
|
||||||
XfsmShutdownType shutdown_type;
|
|
||||||
XfsmShutdown *shutdown_helper;
|
|
||||||
+ gboolean save_session;
|
|
||||||
|
|
||||||
gboolean session_chooser;
|
|
||||||
gchar *session_name;
|
|
||||||
@@ -230,6 +231,7 @@ xfsm_manager_init (XfsmManager *manager)
|
|
||||||
manager->failsafe_mode = TRUE;
|
|
||||||
manager->shutdown_type = XFSM_SHUTDOWN_LOGOUT;
|
|
||||||
manager->shutdown_helper = xfsm_shutdown_get ();
|
|
||||||
+ manager->save_session = TRUE;
|
|
||||||
|
|
||||||
manager->pending_properties = g_queue_new ();
|
|
||||||
manager->starting_properties = g_queue_new ();
|
|
||||||
@@ -989,7 +991,9 @@ xfsm_manager_interact (XfsmManager *manager,
|
|
||||||
XfsmClient *cl = lp->data;
|
|
||||||
if (xfsm_client_get_state (cl) == XFSM_CLIENT_INTERACTING)
|
|
||||||
{
|
|
||||||
- xfsm_client_set_state (cl, XFSM_CLIENT_WAITFORINTERACT);
|
|
||||||
+ /* a client is already interacting, so new client has to wait */
|
|
||||||
+ xfsm_client_set_state (client, XFSM_CLIENT_WAITFORINTERACT);
|
|
||||||
+ xfsm_manager_cancel_client_save_timeout(manager, client);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1138,44 +1142,47 @@ xfsm_manager_save_yourself_global (XfsmManager *manager,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!shutdown || shutdown_save)
|
|
||||||
+ /* don't save the session if shutting down without save */
|
|
||||||
+ manager->save_session = !shutdown || shutdown_save;
|
|
||||||
+
|
|
||||||
+ if (save_type == SmSaveBoth && !manager->save_session)
|
|
||||||
{
|
|
||||||
- xfsm_manager_set_state (manager,
|
|
||||||
- shutdown
|
|
||||||
- ? XFSM_MANAGER_SHUTDOWN
|
|
||||||
- : XFSM_MANAGER_CHECKPOINT);
|
|
||||||
+ /* saving the session, so clients should
|
|
||||||
+ * (prompt to) save the user data only */
|
|
||||||
+ save_type = SmSaveGlobal;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- /* handle legacy applications first! */
|
|
||||||
- xfsm_legacy_perform_session_save ();
|
|
||||||
+ xfsm_manager_set_state (manager,
|
|
||||||
+ shutdown
|
|
||||||
+ ? XFSM_MANAGER_SHUTDOWN
|
|
||||||
+ : XFSM_MANAGER_CHECKPOINT);
|
|
||||||
|
|
||||||
- for (lp = g_queue_peek_nth_link (manager->running_clients, 0);
|
|
||||||
- lp;
|
|
||||||
- lp = lp->next)
|
|
||||||
- {
|
|
||||||
- XfsmClient *client = lp->data;
|
|
||||||
- XfsmProperties *properties = xfsm_client_get_properties (client);
|
|
||||||
- const gchar *program;
|
|
||||||
+ /* handle legacy applications first! */
|
|
||||||
+ if (manager->save_session)
|
|
||||||
+ xfsm_legacy_perform_session_save ();
|
|
||||||
|
|
||||||
- /* xterm's session management is broken, so we won't
|
|
||||||
- * send a SAVE YOURSELF to xterms */
|
|
||||||
- program = xfsm_properties_get_string (properties, SmProgram);
|
|
||||||
- if (program != NULL && strcasecmp (program, "xterm") == 0)
|
|
||||||
- continue;
|
|
||||||
+ for (lp = g_queue_peek_nth_link (manager->running_clients, 0);
|
|
||||||
+ lp;
|
|
||||||
+ lp = lp->next)
|
|
||||||
+ {
|
|
||||||
+ XfsmClient *client = lp->data;
|
|
||||||
+ XfsmProperties *properties = xfsm_client_get_properties (client);
|
|
||||||
+ const gchar *program;
|
|
||||||
|
|
||||||
- if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL)
|
|
||||||
- {
|
|
||||||
- SmsSaveYourself (xfsm_client_get_sms_connection (client), save_type, shutdown,
|
|
||||||
- interact_style, fast);
|
|
||||||
- }
|
|
||||||
+ /* xterm's session management is broken, so we won't
|
|
||||||
+ * send a SAVE YOURSELF to xterms */
|
|
||||||
+ program = xfsm_properties_get_string (properties, SmProgram);
|
|
||||||
+ if (program != NULL && strcasecmp (program, "xterm") == 0)
|
|
||||||
+ continue;
|
|
||||||
|
|
||||||
- xfsm_client_set_state (client, XFSM_CLIENT_SAVING);
|
|
||||||
- xfsm_manager_start_client_save_timeout (manager, client);
|
|
||||||
+ if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL)
|
|
||||||
+ {
|
|
||||||
+ SmsSaveYourself (xfsm_client_get_sms_connection (client), save_type, shutdown,
|
|
||||||
+ interact_style, fast);
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- /* shutdown session without saving */
|
|
||||||
- xfsm_manager_perform_shutdown (manager);
|
|
||||||
+
|
|
||||||
+ xfsm_client_set_state (client, XFSM_CLIENT_SAVING);
|
|
||||||
+ xfsm_manager_start_client_save_timeout (manager, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1249,7 +1256,12 @@ xfsm_manager_save_yourself_done (XfsmManager *manager,
|
|
||||||
XfsmClient *client,
|
|
||||||
gboolean success)
|
|
||||||
{
|
|
||||||
- if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING && xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL)
|
|
||||||
+ /* In xfsm_manager_interact_done we send SmsShutdownCancelled to clients in
|
|
||||||
+ XFSM_CLIENT_WAITFORINTERACT state. They respond with SmcSaveYourselfDone
|
|
||||||
+ (xsmp_shutdown_cancelled in libxfce4ui library) so we allow it here. */
|
|
||||||
+ if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING &&
|
|
||||||
+ xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL &&
|
|
||||||
+ xfsm_client_get_state (client) != XFSM_CLIENT_WAITFORINTERACT)
|
|
||||||
{
|
|
||||||
xfsm_verbose ("Client Id = %s send SAVE YOURSELF DONE, while not being "
|
|
||||||
"in save mode. Prepare to be nuked!\n",
|
|
||||||
@@ -1521,7 +1533,8 @@ xfsm_manager_complete_saveyourself (XfsmManager *manager)
|
|
||||||
xfsm_verbose ("Manager finished SAVE YOURSELF, session data will be stored now.\n\n");
|
|
||||||
|
|
||||||
/* all clients done, store session data */
|
|
||||||
- xfsm_manager_store_session (manager);
|
|
||||||
+ if (manager->save_session)
|
|
||||||
+ xfsm_manager_store_session (manager);
|
|
||||||
|
|
||||||
if (manager->state == XFSM_MANAGER_CHECKPOINT)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
1.7.4.4
|
|
||||||
|
|
||||||
+5
-5
@@ -1,7 +1,7 @@
|
|||||||
From a629b051f4e5462150c77b95574bbc7a33bc9666 Mon Sep 17 00:00:00 2001
|
From a629b051f4e5462150c77b95574bbc7a33bc9666 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
|
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
|
||||||
Date: Mon, 31 Dec 2012 16:35:29 +0100
|
Date: Mon, 31 Dec 2012 16:35:29 +0100
|
||||||
Subject: [PATCH] configure.in: hard code path to iceauth
|
Subject: [PATCH] configure.ac: hard code path to iceauth
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
Content-Type: text/plain; charset=UTF-8
|
Content-Type: text/plain; charset=UTF-8
|
||||||
Content-Transfer-Encoding: 8bit
|
Content-Transfer-Encoding: 8bit
|
||||||
@@ -13,13 +13,13 @@ Upstream-Status: Inappropriate [config]
|
|||||||
|
|
||||||
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
|
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
|
||||||
---
|
---
|
||||||
configure.in | 8 +-------
|
configure.ac | 8 +-------
|
||||||
1 files changed, 1 insertions(+), 7 deletions(-)
|
1 files changed, 1 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
diff --git a/configure.in b/configure.in
|
diff --git a/configure.ac b/configure.ac
|
||||||
index 3cf3510..505e744 100644
|
index 3cf3510..505e744 100644
|
||||||
--- a/configure.in
|
--- a/configure.ac
|
||||||
+++ b/configure.in
|
+++ b/configure.ac
|
||||||
@@ -111,13 +111,7 @@ XDT_FEATURE_DEBUG([xfsm_debug_default])
|
@@ -111,13 +111,7 @@ XDT_FEATURE_DEBUG([xfsm_debug_default])
|
||||||
dnl Check for linker optimizations
|
dnl Check for linker optimizations
|
||||||
XDT_FEATURE_LINKER_OPTS()
|
XDT_FEATURE_LINKER_OPTS()
|
||||||
-82
@@ -1,82 +0,0 @@
|
|||||||
From 7a75a8a0f7089b716e702e6bb0cf13fc3194e3db Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nick Schermer <nick@xfce.org>
|
|
||||||
Date: Sun, 29 Apr 2012 13:35:37 +0200
|
|
||||||
Subject: [PATCH] Remove gnome-keyring remains.
|
|
||||||
|
|
||||||
Not required anymore. gnome_keyring_daemon_prepare_environment_sync
|
|
||||||
is a stub function that does nothing.
|
|
||||||
|
|
||||||
Upstream-Status: backport [1]
|
|
||||||
|
|
||||||
[1] http://git.xfce.org/xfce/xfce4-session/commit/?id=7a75a8a0f7089b716e702e6bb0cf13fc3194e3db
|
|
||||||
---
|
|
||||||
configure.in | 5 -----
|
|
||||||
xfce4-session/Makefile.am | 2 --
|
|
||||||
xfce4-session/xfsm-compat-gnome.c | 8 --------
|
|
||||||
3 files changed, 0 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/configure.in b/configure.in
|
|
||||||
index f8684b3..9aa4f8f 100644
|
|
||||||
--- a/configure.in
|
|
||||||
+++ b/configure.in
|
|
||||||
@@ -96,11 +96,6 @@ 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 gnome support
|
|
||||||
-XDT_CHECK_OPTIONAL_PACKAGE([GNOME_KEYRING], [gnome-keyring-1], [2.22],
|
|
||||||
- [libgnome-keyring],
|
|
||||||
- [Extra gnome-keyring compatibility support], [no])
|
|
||||||
-
|
|
||||||
dnl Check for debugging support
|
|
||||||
XDT_FEATURE_DEBUG([xfsm_debug_default])
|
|
||||||
|
|
||||||
diff --git a/xfce4-session/Makefile.am b/xfce4-session/Makefile.am
|
|
||||||
index 5e8343a..c015154 100644
|
|
||||||
--- a/xfce4-session/Makefile.am
|
|
||||||
+++ b/xfce4-session/Makefile.am
|
|
||||||
@@ -66,7 +66,6 @@ xfce4_session_SOURCES = \
|
|
||||||
xfsm-upower.h
|
|
||||||
|
|
||||||
xfce4_session_CFLAGS = \
|
|
||||||
- $(GNOME_KEYRING_CFLAGS) \
|
|
||||||
$(LIBSM_CFLAGS) \
|
|
||||||
$(LIBX11_CFLAGS) \
|
|
||||||
$(LIBXFCE4UI_CFLAGS) \
|
|
||||||
@@ -93,7 +92,6 @@ xfce4_session_LDADD = \
|
|
||||||
$(DBUS_GLIB_LIBS) \
|
|
||||||
$(LIBWNCK_LIBS) \
|
|
||||||
$(XFCONF_LIBS) \
|
|
||||||
- $(GNOME_KEYRING_LIBS) \
|
|
||||||
-lm
|
|
||||||
|
|
||||||
xfce4_session_DEPENDENCIES = \
|
|
||||||
diff --git a/xfce4-session/xfsm-compat-gnome.c b/xfce4-session/xfsm-compat-gnome.c
|
|
||||||
index b5b4a99..e1fa16f 100644
|
|
||||||
--- a/xfce4-session/xfsm-compat-gnome.c
|
|
||||||
+++ b/xfce4-session/xfsm-compat-gnome.c
|
|
||||||
@@ -59,10 +59,6 @@
|
|
||||||
|
|
||||||
#include <libxfce4util/libxfce4util.h>
|
|
||||||
|
|
||||||
-#ifdef HAVE_GNOME_KEYRING
|
|
||||||
-#include <gnome-keyring.h>
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#include <xfce4-session/xfsm-compat-gnome.h>
|
|
||||||
|
|
||||||
#define GNOME_KEYRING_DAEMON "gnome-keyring-daemon"
|
|
||||||
@@ -154,10 +150,6 @@ gnome_keyring_daemon_startup (void)
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strfreev (lines);
|
|
||||||
-
|
|
||||||
-#ifdef HAVE_GNOME_KEYRING
|
|
||||||
- gnome_keyring_daemon_prepare_environment_sync ();
|
|
||||||
-#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
--
|
|
||||||
1.7.4.4
|
|
||||||
|
|
||||||
+4
-7
@@ -4,16 +4,13 @@ LICENSE = "GPLv2"
|
|||||||
LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
|
LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
|
||||||
DEPENDS = "virtual/libx11 libsm libxfce4util libxfce4ui gtk+ libwnck dbus dbus-glib xfconf"
|
DEPENDS = "virtual/libx11 libsm libxfce4util libxfce4ui gtk+ libwnck dbus dbus-glib xfconf"
|
||||||
RDEPENDS_${PN} = "netbase xinit dbus-x11 iceauth upower"
|
RDEPENDS_${PN} = "netbase xinit dbus-x11 iceauth upower"
|
||||||
PR = "r7"
|
|
||||||
|
|
||||||
inherit xfce update-alternatives
|
inherit xfce update-alternatives
|
||||||
|
|
||||||
SRC_URI[md5sum] = "4768e1a41a0287af6aad18b329a0f230"
|
SRC_URI[md5sum] = "1757657c1d590aa6274b7b7cbba33352"
|
||||||
SRC_URI[sha256sum] = "bb8aa9a74c3d382840596fb4875144d66c7f3f47c8e9ee81d31e3428a72c46ce"
|
SRC_URI[sha256sum] = "0154fabdc398798c3445374ccc52a2f5bcb2d867fc94bc54114395b24f9cfc83"
|
||||||
SRC_URI += "file://0001-Handle-multiple-interactive-session-save-bug-5379.patch \
|
SRC_URI += " \
|
||||||
file://0002-Remove-gnome-keyring-remains.patch \
|
file://0001-configure.in-hard-code-path-to-iceauth.patch \
|
||||||
file://0003-configure.in-hard-code-path-to-iceauth.patch \
|
|
||||||
file://0001-Add-shutdown-reboot-functionality-for-systemd-bug-87.patch \
|
|
||||||
"
|
"
|
||||||
|
|
||||||
ALTERNATIVE_${PN} = "x-session-manager"
|
ALTERNATIVE_${PN} = "x-session-manager"
|
||||||
Reference in New Issue
Block a user