summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2016-06-19 13:01:49 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-01-11 17:38:23 +0100
commitb178c76ae4341fe4f715c8c8e516ae8a6a9ebb98 (patch)
treecc305dbfe5bec4217d77a5eba101030dbfd3dd1e
parentdb6feaa8e49b158d212367feb36087dd52abada1 (diff)
lxsession: add gtk3 packageconfig and enable it
While at it remove patches which no longer applied. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r--recipes-lxde/lxsession/lxsession-0.4.9.2/0001-lxsession-logout-fix-dbus-string-value-check-for-sys.patch31
-rw-r--r--recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-configure-ac.patch11
-rw-r--r--recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-logout-git-62bfec81f6c50083423b8501a94be80125396966.patch1455
-rw-r--r--recipes-lxde/lxsession/lxsession/gtk3.patch524
-rw-r--r--recipes-lxde/lxsession/lxsession_0.5.2.bb13
5 files changed, 535 insertions, 1499 deletions
diff --git a/recipes-lxde/lxsession/lxsession-0.4.9.2/0001-lxsession-logout-fix-dbus-string-value-check-for-sys.patch b/recipes-lxde/lxsession/lxsession-0.4.9.2/0001-lxsession-logout-fix-dbus-string-value-check-for-sys.patch
deleted file mode 100644
index 624d036..0000000
--- a/recipes-lxde/lxsession/lxsession-0.4.9.2/0001-lxsession-logout-fix-dbus-string-value-check-for-sys.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2b320b7f64fa04d59a04b00b2f0877c6d3427252 Mon Sep 17 00:00:00 2001
-From: Stefan Agner <stefan.agner@toradex.com>
-Date: Wed, 29 Oct 2014 14:35:25 +0100
-Subject: [PATCH] lxsession-logout: fix dbus string value check for systemd
-
-The string values have not been checked to be equal to "yes" or
-"challenge", but to be other than equal. This is always true because
-we compare two different strings. Fix the check, either "yes" or
-"challenge" need to be returned to return TRUE now.
-
-Upstream-Status: submitted
----
- lxsession-logout/lxsession-logout-dbus-interface.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lxsession-logout/lxsession-logout-dbus-interface.c b/lxsession-logout/lxsession-logout-dbus-interface.c
-index 3404615..6dde18a 100644
---- a/lxsession-logout/lxsession-logout-dbus-interface.c
-+++ b/lxsession-logout/lxsession-logout-dbus-interface.c
-@@ -189,7 +189,7 @@ systemd_query (const gchar *function, gboolean default_result, GError **error)
- if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(s)")))
- {
- g_variant_get (result, "(s)", &str);
-- if (g_strcmp0 (str, "yes") || g_strcmp0 (str, "challenge"))
-+ if (!g_strcmp0 (str, "yes") || !g_strcmp0 (str, "challenge"))
- function_result = TRUE;
- else
- function_result = default_result;
---
-2.1.2
-
diff --git a/recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-configure-ac.patch b/recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-configure-ac.patch
deleted file mode 100644
index 82e9eb7..0000000
--- a/recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-configure-ac.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- lxsession-0.4.9.2/configure.ac.orig 2014-04-30 17:40:58.544706818 +0200
-+++ lxsession-0.4.9.2/configure.ac 2014-04-30 17:38:27.425430368 +0200
-@@ -2,7 +2,7 @@
- AC_INIT([lxsession],[0.4.9.2],[],[lxsession])
-
- # Autotols programs
--AM_INIT_AUTOMAKE([1.11.1 -Wall -Werror foreign])
-+AM_INIT_AUTOMAKE([1.11.1 -Wall -Werror foreign subdir-objects])
- AC_PREREQ([2.69])
- IT_PROG_INTLTOOL([0.40.0],[no-xml])
-
diff --git a/recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-logout-git-62bfec81f6c50083423b8501a94be80125396966.patch b/recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-logout-git-62bfec81f6c50083423b8501a94be80125396966.patch
deleted file mode 100644
index 464de95..0000000
--- a/recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-logout-git-62bfec81f6c50083423b8501a94be80125396966.patch
+++ /dev/null
@@ -1,1455 +0,0 @@
-Update lxsession-logout to newer git revision.
-This ensures that shutdown, reboot etc. can be done with the help of logind.
-Without this we get a segfault when using the nonconsistent implementation for logind.
-i.e. function prototypes and implementation do not much.
-diff -Naur lxsession-0.4.9.2/lxsession-logout.orig/dbus-interface.c lxsession-0.4.9.2/lxsession-logout/dbus-interface.c
---- lxsession-0.4.9.2/lxsession-logout.orig/dbus-interface.c 2013-04-12 23:02:19.000000000 +0200
-+++ lxsession-0.4.9.2/lxsession-logout/dbus-interface.c 1970-01-01 01:00:00.000000000 +0100
-@@ -1,641 +0,0 @@
--/**
-- * Copyright (c) 2010 LxDE Developers, see the file AUTHORS for details.
-- *
-- * 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.
-- */
--
--#include <config.h>
--#include <glib.h>
--#include <string.h>
--#include <dbus/dbus.h>
--#include <gio/gio.h>
--
--/*** Mechanism independent ***/
--
--/* D-Bus context. */
--static struct {
-- int connection_tried : 1; /* True if connection has been tried */
-- DBusConnection * connection; /* Handle for connection */
--} dbus_context;
--
--static GDBusProxy *logind_proxy = NULL;
--
--enum { DBUS_TIMEOUT = 60000 }; /* Reply timeout */
--
--/* FORWARDS */
--gboolean dbus_ConsoleKit_CanStop(void);
--gboolean dbus_ConsoleKit_CanRestart(void);
--char * dbus_ConsoleKit_Stop(void);
--char * dbus_ConsoleKit_Restart(void);
--gboolean dbus_UPower_CanSuspend(void);
--gboolean dbus_UPower_CanHibernate(void);
--char * dbus_UPower_Suspend(void);
--char * dbus_UPower_Hibernate(void);
--gboolean dbus_HAL_CanShutdown(void);
--gboolean dbus_HAL_CanReboot(void);
--gboolean dbus_HAL_CanSuspend(void);
--gboolean dbus_HAL_CanHibernate(void);
--char * dbus_HAL_Shutdown(void);
--char * dbus_HAL_Reboot(void);
--char * dbus_HAL_Suspend(void);
--char * dbus_HAL_Hibernate(void);
--char * dbus_LXDE_Logout(void);
--/* End FORWARDS */
--
--/* Connect to the system bus. Once a connection is made, it is saved for reuse. */
--static DBusConnection * dbus_connect_system(void)
--{
-- DBusError error;
-- dbus_error_init(&error);
-- dbus_context.connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
-- if (dbus_context.connection == NULL)
-- {
-- g_warning(G_STRLOC ": Failed to connect to the system message bus: %s", error.message);
-- dbus_error_free(&error);
-- }
-- dbus_context.connection_tried = TRUE;
--
-- return dbus_context.connection;
--}
--
--static DBusConnection * dbus_connect_session(void)
--{
-- DBusError error;
-- dbus_error_init(&error);
-- dbus_context.connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
-- if (dbus_context.connection == NULL)
-- {
-- g_warning(G_STRLOC ": Failed to connect to the session message bus: %s", error.message);
-- dbus_error_free(&error);
-- }
-- dbus_context.connection_tried = TRUE;
--
-- return dbus_context.connection;
--}
--
--
--/* Send a message. */
--static DBusMessage * dbus_send_message_system(DBusMessage * message, char * * error_text)
--{
-- /* Get a connection handle. */
-- DBusConnection * connection = dbus_connect_system();
-- if (connection == NULL)
-- return FALSE;
--
-- /* Send the message. */
-- DBusError error;
-- dbus_error_init(&error);
-- DBusMessage * reply = dbus_connection_send_with_reply_and_block(connection, message, DBUS_TIMEOUT, &error);
-- dbus_message_unref(message);
-- if (reply == NULL)
-- {
-- if ((error.name == NULL) || (strcmp(error.name, DBUS_ERROR_NO_REPLY) != 0))
-- {
-- if (error_text != NULL)
-- *error_text = g_strdup(error.message);
-- g_warning(G_STRLOC ": DBUS: %s", error.message);
-- }
-- dbus_error_free(&error);
-- }
-- return reply;
--}
--
--/* Send a message. */
--static DBusMessage * dbus_send_message_session(DBusMessage * message, char * * error_text)
--{
-- /* Get a connection handle. */
-- DBusConnection * connection = dbus_connect_session();
-- if (connection == NULL)
-- return FALSE;
--
-- /* Send the message. */
-- DBusError error;
-- dbus_error_init(&error);
-- DBusMessage * reply = dbus_connection_send_with_reply_and_block(connection, message, DBUS_TIMEOUT, &error);
-- dbus_message_unref(message);
-- if (reply == NULL)
-- {
-- if ((error.name == NULL) || (strcmp(error.name, DBUS_ERROR_NO_REPLY) != 0))
-- {
-- if (error_text != NULL)
-- *error_text = g_strdup(error.message);
-- g_warning(G_STRLOC ": DBUS: %s", error.message);
-- }
-- dbus_error_free(&error);
-- }
-- return reply;
--}
--
--/* Read a result for a method that returns void. */
--static char * dbus_read_result_void(DBusMessage * reply)
--{
-- if (reply != NULL)
-- dbus_message_unref(reply);
--
-- /* No result. Assume success. */
-- return NULL;
--}
--
--/* Read a result for a method that returns boolean. */
--static gboolean dbus_read_result_boolean(DBusMessage * reply)
--{
-- gboolean result = FALSE;
-- if (reply != NULL)
-- {
-- /* Get the boolean result. */
-- DBusError error;
-- dbus_error_init(&error);
-- dbus_bool_t status = dbus_message_get_args(
-- reply,
-- &error,
-- DBUS_TYPE_BOOLEAN, &result,
-- DBUS_TYPE_INVALID);
-- dbus_message_unref(reply);
-- if ( ! status)
-- {
-- g_warning(G_STRLOC ": DBUS: %s", error.message);
-- dbus_error_free(&error);
-- return FALSE;
-- }
-- }
-- return result;
--}
--
--/* Read a result for a method that returns string. */
--static char * dbus_read_result_string(DBusMessage * reply)
--{
-- char * result = FALSE;
-- if (reply != NULL)
-- {
-- /* Get the boolean result. */
-- DBusError error;
-- dbus_error_init(&error);
-- dbus_bool_t status = dbus_message_get_args(
-- reply,
-- &error,
-- DBUS_TYPE_STRING, &result,
-- DBUS_TYPE_INVALID);
-- dbus_message_unref(reply);
-- if ( ! status)
-- {
-- g_warning(G_STRLOC ": DBUS: %s", error.message);
-- dbus_error_free(&error);
-- return NULL;
-- }
-- }
-- return result;
--}
--
--/*** logind mechanism ***/
--
--static gboolean
--logind_query (const gchar *function, gboolean default_result, GError **error)
--{
-- GVariant *result;
-- gboolean function_result = FALSE;
-- const gchar *str;
--
-- if (!logind_proxy)
-- {
-- logind_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-- G_DBUS_PROXY_FLAGS_NONE,
-- NULL,
-- "org.freedesktop.login1",
-- "/org/freedesktop/login1",
-- "org.freedesktop.login1.Manager",
-- NULL,
-- error);
-- if (!logind_proxy)
-- return FALSE;
-- }
--
-- result = g_dbus_proxy_call_sync (logind_proxy,
-- function,
-- NULL,
-- G_DBUS_CALL_FLAGS_NONE,
-- -1,
-- NULL,
-- error);
-- if (!result)
-- return default_result;
--
-- if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(s)")))
-- {
-- g_variant_get (result, "(s)", &str);
-- if (g_strcmp0 (str, "yes") || g_strcmp0 (str, "challenge"))
-- function_result = TRUE;
-- else
-- function_result = default_result;
-- }
--
-- g_variant_unref (result);
-- return function_result;
--}
--
--static void
--logind_call_function (const gchar *function, gboolean value, GError **error)
--{
-- GVariant *result;
--
-- if (!logind_proxy)
-- {
-- logind_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-- G_DBUS_PROXY_FLAGS_NONE,
-- NULL,
-- "org.freedesktop.login1",
-- "/org/freedesktop/login1",
-- "org.freedesktop.login1.Manager",
-- NULL,
-- error);
-- if (!logind_proxy)
-- return;
-- }
--
-- result = g_dbus_proxy_call_sync (logind_proxy,
-- function,
-- g_variant_new ("(b)", value),
-- G_DBUS_CALL_FLAGS_NONE,
-- -1,
-- NULL,
-- error);
-- g_variant_unref (result);
-- return;
--}
--
--gboolean
--dbus_logind_CanPowerOff (void)
--{
-- return logind_query ("CanPowerOff", FALSE, NULL);
--}
--
--void
--dbus_logind_PowerOff (GError **error)
--{
-- logind_call_function ("PowerOff", TRUE, error);
--}
--
--gboolean
--dbus_logind_CanReboot (void)
--{
-- return logind_query ("CanReboot", FALSE, NULL);
--}
--
--void
--dbus_logind_Reboot (GError **error)
--{
-- logind_call_function ("Reboot", TRUE, error);
--}
--
--gboolean
--dbus_logind_CanSuspend (void)
--{
-- return logind_query ("CanSuspend", FALSE, NULL);
--}
--
--void
--dbus_logind_Suspend (GError **error)
--{
-- logind_call_function ("Suspend", TRUE, error);
--}
--
--gboolean
--dbus_logind_CanHibernate (void)
--{
-- return logind_query ("CanHibernate", FALSE, NULL);
--}
--
--void
--dbus_logind_Hibernate (GError **error)
--{
-- logind_call_function ("Hibernate", TRUE, error);
--}
--
--/*** ConsoleKit mechanism ***/
--
--/* Formulate a message to the ConsoleKit Manager interface. */
--static DBusMessage * dbus_ConsoleKit_formulate_message(const char * const query)
--{
-- return dbus_message_new_method_call(
-- "org.freedesktop.ConsoleKit",
-- "/org/freedesktop/ConsoleKit/Manager",
-- "org.freedesktop.ConsoleKit.Manager",
-- query);
--}
--
--/* Send a specified message to the ConsoleKit interface and process a boolean result. */
--static gboolean dbus_ConsoleKit_query(const char * const query)
--{
-- return dbus_read_result_boolean(dbus_send_message_system(dbus_ConsoleKit_formulate_message(query), NULL));
--}
--
--/* Send a specified message to the ConsoleKit interface and process a void result. */
--static char * dbus_ConsoleKit_command(const char * const command)
--{
-- char * error = NULL;
-- dbus_read_result_void(dbus_send_message_system(dbus_ConsoleKit_formulate_message(command), &error));
-- return error;
--}
--
--/* Invoke the CanStop method on ConsoleKit. */
--gboolean dbus_ConsoleKit_CanStop(void)
--{
-- return dbus_ConsoleKit_query("CanStop");
--}
--
--/* Invoke the CanRestart method on ConsoleKit. */
--gboolean dbus_ConsoleKit_CanRestart(void)
--{
-- return dbus_ConsoleKit_query("CanRestart");
--}
--
--/* Invoke the Stop method on ConsoleKit. */
--char * dbus_ConsoleKit_Stop(void)
--{
-- return dbus_ConsoleKit_command("Stop");
--}
--
--/* Invoke the Restart method on ConsoleKit. */
--char * dbus_ConsoleKit_Restart(void)
--{
-- return dbus_ConsoleKit_command("Restart");
--}
--
--/*** UPower mechanism ***/
--
--/* Formulate a message to the UPower interface. */
--static DBusMessage * dbus_UPower_formulate_command(const char * const command)
--{
-- return dbus_message_new_method_call(
-- "org.freedesktop.UPower",
-- "/org/freedesktop/UPower",
-- "org.freedesktop.UPower",
-- command);
--}
--
--/* Send a specified message to the UPower interface and process a boolean result. */
--static gboolean dbus_UPower_query(const char * const query)
--{
-- /* Formulate a message to the Properties interface. */
-- DBusMessage * message = dbus_message_new_method_call(
-- "org.freedesktop.UPower",
-- "/org/freedesktop/UPower",
-- "org.freedesktop.DBus.Properties",
-- "Get");
-- const char * const interface_name = "org.freedesktop.UPower";
-- dbus_message_append_args(message,
-- DBUS_TYPE_STRING, &interface_name,
-- DBUS_TYPE_STRING, &query,
-- DBUS_TYPE_INVALID);
--
-- /* Send the message. */
-- DBusMessage * reply = dbus_send_message_system(message, NULL);
-- if (reply == NULL)
-- return FALSE;
--
-- /* The return type is VARIANT expected to contain BOOLEAN. */
-- gboolean result = FALSE;
-- DBusMessageIter iter;
-- DBusMessageIter inner;
-- dbus_message_iter_init(reply, &iter);
-- if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_VARIANT)
-- {
-- dbus_message_iter_recurse(&iter, &inner);
-- if (dbus_message_iter_get_arg_type(&inner) == DBUS_TYPE_BOOLEAN)
-- dbus_message_iter_get_basic(&inner, &result);
-- }
-- dbus_message_unref(reply);
-- return result;
--}
--
--/* Send a specified message to the UPower interface and process a void result. */
--static char * dbus_UPower_command(const char * const command)
--{
-- char * error = NULL;
-- dbus_read_result_void(dbus_send_message_system(dbus_UPower_formulate_command(command), &error));
-- return error;
--}
--
--/* Read the can-suspend property of UPower. */
--gboolean dbus_UPower_CanSuspend(void)
--{
-- return dbus_UPower_query("CanSuspend");
--}
--
--/* Read the can-hibernate property of UPower. */
--gboolean dbus_UPower_CanHibernate(void)
--{
-- return dbus_UPower_query("CanHibernate");
--}
--
--/* Invoke the Suspend method on UPower. */
--char * dbus_UPower_Suspend(void)
--{
-- return dbus_UPower_command("Suspend");
--}
--
--/* Invoke the Hibernate method on UPower. */
--char * dbus_UPower_Hibernate(void)
--{
-- return dbus_UPower_command("Hibernate");
--}
--
--/*** HAL mechanism ***/
--
--/* Formulate a message to the HAL SystemPowerManagement interface. */
--static DBusMessage * dbus_HAL_formulate_message(const char * const query)
--{
-- return dbus_message_new_method_call(
-- "org.freedesktop.Hal",
-- "/org/freedesktop/Hal/devices/computer",
-- "org.freedesktop.Hal.Device.SystemPowerManagement",
-- query);
--}
--
--/* Formulate a message to the HAL SystemPowerManagement interface to query a property. */
--static DBusMessage * dbus_HAL_formulate_property_query(const char * const method, const char * const property)
--{
-- DBusMessage * message = dbus_message_new_method_call(
-- "org.freedesktop.Hal",
-- "/org/freedesktop/Hal/devices/computer",
-- "org.freedesktop.Hal.Device",
-- method);
-- if (message != NULL)
-- dbus_message_append_args(message, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID);
-- return message;
--}
--
--/* Formulate a message to the HAL SystemPowerManagement interface to query a boolean property. */
--static DBusMessage * dbus_HAL_formulate_boolean_property_query(const char * const property)
--{
-- return dbus_HAL_formulate_property_query("GetPropertyBoolean", property);
--}
--
--/* Formulate a message to the HAL SystemPowerManagement interface to query a string property. */
--static DBusMessage * dbus_HAL_formulate_string_property_query(const char * const property)
--{
-- return dbus_HAL_formulate_property_query("GetPropertyString", property);
--}
--
--/* Send a specified property query to the HAL interface and process whether the result exists. */
--static gboolean dbus_HAL_string_exists_query(const char * const property)
--{
-- DBusMessage * message = dbus_HAL_formulate_string_property_query(property);
-- if (message == NULL)
-- return FALSE;
-- DBusMessage * reply = dbus_send_message_system(message, NULL);
-- if (reply == NULL)
-- return FALSE;
-- dbus_message_unref(reply);
-- return TRUE;
--}
--
--/* Send a specified property query to the HAL interface and process a boolean result. */
--static gboolean dbus_HAL_boolean_query(const char * const property)
--{
-- return dbus_read_result_boolean(dbus_send_message_system(dbus_HAL_formulate_boolean_property_query(property), NULL));
--}
--
--/* Send a specified message to the HAL interface and process a void result. */
--static char * dbus_HAL_command(const char * const command)
--{
-- /* Formulate the message. */
-- DBusMessage * message = dbus_HAL_formulate_message(command);
-- if (message == NULL)
-- return NULL;
--
-- /* Suspend has an argument. */
-- if (strcmp(command, "Suspend") == 0)
-- {
-- dbus_int32_t suspend_arg = 0;
-- dbus_message_append_args(message, DBUS_TYPE_INT32, &suspend_arg, DBUS_TYPE_INVALID);
-- }
--
-- /* Send the message and wait for a reply. */
-- char * error = NULL;
-- dbus_read_result_void(dbus_send_message_system(message, &error));
-- return error;
--}
--
--/* Read the can-shutdown property of HAL. */
--gboolean dbus_HAL_CanShutdown(void)
--{
-- return dbus_HAL_string_exists_query("power_management.type");
--}
--
--/* Read the can-reboot property of HAL. */
--gboolean dbus_HAL_CanReboot(void)
--{
-- return dbus_HAL_string_exists_query("power_management.type");
--}
--
--/* Read the can-suspend property of HAL. */
--gboolean dbus_HAL_CanSuspend(void)
--{
-- return dbus_HAL_boolean_query("power_management.can_suspend");
--}
--
--/* Read the can-hibernate property of HAL. */
--gboolean dbus_HAL_CanHibernate(void)
--{
-- return dbus_HAL_boolean_query("power_management.can_hibernate");
--}
--
--/* Invoke the Shutdown method on HAL. */
--char * dbus_HAL_Shutdown(void)
--{
-- return dbus_HAL_command("Shutdown");
--}
--
--/* Invoke the Reboot method on HAL. */
--char * dbus_HAL_Reboot(void)
--{
-- return dbus_HAL_command("Reboot");
--}
--
--/* Invoke the Suspend method on HAL. */
--char * dbus_HAL_Suspend(void)
--{
-- return dbus_HAL_command("Suspend");
--}
--
--/* Invoke the Hibernate method on HAL. */
--char * dbus_HAL_Hibernate(void)
--{
-- return dbus_HAL_command("Hibernate");
--}
--
--/*** LXDE mechanism ***/
--
--/* Formulate a message to the LXDE Session Manager interface. */
--static DBusMessage * dbus_LXDE_formulate_message(const char * const query)
--{
-- return dbus_message_new_method_call(
-- "org.lxde.SessionManager",
-- "/org/lxde/SessionManager",
-- "org.lxde.SessionManager",
-- query);
--}
--
--/* Send a specified message to the LXDE interface and process a boolean result. */
--static gboolean dbus_LXDE_query(const char * const query)
--{
-- return dbus_read_result_boolean(dbus_send_message_session(dbus_LXDE_formulate_message(query), NULL));
--}
--
--/* Send a specified message to the LXDE interface and process a void result. */
--static char * dbus_LXDE_command(const char * const command)
--{
-- char * error = NULL;
-- dbus_read_result_void(dbus_send_message_session(dbus_LXDE_formulate_message(command), &error));
-- return error;
--}
--
--/* Invoke the Logout method on LXDE. */
--char * dbus_LXDE_Logout(void)
--{
-- return dbus_LXDE_command("Logout");
--}
--
--/*** Lightdm mechanism ***/
--
--/* Formulate a message to the Lightdm interface. */
--static DBusMessage * dbus_Lightdm_formulate_message(const char * const query)
--{
-- return dbus_message_new_method_call(
-- "org.freedesktop.DisplayManager",
-- g_getenv ("XDG_SEAT_PATH"),
-- "org.freedesktop.DisplayManager.Seat",
-- query);
--}
--
--/* Send a specified message to the Lightdm interface and process a boolean result. */
--static gboolean dbus_Lightdm_query(const char * const query)
--{
-- return dbus_read_result_boolean(dbus_send_message_session(dbus_Lightdm_formulate_message(query), NULL));
--}
--
--/* Send a specified message to the Lightdm interface and process a void result. */
--static char * dbus_Lightdm_command(const char * const command)
--{
-- char * error = NULL;
-- dbus_read_result_void(dbus_send_message_session(dbus_Lightdm_formulate_message(command), &error));
-- return error;
--}
--
--/* Invoke the Logout method on LXDE. */
--char * dbus_Lightdm_SwitchToGreeter(void)
--{
-- return dbus_Lightdm_command("SwitchToGreeter");
--}
-diff -Naur lxsession-0.4.9.2/lxsession-logout.orig/dbus-interface.h lxsession-0.4.9.2/lxsession-logout/dbus-interface.h
---- lxsession-0.4.9.2/lxsession-logout.orig/dbus-interface.h 2013-03-10 12:48:25.000000000 +0100
-+++ lxsession-0.4.9.2/lxsession-logout/dbus-interface.h 1970-01-01 01:00:00.000000000 +0100
-@@ -1,61 +0,0 @@
--/**
-- * Copyright (c) 2010 LxDE Developers, see the file AUTHORS for details.
-- *
-- * 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 _DBUS_INTERFACE_H
--#define _DBUS_INTERFACE_H
--
--#include <glib.h>
--
--/* Interface to logind for shutdown, reboot, suspend and hibernate. */
--extern gboolean dbus_logind_CanPowerOff(void);
--extern gboolean dbus_logind_CanReboot(void);
--extern gboolean dbus_logind_CanSuspend(void);
--extern gboolean dbus_logind_CanHibernate(void);
--extern char * dbus_logind_PowerOff(void);
--extern char * dbus_logind_Reboot(void);
--extern char * dbus_logind_Suspend(void);
--extern char * dbus_logind_Hibernate(void);
--
--/* Interface to ConsoleKit for shutdown and reboot. */
--extern gboolean dbus_ConsoleKit_CanStop(void);
--extern gboolean dbus_ConsoleKit_CanRestart(void);
--extern char * dbus_ConsoleKit_Stop(void);
--extern char * dbus_ConsoleKit_Restart(void);
--
--/* Interface to UPower for suspend and hibernate. */
--extern gboolean dbus_UPower_CanSuspend(void);
--extern gboolean dbus_UPower_CanHibernate(void);
--extern char * dbus_UPower_Suspend(void);
--extern char * dbus_UPower_Hibernate(void);
--
--/* Interface to HAL for shutdown, reboot, suspend, and hibernate.
-- * HAL is being replaced by the above two mechanisms; this support is legacy. */
--extern gboolean dbus_HAL_CanShutdown(void);
--extern gboolean dbus_HAL_CanReboot(void);
--extern gboolean dbus_HAL_CanSuspend(void);
--extern gboolean dbus_HAL_CanHibernate(void);
--extern char * dbus_HAL_Shutdown(void);
--extern char * dbus_HAL_Reboot(void);
--extern char * dbus_HAL_Suspend(void);
--extern char * dbus_HAL_Hibernate(void);
--
--extern char * dbus_LXDE_Logout(void);
--
--extern char * dbus_Lightdm_SwitchToGreeter();
--
--#endif
-diff -Naur lxsession-0.4.9.2/lxsession-logout.orig/lxsession-logout.c lxsession-0.4.9.2/lxsession-logout/lxsession-logout.c
---- lxsession-0.4.9.2/lxsession-logout.orig/lxsession-logout.c 2013-05-31 21:38:58.000000000 +0200
-+++ lxsession-0.4.9.2/lxsession-logout/lxsession-logout.c 2014-01-03 15:42:59.596454865 +0100
-@@ -36,7 +36,7 @@
- #include <X11/Xatom.h>
- #include <X11/Xlib.h>
-
--#include "dbus-interface.h"
-+#include "lxsession-logout-dbus-interface.h"
-
- /* Command parameters. */
- static char * prompt = NULL;
-@@ -61,18 +61,14 @@
- int hibernate_available : 1; /* Hibernate is available */
- int switch_user_available : 1; /* Switch User is available */
-
-- int shutdown_logind : 1; /* Shutdown is available via logind */
-- int reboot_logind : 1; /* Reboot is available via logind */
-- int suspend_logind : 1; /* Suspend is available via logind */
-- int hibernate_logind : 1; /* Hibernate is available via logind */
-+ int shutdown_systemd : 1; /* Shutdown is available via systemd */
-+ int reboot_systemd : 1; /* Reboot is available via systemd */
-+ int suspend_systemd : 1; /* Suspend is available via systemd */
-+ int hibernate_systemd : 1; /* Hibernate is available via systemd */
- int shutdown_ConsoleKit : 1; /* Shutdown is available via ConsoleKit */
- int reboot_ConsoleKit : 1; /* Reboot is available via ConsoleKit */
- int suspend_UPower : 1; /* Suspend is available via UPower */
- int hibernate_UPower : 1; /* Hibernate is available via UPower */
-- int shutdown_HAL : 1; /* Shutdown is available via HAL */
-- int reboot_HAL : 1; /* Reboot is available via HAL */
-- int suspend_HAL : 1; /* Suspend is available via HAL */
-- int hibernate_HAL : 1; /* Hibernate is available via HAL */
- int switch_user_GDM : 1; /* Switch User is available via GDM */
- int switch_user_LIGHTDM : 1; /* Switch User is available via GDM */
- int switch_user_KDM : 1; /* Switch User is available via LIGHTDM */
-@@ -212,7 +208,7 @@
- /* Handler for "clicked" signal on Shutdown button. */
- static void shutdown_clicked(GtkButton * button, HandlerContext * handler_context)
- {
-- char * error_result = NULL;
-+ GError *err = NULL;
- gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL);
-
- if (handler_context->ltsp)
-@@ -224,21 +220,25 @@
- }
- }
- else if (handler_context->shutdown_ConsoleKit)
-- error_result = dbus_ConsoleKit_Stop();
-- else if (handler_context->shutdown_logind)
-- error_result = dbus_logind_PowerOff();
-- else if (handler_context->shutdown_HAL)
-- error_result = dbus_HAL_Shutdown();
--
-- if (error_result != NULL)
-- gtk_label_set_text(GTK_LABEL(handler_context->error_label), error_result);
-- else gtk_main_quit();
-+ dbus_ConsoleKit_Stop(&err);
-+ else if (handler_context->shutdown_systemd)
-+ dbus_systemd_PowerOff(&err);
-+
-+ if (err)
-+ {
-+ gtk_label_set_text(GTK_LABEL(handler_context->error_label), err->message);
-+ g_error_free (err);
-+ }
-+ else
-+ {
-+ gtk_main_quit();
-+ }
- }
-
- /* Handler for "clicked" signal on Reboot button. */
- static void reboot_clicked(GtkButton * button, HandlerContext * handler_context)
- {
-- char * error_result = NULL;
-+ GError *err = NULL;
- gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL);
-
- if (handler_context->ltsp)
-@@ -250,58 +250,71 @@
- }
- }
- else if (handler_context->reboot_ConsoleKit)
-- error_result = dbus_ConsoleKit_Restart();
-- else if (handler_context->reboot_logind)
-- error_result = dbus_logind_Reboot();
-- else if (handler_context->reboot_HAL)
-- error_result = dbus_HAL_Reboot();
--
-- if (error_result != NULL)
-- gtk_label_set_text(GTK_LABEL(handler_context->error_label), error_result);
-- else gtk_main_quit();
-+ dbus_ConsoleKit_Restart(&err);
-+ else if (handler_context->reboot_systemd)
-+ dbus_systemd_Reboot(&err);
-+
-+ if (err)
-+ {
-+ gtk_label_set_text(GTK_LABEL(handler_context->error_label), err->message);
-+ g_error_free (err);
-+ }
-+ else
-+ {
-+ gtk_main_quit();
-+ }
- }
-
- /* Handler for "clicked" signal on Suspend button. */
- static void suspend_clicked(GtkButton * button, HandlerContext * handler_context)
- {
-- char * error_result = NULL;
-+ GError *err = NULL;
- gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL);
-
- lock_screen();
- if (handler_context->suspend_UPower)
-- error_result = dbus_UPower_Suspend();
-- else if (handler_context->suspend_logind)
-- error_result = dbus_logind_Suspend();
-- else if (handler_context->suspend_HAL)
-- error_result = dbus_HAL_Suspend();
--
-- if (error_result != NULL)
-- gtk_label_set_text(GTK_LABEL(handler_context->error_label), error_result);
-- else gtk_main_quit();
-+ dbus_UPower_Suspend(&err);
-+ else if (handler_context->suspend_systemd)
-+ dbus_systemd_Suspend(&err);
-+
-+ if (err)
-+ {
-+ gtk_label_set_text(GTK_LABEL(handler_context->error_label), err->message);
-+ g_error_free (err);
-+ }
-+ else
-+ {
-+ gtk_main_quit();
-+ }
- }
-
- /* Handler for "clicked" signal on Hibernate button. */
- static void hibernate_clicked(GtkButton * button, HandlerContext * handler_context)
- {
-- char * error_result = NULL;
-+ GError *err = NULL;
- gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL);
-
- lock_screen();
- if (handler_context->hibernate_UPower)
-- error_result = dbus_UPower_Hibernate();
-- else if (handler_context->hibernate_logind)
-- error_result = dbus_logind_Hibernate();
-- else if (handler_context->hibernate_HAL)
-- error_result = dbus_HAL_Hibernate();
--
-- if (error_result != NULL)
-- gtk_label_set_text(GTK_LABEL(handler_context->error_label), error_result);
-- else gtk_main_quit();
-+ dbus_UPower_Hibernate(&err);
-+ else if (handler_context->hibernate_systemd)
-+ dbus_systemd_Hibernate(&err);
-+
-+ if (err)
-+ {
-+ gtk_label_set_text(GTK_LABEL(handler_context->error_label), err->message);
-+ g_error_free (err);
-+ }
-+ else
-+ {
-+ gtk_main_quit();
-+ }
- }
-
- /* Handler for "clicked" signal on Switch User button. */
- static void switch_user_clicked(GtkButton * button, HandlerContext * handler_context)
- {
-+ GError *err = NULL;
- gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL);
-
- lock_screen();
-@@ -310,11 +323,19 @@
- else if (handler_context->switch_user_KDM)
- g_spawn_command_line_sync("kdmctl reserve", NULL, NULL, NULL, NULL);
- else if (handler_context->switch_user_LIGHTDM)
-- dbus_Lightdm_SwitchToGreeter();
-+ dbus_Lightdm_SwitchToGreeter(&err);
- else if(handler_context->switch_user_LXDM)
- g_spawn_command_line_sync("lxdm-binary -c USER_SWITCH", NULL, NULL, NULL, NULL);
-
-- gtk_main_quit();
-+ if (err)
-+ {
-+ gtk_label_set_text(GTK_LABEL(handler_context->error_label), err->message);
-+ g_error_free (err);
-+ }
-+ else
-+ {
-+ gtk_main_quit();
-+ }
- }
-
- /* Handler for "clicked" signal on Lock button. */
-@@ -449,26 +470,26 @@
- const char * p = g_getenv("_LXSESSION_PID");
- if (p != NULL) handler_context.lxsession_pid = atoi(p);
-
-- /* Initialize capabilities of the logind mechanism. */
-- if (dbus_logind_CanPowerOff())
-+ /* Initialize capabilities of the systemd mechanism. */
-+ if (dbus_systemd_CanPowerOff())
- {
- handler_context.shutdown_available = TRUE;
-- handler_context.shutdown_logind = TRUE;
-+ handler_context.shutdown_systemd = TRUE;
- }
-- if (dbus_logind_CanReboot())
-+ if (dbus_systemd_CanReboot())
- {
- handler_context.reboot_available = TRUE;
-- handler_context.reboot_logind = TRUE;
-+ handler_context.reboot_systemd = TRUE;
- }
-- if (dbus_logind_CanSuspend())
-+ if (dbus_systemd_CanSuspend())
- {
- handler_context.suspend_available = TRUE;
-- handler_context.suspend_logind = TRUE;
-+ handler_context.suspend_systemd = TRUE;
- }
-- if (dbus_logind_CanHibernate())
-+ if (dbus_systemd_CanHibernate())
- {
- handler_context.hibernate_available = TRUE;
-- handler_context.hibernate_logind = TRUE;
-+ handler_context.hibernate_systemd = TRUE;
- }
-
- /* Initialize capabilities of the ConsoleKit mechanism. */
-@@ -495,28 +516,6 @@
- handler_context.hibernate_UPower = TRUE;
- }
-
-- /* Initialize capabilities of the HAL mechanism. */
-- if (!handler_context.shutdown_available && dbus_HAL_CanShutdown())
-- {
-- handler_context.shutdown_available = TRUE;
-- handler_context.shutdown_HAL = TRUE;
-- }
-- if (!handler_context.reboot_available && dbus_HAL_CanReboot())
-- {
-- handler_context.reboot_available = TRUE;
-- handler_context.reboot_HAL = TRUE;
-- }
-- if (!handler_context.suspend_available && dbus_HAL_CanSuspend())
-- {
-- handler_context.suspend_available = TRUE;
-- handler_context.suspend_HAL = TRUE;
-- }
-- if (!handler_context.hibernate_available && dbus_HAL_CanHibernate())
-- {
-- handler_context.hibernate_available = TRUE;
-- handler_context.hibernate_HAL = TRUE;
-- }
--
- /* If we are under GDM, its "Switch User" is available. */
- if (verify_running("gdm", "gdmflexiserver"))
- {
-@@ -664,20 +663,23 @@
- if (session_name == NULL)
- session_name = "LXDE";
-
-- const gchar *command_line = "lsb_release -r -s";
- gchar *output = NULL;
-- GError *error;
-
-- if (!g_spawn_command_line_sync( command_line,
-- &output,
-- NULL,
-- NULL,
-- &error))
-+ if (g_find_program_in_path("lsb_release"))
- {
-+ const gchar *command_line = "lsb_release -r -s";
-+ GError *error;
-+ if (!g_spawn_command_line_sync( command_line,
-+ &output,
-+ NULL,
-+ NULL,
-+ &error))
-+ {
-
-- fprintf (stderr, "Error: %s\n", error->message);
-- g_error_free (error);
-+ fprintf (stderr, "Error: %s\n", error->message);
-+ g_error_free (error);
-
-+ }
- }
-
- if (output == NULL)
-diff -Naur lxsession-0.4.9.2/lxsession-logout.orig/lxsession-logout-dbus-interface.c lxsession-0.4.9.2/lxsession-logout/lxsession-logout-dbus-interface.c
---- lxsession-0.4.9.2/lxsession-logout.orig/lxsession-logout-dbus-interface.c 1970-01-01 01:00:00.000000000 +0100
-+++ lxsession-0.4.9.2/lxsession-logout/lxsession-logout-dbus-interface.c 2014-01-03 15:42:59.596454865 +0100
-@@ -0,0 +1,368 @@
-+/* Taken from LightDM and modified.
-+ * Copyright (C) 2012 Fabrice THIROUX <fabrice.thiroux@free.fr>.
-+ *
-+ **** License from former file (power.c) ****
-+ *
-+ * Copyright (C) 2010-2011 Robert Ancell.
-+ * Author: Robert Ancell <robert.ancell@canonical.com>
-+ *
-+ * This library is free software; you can redistribute it and/or modify it under
-+ * the terms of the GNU Lesser General Public License as published by the Free
-+ * Software Foundation; either version 3 of the License, or (at your option) any
-+ * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
-+ * license.
-+ */
-+#include <config.h>
-+#include <glib.h>
-+#include <string.h>
-+#include <dbus/dbus.h>
-+#include <gio/gio.h>
-+
-+/*** Mechanism independent ***/
-+
-+static GDBusProxy *upower_proxy = NULL;
-+static GDBusProxy *ck_proxy = NULL;
-+static GDBusProxy *systemd_proxy = NULL;
-+static GDBusProxy *lightdm_proxy = NULL;
-+static GDBusProxy *lxde_proxy = NULL;
-+
-+
-+/*** UPower mechanism ***/
-+
-+static gboolean
-+upower_call_function (const gchar *function, gboolean default_result, GError **error)
-+{
-+ GVariant *result;
-+ gboolean function_result = FALSE;
-+
-+ if (!upower_proxy)
-+ {
-+ upower_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-+ G_DBUS_PROXY_FLAGS_NONE,
-+ NULL,
-+ "org.freedesktop.UPower",
-+ "/org/freedesktop/UPower",
-+ "org.freedesktop.UPower",
-+ NULL,
-+ error);
-+ if (!upower_proxy)
-+ return FALSE;
-+ }
-+
-+ result = g_dbus_proxy_call_sync (upower_proxy,
-+ function,
-+ NULL,
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ error);
-+ if (!result)
-+ return default_result;
-+
-+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
-+ g_variant_get (result, "(b)", &function_result);
-+
-+ g_variant_unref (result);
-+ return function_result;
-+}
-+
-+gboolean
-+dbus_UPower_CanSuspend (void)
-+{
-+ return upower_call_function ("SuspendAllowed", FALSE, NULL);
-+}
-+
-+gboolean
-+dbus_UPower_Suspend (GError **error)
-+{
-+ return upower_call_function ("Suspend", TRUE, error);
-+}
-+
-+gboolean
-+dbus_UPower_CanHibernate (void)
-+{
-+ return upower_call_function ("HibernateAllowed", FALSE, NULL);
-+}
-+
-+gboolean
-+dbus_UPower_Hibernate (GError **error)
-+{
-+ return upower_call_function ("Hibernate", TRUE, error);
-+}
-+
-+/*** ConsoleKit mechanism ***/
-+
-+static gboolean
-+ck_call_function (const gchar *function, gboolean default_result, GError **error)
-+{
-+ GVariant *result;
-+ gboolean function_result = FALSE;
-+
-+ if (!ck_proxy)
-+ {
-+ ck_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-+ G_DBUS_PROXY_FLAGS_NONE,
-+ NULL,
-+ "org.freedesktop.ConsoleKit",
-+ "/org/freedesktop/ConsoleKit/Manager",
-+ "org.freedesktop.ConsoleKit.Manager",
-+ NULL,
-+ error);
-+ if (!ck_proxy)
-+ return FALSE;
-+ }
-+
-+ result = g_dbus_proxy_call_sync (ck_proxy,
-+ function,
-+ NULL,
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ error);
-+ if (!result)
-+ return default_result;
-+
-+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
-+ g_variant_get (result, "(b)", &function_result);
-+
-+ g_variant_unref (result);
-+ return function_result;
-+}
-+
-+gboolean
-+dbus_ConsoleKit_CanRestart (void)
-+{
-+ return ck_call_function ("CanRestart", FALSE, NULL);
-+}
-+
-+gboolean
-+dbus_ConsoleKit_Restart (GError **error)
-+{
-+ return ck_call_function ("Restart", TRUE, error);
-+}
-+
-+gboolean
-+dbus_ConsoleKit_CanStop (void)
-+{
-+ return ck_call_function ("CanStop", FALSE, NULL);
-+}
-+
-+gboolean
-+dbus_ConsoleKit_Stop (GError **error)
-+{
-+ return ck_call_function ("Stop", TRUE, error);
-+}
-+
-+/*** Systemd mechanism ***/
-+
-+static gboolean
-+systemd_query (const gchar *function, gboolean default_result, GError **error)
-+{
-+ GVariant *result;
-+ gboolean function_result = FALSE;
-+ const gchar *str;
-+
-+ if (!systemd_proxy)
-+ {
-+ systemd_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-+ G_DBUS_PROXY_FLAGS_NONE,
-+ NULL,
-+ "org.freedesktop.login1",
-+ "/org/freedesktop/login1",
-+ "org.freedesktop.login1.Manager",
-+ NULL,
-+ error);
-+ if (!systemd_proxy)
-+ return FALSE;
-+ }
-+
-+ result = g_dbus_proxy_call_sync (systemd_proxy,
-+ function,
-+ NULL,
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ error);
-+ if (!result)
-+ return default_result;
-+
-+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(s)")))
-+ {
-+ g_variant_get (result, "(s)", &str);
-+ if (g_strcmp0 (str, "yes") || g_strcmp0 (str, "challenge"))
-+ function_result = TRUE;
-+ else
-+ function_result = default_result;
-+ }
-+
-+ g_variant_unref (result);
-+ return function_result;
-+}
-+
-+static void
-+systemd_call_function (const gchar *function, gboolean value, GError **error)
-+{
-+ GVariant *result;
-+
-+ if (!systemd_proxy)
-+ {
-+ systemd_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-+ G_DBUS_PROXY_FLAGS_NONE,
-+ NULL,
-+ "org.freedesktop.login1",
-+ "/org/freedesktop/login1",
-+ "org.freedesktop.login1.Manager",
-+ NULL,
-+ error);
-+ if (!systemd_proxy)
-+ return;
-+ }
-+
-+ result = g_dbus_proxy_call_sync (systemd_proxy,
-+ function,
-+ g_variant_new ("(b)", value),
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ error);
-+ g_variant_unref (result);
-+ return;
-+}
-+
-+gboolean
-+dbus_systemd_CanPowerOff (void)
-+{
-+ return systemd_query ("CanPowerOff", FALSE, NULL);
-+}
-+
-+void
-+dbus_systemd_PowerOff (GError **error)
-+{
-+ systemd_call_function ("PowerOff", TRUE, error);
-+}
-+
-+gboolean
-+dbus_systemd_CanReboot (void)
-+{
-+ return systemd_query ("CanReboot", FALSE, NULL);
-+}
-+
-+void
-+dbus_systemd_Reboot (GError **error)
-+{
-+ systemd_call_function ("Reboot", TRUE, error);
-+}
-+
-+gboolean
-+dbus_systemd_CanSuspend (void)
-+{
-+ return systemd_query ("CanSuspend", FALSE, NULL);
-+}
-+
-+void
-+dbus_systemd_Suspend (GError **error)
-+{
-+ systemd_call_function ("Suspend", TRUE, error);
-+}
-+
-+gboolean
-+dbus_systemd_CanHibernate (void)
-+{
-+ return systemd_query ("CanHibernate", FALSE, NULL);
-+}
-+
-+void
-+dbus_systemd_Hibernate (GError **error)
-+{
-+ systemd_call_function ("Hibernate", TRUE, error);
-+}
-+
-+/*** Lightdm mechanism ***/
-+
-+static gboolean
-+lightdm_call_function (const gchar *function, gboolean default_result, GError **error)
-+{
-+ GVariant *result;
-+ gboolean function_result = FALSE;
-+
-+ if (!lightdm_proxy)
-+ {
-+ lightdm_proxy = g_dbus_proxy_new_for_bus_sync ( G_BUS_TYPE_SYSTEM,
-+ G_DBUS_PROXY_FLAGS_NONE,
-+ NULL,
-+ "org.freedesktop.DisplayManager",
-+ g_getenv ("XDG_SEAT_PATH"),
-+ "org.freedesktop.DisplayManager.Seat",
-+ NULL,
-+ error);
-+ if (!lightdm_proxy)
-+ return FALSE;
-+ }
-+
-+ result = g_dbus_proxy_call_sync (lightdm_proxy,
-+ function,
-+ NULL,
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ error);
-+ if (!result)
-+ return default_result;
-+
-+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
-+ g_variant_get (result, "(b)", &function_result);
-+
-+ g_variant_unref (result);
-+ return function_result;
-+}
-+
-+gboolean
-+dbus_Lightdm_SwitchToGreeter (GError **error)
-+{
-+ return lightdm_call_function ("SwitchToGreeter", TRUE, error);
-+}
-+
-+/*** LXDE mechanism ***/
-+
-+static gboolean
-+lxde_call_function (const gchar *function, gboolean default_result, GError **error)
-+{
-+ GVariant *result;
-+ gboolean function_result = FALSE;
-+
-+ if (!lxde_proxy)
-+ {
-+ lxde_proxy = g_dbus_proxy_new_for_bus_sync ( G_BUS_TYPE_SYSTEM,
-+ G_DBUS_PROXY_FLAGS_NONE,
-+ NULL,
-+ "org.lxde.SessionManager",
-+ "/org/lxde/SessionManager",
-+ "org.lxde.SessionManager",
-+ NULL,
-+ error);
-+ if (!lxde_proxy)
-+ return FALSE;
-+ }
-+
-+ result = g_dbus_proxy_call_sync (lxde_proxy,
-+ function,
-+ NULL,
-+ G_DBUS_CALL_FLAGS_NONE,
-+ -1,
-+ NULL,
-+ error);
-+ if (!result)
-+ return default_result;
-+
-+ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
-+ g_variant_get (result, "(b)", &function_result);
-+
-+ g_variant_unref (result);
-+ return function_result;
-+}
-+
-+gboolean
-+dbus_LXDE_Logout (GError **error)
-+{
-+ return lxde_call_function ("Restart", TRUE, error);
-+}
-diff -Naur lxsession-0.4.9.2/lxsession-logout.orig/lxsession-logout-dbus-interface.h lxsession-0.4.9.2/lxsession-logout/lxsession-logout-dbus-interface.h
---- lxsession-0.4.9.2/lxsession-logout.orig/lxsession-logout-dbus-interface.h 1970-01-01 01:00:00.000000000 +0100
-+++ lxsession-0.4.9.2/lxsession-logout/lxsession-logout-dbus-interface.h 2014-01-03 15:42:59.596454865 +0100
-@@ -0,0 +1,52 @@
-+/**
-+ * Copyright (c) 2010 LxDE Developers, see the file AUTHORS for details.
-+ *
-+ * 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 _DBUS_INTERFACE_H
-+#define _DBUS_INTERFACE_H
-+
-+#include <glib.h>
-+
-+/* Interface to ConsoleKit for shutdown and reboot. */
-+extern gboolean dbus_ConsoleKit_CanStop(void);
-+extern gboolean dbus_ConsoleKit_CanRestart(void);
-+extern gboolean dbus_ConsoleKit_Stop(GError **);
-+extern gboolean dbus_ConsoleKit_Restart(GError **);
-+
-+/* Interface to UPower for suspend and hibernate. */
-+extern gboolean dbus_UPower_CanSuspend(void);
-+extern gboolean dbus_UPower_CanHibernate(void);
-+extern gboolean dbus_UPower_Suspend(GError **);
-+extern gboolean dbus_UPower_Hibernate(GError **);
-+
-+/* Interface to systemd for suspend, hibernate, shutdown and reboot. */
-+extern gboolean dbus_systemd_CanPowerOff(void);
-+extern gboolean dbus_systemd_CanReboot(void);
-+extern gboolean dbus_systemd_CanSuspend(void);
-+extern gboolean dbus_systemd_CanHibernate(void);
-+extern void dbus_systemd_PowerOff(GError **);
-+extern void dbus_systemd_Reboot(GError **);
-+extern void dbus_systemd_Suspend(GError **);
-+extern void dbus_systemd_Hibernate(GError **);
-+
-+/* Interface to lightdm for switch user. */
-+extern gboolean dbus_Lightdm_SwitchToGreeter (GError **error);
-+
-+/* Interface to lxde for logout. */
-+extern gboolean dbus_LXDE_Logout (GError **error);
-+
-+#endif
-diff -Naur lxsession-0.4.9.2/lxsession-logout.orig/Makefile.am lxsession-0.4.9.2/lxsession-logout/Makefile.am
---- lxsession-0.4.9.2/lxsession-logout.orig/Makefile.am 2012-10-25 20:20:04.000000000 +0200
-+++ lxsession-0.4.9.2/lxsession-logout/Makefile.am 2014-01-03 15:42:59.596454865 +0100
-@@ -8,6 +8,6 @@
- lxsession_logout_LDADD = $(GTK_LIBS) $(SM_LIBS) $(DBUS_LIBS) $(X11_LIBS)
-
- lxsession_logout_SOURCES= \
-- dbus-interface.c \
-- dbus-interface.h \
-+ lxsession-logout-dbus-interface.c \
-+ lxsession-logout-dbus-interface.h \
- lxsession-logout.c
diff --git a/recipes-lxde/lxsession/lxsession/gtk3.patch b/recipes-lxde/lxsession/lxsession/gtk3.patch
new file mode 100644
index 0000000..282d596
--- /dev/null
+++ b/recipes-lxde/lxsession/lxsession/gtk3.patch
@@ -0,0 +1,524 @@
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+
+
+Patch taken from:
+https://git.archlinux.org/svntogit/community.git/tree/trunk/gtk3.patch?h=packages/lxsession
+
+
+From d01e3742e92b25c268084243584004851cc9be0e Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor@gmail.com>
+Date: Thu, 18 Dec 2014 21:32:39 +0100
+Subject: [PATCH] Beautify GtkBuilder UI file of lxpolkit without modification
+
+This makes it easier to track changes in the future.
+---
+ data/ui/lxpolkit.ui | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 182 insertions(+), 1 deletion(-)
+
+diff --git a/data/ui/lxpolkit.ui b/data/ui/lxpolkit.ui
+index e0940a2..2859db0 100644
+--- a/data/ui/lxpolkit.ui
++++ b/data/ui/lxpolkit.ui
+@@ -1 +1,182 @@
+-<?xml version="1.0"?><interface><requires lib="gtk+" version="2.16"/><object class="GtkDialog" id="dlg"><property name="border_width">5</property><property name="title" translatable="yes">Authentication</property><property name="resizable">False</property><property name="window_position">center</property><property name="type_hint">normal</property><property name="has_separator">False</property><child internal-child="vbox"><object class="GtkVBox" id="dialog-vbox1"><property name="visible">True</property><property name="orientation">vertical</property><property name="spacing">2</property><child><object class="GtkVBox" id="vbox1"><property name="visible">True</property><property name="border_width">12</property><property name="orientation">vertical</property><property name="spacing">6</property><child><object class="GtkHBox" id="hbox1"><property name="visible">True</property><child><object class="GtkImage" id="icon"><property name="visible">True</property><property name="stock">gtk-missing-image</property></object><packing><property name="expand">False</property><property name="position">0</property></packing></child><child><object class="GtkLabel" id="msg"><property name="visible">True</property><property name="xalign">0</property><property name="yalign">0</property><property name="wrap">True</property></object><packing><property name="position">1</property></packing></child></object><packing><property name="expand">False</property><property name="position">0</property></packing></child><child><object class="GtkHBox" id="id_hbox"><property name="visible">True</property><property name="spacing">6</property><child><object class="GtkLabel" id="label1"><property name="visible">True</property><property name="label" translatable="yes">Identity:</property></object><packing><property name="expand">False</property><property name="position">0</property></packing></child><child><object class="GtkComboBox" id="id"><property name="visible">True</property><child><object class="GtkCellRendererText" id="rendertext"/><attributes><attribute name="text">0</attribute></attributes></child></object><packing><property name="position">1</property></packing></child></object><packing><property name="expand">False</property><property name="position">1</property></packing></child><child><object class="GtkHBox" id="hbox2"><property name="visible">True</property><child><object class="GtkLabel" id="request_label"><property name="visible">True</property></object><packing><property name="expand">False</property><property name="position">0</property></packing></child><child><object class="GtkEntry" id="request"><property name="visible">True</property><property name="can_focus">True</property><property name="has_focus">True</property><property name="visibility">False</property><property name="invisible_char">&#x2022;</property><property name="activates_default">True</property></object><packing><property name="position">1</property></packing></child></object><packing><property name="expand">False</property><property name="position">2</property></packing></child><child><object class="GtkLabel" id="detail"><property name="visible">True</property><property name="xalign">0</property><property name="yalign">0</property></object><packing><property name="expand">False</property><property name="position">3</property></packing></child></object><packing><property name="expand">False</property><property name="position">1</property></packing></child><child internal-child="action_area"><object class="GtkHButtonBox" id="dialog-action_area1"><property name="visible">True</property><property name="layout_style">end</property><child><object class="GtkButton" id="cancel"><property name="label">gtk-cancel</property><property name="visible">True</property><property name="can_focus">True</property><property name="receives_default">True</property><property name="use_stock">True</property></object><packing><property name="expand">False</property><property name="fill">False</property><property name="position">0</property></packing></child><child><object class="GtkButton" id="ok"><property name="label">gtk-ok</property><property name="visible">True</property><property name="can_focus">True</property><property name="can_default">True</property><property name="has_default">True</property><property name="receives_default">True</property><property name="use_stock">True</property></object><packing><property name="expand">False</property><property name="fill">False</property><property name="position">1</property></packing></child></object><packing><property name="expand">False</property><property name="pack_type">end</property><property name="position">0</property></packing></child></object></child><action-widgets><action-widget response="-6">cancel</action-widget><action-widget response="-5">ok</action-widget></action-widgets></object></interface>
++<?xml version="1.0"?>
++<interface>
++ <requires lib="gtk+" version="2.16" />
++ <object class="GtkDialog" id="dlg">
++ <property name="border_width">5</property>
++ <property name="title" translatable="yes">Authentication</property>
++ <property name="resizable">False</property>
++ <property name="window_position">center</property>
++ <property name="type_hint">normal</property>
++ <property name="has_separator">False</property>
++ <child internal-child="vbox">
++ <object class="GtkVBox" id="dialog-vbox1">
++ <property name="visible">True</property>
++ <property name="orientation">vertical</property>
++ <property name="spacing">2</property>
++ <child>
++ <object class="GtkVBox" id="vbox1">
++ <property name="visible">True</property>
++ <property name="border_width">12</property>
++ <property name="orientation">vertical</property>
++ <property name="spacing">6</property>
++ <child>
++ <object class="GtkHBox" id="hbox1">
++ <property name="visible">True</property>
++ <child>
++ <object class="GtkImage" id="icon">
++ <property name="visible">True</property>
++ <property name="stock">gtk-missing-image</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkLabel" id="msg">
++ <property name="visible">True</property>
++ <property name="xalign">0</property>
++ <property name="yalign">0</property>
++ <property name="wrap">True</property>
++ </object>
++ <packing>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkHBox" id="id_hbox">
++ <property name="visible">True</property>
++ <property name="spacing">6</property>
++ <child>
++ <object class="GtkLabel" id="label1">
++ <property name="visible">True</property>
++ <property name="label" translatable="yes">Identity:</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkComboBox" id="id">
++ <property name="visible">True</property>
++ <child>
++ <object class="GtkCellRendererText" id="rendertext" />
++ <attributes>
++ <attribute name="text">0</attribute>
++ </attributes>
++ </child>
++ </object>
++ <packing>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkHBox" id="hbox2">
++ <property name="visible">True</property>
++ <child>
++ <object class="GtkLabel" id="request_label">
++ <property name="visible">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkEntry" id="request">
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="has_focus">True</property>
++ <property name="visibility">False</property>
++ <property name="invisible_char">•</property>
++ <property name="activates_default">True</property>
++ </object>
++ <packing>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">2</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkLabel" id="detail">
++ <property name="visible">True</property>
++ <property name="xalign">0</property>
++ <property name="yalign">0</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">3</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ <child internal-child="action_area">
++ <object class="GtkHButtonBox" id="dialog-action_area1">
++ <property name="visible">True</property>
++ <property name="layout_style">end</property>
++ <child>
++ <object class="GtkButton" id="cancel">
++ <property name="label">gtk-cancel</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_stock">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ <child>
++ <object class="GtkButton" id="ok">
++ <property name="label">gtk-ok</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="can_default">True</property>
++ <property name="has_default">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_stock">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="pack_type">end</property>
++ <property name="position">0</property>
++ </packing>
++ </child>
++ </object>
++ </child>
++ <action-widgets>
++ <action-widget response="-6">cancel</action-widget>
++ <action-widget response="-5">ok</action-widget>
++ </action-widgets>
++ </object>
++</interface>
+--
+2.1.4
+
+From f28fd2e9309bcc5053430ebfc01a9e130c66b816 Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor@gmail.com>
+Date: Thu, 18 Dec 2014 21:33:50 +0100
+Subject: [PATCH] Some fixes for GTK+ 3
+
+This makes lxpolkit and lxsession-edit compatible with GTK+ 3.
+---
+ data/ui/lxpolkit.ui | 1 -
+ data/ui/lxsession-edit.ui | 1 -
+ 2 files changed, 2 deletions(-)
+
+diff --git a/data/ui/lxpolkit.ui b/data/ui/lxpolkit.ui
+index 2859db0..c5b157c 100644
+--- a/data/ui/lxpolkit.ui
++++ b/data/ui/lxpolkit.ui
+@@ -7,7 +7,6 @@
+ <property name="resizable">False</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">normal</property>
+- <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+diff --git a/data/ui/lxsession-edit.ui b/data/ui/lxsession-edit.ui
+index 4d382aa..90cdada 100644
+--- a/data/ui/lxsession-edit.ui
++++ b/data/ui/lxsession-edit.ui
+@@ -10,7 +10,6 @@
+ <property name="default_width">512</property>
+ <property name="default_height">420</property>
+ <property name="type_hint">dialog</property>
+- <property name="has_separator">True</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox">
+ <property name="visible">True</property>
+--
+2.1.4
+
+From 21fa7f186771b7aa586a8cb05d0622dbee6a7c91 Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor@gmail.com>
+Date: Thu, 23 Jul 2015 10:31:26 +0200
+Subject: [PATCH] Fix background on GTK+ 3
+
+expose_event is not available in GTK+ 3, use draw signal to modify background. Also set a background for the center_area.
+---
+ lxsession-logout/lxsession-logout.c | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/lxsession-logout/lxsession-logout.c b/lxsession-logout/lxsession-logout.c
+index 3ad757f..cc7c7e3 100644
+--- a/lxsession-logout/lxsession-logout.c
++++ b/lxsession-logout/lxsession-logout.c
+@@ -94,7 +94,11 @@ static void switch_user_clicked(GtkButton * button, HandlerContext * handler_con
+ static void cancel_clicked(GtkButton * button, gpointer user_data);
+ static GtkPositionType get_banner_position(void);
+ static GdkPixbuf * get_background_pixbuf(void);
++#ifdef USE_GTK3
++gboolean draw(GtkWidget * widget, cairo_t * cr, GdkPixbuf * pixbuf);
++#else
+ gboolean expose_event(GtkWidget * widget, GdkEventExpose * event, GdkPixbuf * pixbuf);
++#endif
+
+ /* Try to run lxlock command in order to lock the screen, return TRUE on
+ * success, FALSE if command execution failed
+@@ -419,13 +423,18 @@ static GdkPixbuf * get_background_pixbuf(void)
+ }
+
+ /* Handler for "expose_event" on background. */
++#ifdef USE_GTK3
++gboolean draw(GtkWidget * widget, cairo_t * cr, GdkPixbuf * pixbuf)
++#else
+ gboolean expose_event(GtkWidget * widget, GdkEventExpose * event, GdkPixbuf * pixbuf)
++#endif
+ {
+ if (pixbuf != NULL)
+ {
+ /* Copy the appropriate rectangle of the root window pixmap to the drawing area.
+ * All drawing areas are immediate children of the toplevel window, so the allocation yields the source coordinates directly. */
+-#if GTK_CHECK_VERSION(2,14,0)
++#ifdef USE_GTK3
++#elif GTK_CHECK_VERSION(2,14,0)
+ cairo_t * cr = gdk_cairo_create (gtk_widget_get_window(widget));
+ #else
+ cairo_t * cr = gdk_cairo_create (widget->window);
+@@ -437,7 +446,9 @@ gboolean expose_event(GtkWidget * widget, GdkEventExpose * event, GdkPixbuf * pi
+ 0);
+
+ cairo_paint (cr);
++#ifndef USE_GTK3
+ cairo_destroy(cr);
++#endif
+ }
+ return FALSE;
+ }
+@@ -600,7 +611,11 @@ int main(int argc, char * argv[])
+ GdkScreen* screen = gtk_widget_get_screen(window);
+ gtk_window_set_default_size(GTK_WINDOW(window), gdk_screen_get_width(screen), gdk_screen_get_height(screen));
+ gtk_widget_set_app_paintable(window, TRUE);
++#ifdef USE_GTK3
++ g_signal_connect(G_OBJECT(window), "draw", G_CALLBACK(draw), pixbuf);
++#else
+ g_signal_connect(G_OBJECT(window), "expose_event", G_CALLBACK(expose_event), pixbuf);
++#endif
+ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+
+ /* Toplevel container */
+@@ -610,6 +625,12 @@ int main(int argc, char * argv[])
+ GtkWidget* center_area = gtk_event_box_new();
+ gtk_container_add(GTK_CONTAINER(alignment), center_area);
+
++#ifdef USE_GTK3
++ GtkStyle* style = gtk_widget_get_style (window);
++ GdkColor color = style->bg[GTK_STATE_NORMAL];
++ gtk_widget_modify_bg(center_area, GTK_STATE_NORMAL, &color);
++#endif
++
+ GtkWidget* center_vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_set_border_width(GTK_CONTAINER(center_vbox), 12);
+ gtk_container_add(GTK_CONTAINER(center_area), center_vbox);
+--
+2.1.4
+
+From 0951a91a74f924f5537737a59cfa79505de3521d Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor@gmail.com>
+Date: Fri, 31 Jul 2015 20:54:53 +0200
+Subject: [PATCH] Add support for recent GDM versions.
+
+Recently its pid file is located at /var/run/gdm/gdm.pid
+---
+ lxsession-logout/lxsession-logout.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/lxsession-logout/lxsession-logout.c b/lxsession-logout/lxsession-logout.c
+index cc7c7e3..8141b19 100644
+--- a/lxsession-logout/lxsession-logout.c
++++ b/lxsession-logout/lxsession-logout.c
+@@ -144,6 +144,9 @@ static gboolean verify_running(const char * display_manager, const char * execut
+ char buffer[PATH_MAX];
+ sprintf(buffer, "/var/run/%s.pid", display_manager);
+
++ if (!g_file_test (buffer, G_FILE_TEST_IS_REGULAR))
++ sprintf(buffer, "/var/run/%s/%s.pid", display_manager, display_manager);
++
+ /* Open the pid file. */
+ int fd = open(buffer, O_RDONLY);
+ if (fd >= 0)
+--
+2.1.4
+
+From 44f11c8ef2d84e7e031d996086686bee9b9e15c2 Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor@gmail.com>
+Date: Sun, 2 Aug 2015 00:56:22 +0200
+Subject: [PATCH] Add OnlyShowIn LXDE to desktop entries
+
+And MATE to NotShowIn in lxpolkit desktop entry,
+---
+ data/lxpolkit.desktop.in.in | 2 +-
+ data/lxsession-default-apps.desktop.in | 2 +-
+ data/lxsession-edit.desktop.in | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/data/lxpolkit.desktop.in.in b/data/lxpolkit.desktop.in.in
+index b86b1df..f717f0f 100644
+--- a/data/lxpolkit.desktop.in.in
++++ b/data/lxpolkit.desktop.in.in
+@@ -5,5 +5,5 @@ _Comment=Policykit Authentication Agent
+ Exec=lxpolkit
+ TryExec=lxpolkit
+ Icon=gtk-dialog-authentication
+-NotShowIn=GNOME;KDE;
++NotShowIn=GNOME;KDE;MATE;
+ Hidden=true
+diff --git a/data/lxsession-default-apps.desktop.in b/data/lxsession-default-apps.desktop.in
+index d383f29..df3f453 100644
+--- a/data/lxsession-default-apps.desktop.in
++++ b/data/lxsession-default-apps.desktop.in
+@@ -5,4 +5,4 @@ Exec=lxsession-default-apps
+ _Name=Default applications for LXSession
+ _Comment=Change the default applications on LXDE
+ Categories=GTK;Settings;DesktopSettings;X-LXDE-Settings;
+-NotShowIn=GNOME;KDE;XFCE;
++OnlyShowIn=LXDE;
+diff --git a/data/lxsession-edit.desktop.in b/data/lxsession-edit.desktop.in
+index 240d3a3..f826044 100644
+--- a/data/lxsession-edit.desktop.in
++++ b/data/lxsession-edit.desktop.in
+@@ -5,4 +5,4 @@ Exec=lxsession-edit
+ _Name=Desktop Session Settings
+ _Comment=Manage applications loaded in desktop session
+ Categories=GTK;Settings;DesktopSettings;X-LXDE-Settings;
+-NotShowIn=GNOME;KDE;XFCE;
++OnlyShowIn=LXDE;
+--
+2.1.4
+
+From 743d933df2146105b0fd8c5651612065432dffba Mon Sep 17 00:00:00 2001
+From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballogyor@gmail.com>
+Date: Sun, 2 Aug 2015 02:35:03 +0200
+Subject: [PATCH] Use standard icons
+
+---
+ data/lxsession-default-apps.desktop.in | 2 +-
+ data/lxsession-edit.desktop.in | 2 +-
+ lxsession-default-apps/combobox.vala | 8 ++++----
+ lxsession-default-apps/main.vala | 10 +++++++++-
+ lxsession-edit/lxsession-edit.c | 2 +-
+ 5 files changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/data/lxsession-default-apps.desktop.in b/data/lxsession-default-apps.desktop.in
+index df3f453..9fb9643 100644
+--- a/data/lxsession-default-apps.desktop.in
++++ b/data/lxsession-default-apps.desktop.in
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Type=Application
+-Icon=xfwm4
++Icon=preferences-desktop
+ Exec=lxsession-default-apps
+ _Name=Default applications for LXSession
+ _Comment=Change the default applications on LXDE
+diff --git a/data/lxsession-edit.desktop.in b/data/lxsession-edit.desktop.in
+index f826044..ddf87a5 100644
+--- a/data/lxsession-edit.desktop.in
++++ b/data/lxsession-edit.desktop.in
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Type=Application
+-Icon=xfwm4
++Icon=preferences-desktop
+ Exec=lxsession-edit
+ _Name=Desktop Session Settings
+ _Comment=Manage applications loaded in desktop session
+diff --git a/lxsession-default-apps/combobox.vala b/lxsession-default-apps/combobox.vala
+index fa4f631..cd07954 100644
+--- a/lxsession-default-apps/combobox.vala
++++ b/lxsession-default-apps/combobox.vala
+@@ -83,7 +83,7 @@ namespace LDefaultApps
+ help_window.set_skip_taskbar_hint(true);
+ try
+ {
+- help_window.icon = IconTheme.get_default ().load_icon ("xfwm4", 48, 0);
++ help_window.icon = IconTheme.get_default ().load_icon ("preferences-desktop", 48, 0);
+ }
+ catch (Error e)
+ {
+@@ -113,7 +113,7 @@ namespace LDefaultApps
+ window.set_default_size (300, 500);
+ try
+ {
+- window.icon = IconTheme.get_default ().load_icon ("xfwm4", 48, 0);
++ window.icon = IconTheme.get_default ().load_icon ("preferences-desktop", 48, 0);
+ }
+ catch (Error e)
+ {
+@@ -422,7 +422,7 @@ namespace LDefaultApps
+
+ /* First row, empty for not selected and for unselect */
+ list_store.append (out iter);
+- list_store.set (iter, 0, "gtk-close" , 1, _("Disable"), 2, 0, 3,"");
++ list_store.set (iter, 0, "window-close" , 1, _("Disable"), 2, 0, 3,"");
+
+ for (int a = 0 ; a < combobox_list.length ; a++)
+ {
+@@ -542,7 +542,7 @@ namespace LDefaultApps
+ window_mime.set_skip_taskbar_hint(true);
+ try
+ {
+- window_mime.icon = IconTheme.get_default ().load_icon ("xfwm4", 48, 0);
++ window_mime.icon = IconTheme.get_default ().load_icon ("preferences-desktop", 48, 0);
+ }
+ catch (Error e)
+ {
+diff --git a/lxsession-default-apps/main.vala b/lxsession-default-apps/main.vala
+index 859e219..3b27b18 100644
+--- a/lxsession-default-apps/main.vala
++++ b/lxsession-default-apps/main.vala
+@@ -32,7 +32,7 @@ namespace LDefaultApps
+ this.window_position = Gtk.WindowPosition.CENTER;
+ try
+ {
+- this.icon = IconTheme.get_default ().load_icon ("xfwm4", 48, 0);
++ this.icon = IconTheme.get_default ().load_icon ("preferences-desktop", 48, 0);
+ }
+ catch (Error e)
+ {
+@@ -97,6 +97,14 @@ namespace LDefaultApps
+ {
+ this.title = _("LXSession configuration");
+ this.window_position = Gtk.WindowPosition.CENTER;
++ try
++ {
++ this.icon = IconTheme.get_default ().load_icon ("preferences-desktop", 48, 0);
++ }
++ catch (Error e)
++ {
++ message ("Could not load application icon: %s\n", e.message);
++ }
+ this.set_default_size (600, 400);
+ this.destroy.connect (Gtk.main_quit);
+
+diff --git a/lxsession-edit/lxsession-edit.c b/lxsession-edit/lxsession-edit.c
+index 88fe9d1..af63edb 100644
+--- a/lxsession-edit/lxsession-edit.c
++++ b/lxsession-edit/lxsession-edit.c
+@@ -75,7 +75,7 @@ int main(int argc, char** argv)
+ gtk_dialog_set_alternative_button_order((GtkDialog*)dlg, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1);
+
+ /* Set icon name for main (dlg) window so it displays in the panel. */
+- gtk_window_set_icon_name(GTK_WINDOW(dlg), "xfwm4");
++ gtk_window_set_icon_name(GTK_WINDOW(dlg), "preferences-desktop");
+
+ /* autostart list */
+ init_list_view((GtkTreeView*)autostarts);
+--
+2.1.4
+
diff --git a/recipes-lxde/lxsession/lxsession_0.5.2.bb b/recipes-lxde/lxsession/lxsession_0.5.2.bb
index f554dca..298f607 100644
--- a/recipes-lxde/lxsession/lxsession_0.5.2.bb
+++ b/recipes-lxde/lxsession/lxsession_0.5.2.bb
@@ -7,13 +7,22 @@ PR = "r3"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=a76102f7f48780284bee49e6edaeb5a9"
-DEPENDS = "dbus dbus-glib gtk+ glib-2.0 intltool-native libgee libunique virtual/libx11 lxde-common polkit xproto"
+DEPENDS = "dbus dbus-glib glib-2.0 intltool-native libgee libunique virtual/libx11 lxde-common polkit xproto"
RDEPENDS_{PN} = "upower dbus-x11"
-SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/lxsession-${PV}.tar.xz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/lxsession-${PV}.tar.xz"
+SRC_URI += "file://gtk3.patch"
SRC_URI[md5sum] = "2957acccbf9ce37ef8205ec5424f8047"
SRC_URI[sha256sum] = "2d55e9ea80057fe5ffd68a91a15bb004ad7bf019e50807a8bb9b342115efaada"
+PACKAGECONFIG ?= "gtk3"
+PACKAGECONFIG[gtk3] = "--enable-gtk3,,gtk+3"
+python __anonymous () {
+ depends = d.getVar("DEPENDS", d, 1)
+ if 'gtk3' not in d.getVar('PACKAGECONFIG', True):
+ d.setVar("DEPENDS", "%s gtk+" % depends)
+}
+
inherit autotools pkgconfig gettext
FILES_${PN} += "${datadir}/lxsession"