From b178c76ae4341fe4f715c8c8e516ae8a6a9ebb98 Mon Sep 17 00:00:00 2001 From: Max Krummenacher Date: Sun, 19 Jun 2016 13:01:49 +0200 Subject: lxsession: add gtk3 packageconfig and enable it While at it remove patches which no longer applied. Signed-off-by: Max Krummenacher Acked-by: Marcel Ziswiler --- ...ogout-fix-dbus-string-value-check-for-sys.patch | 31 - .../lxsession-0.4.9.2/lxsession-configure-ac.patch | 11 - ...-62bfec81f6c50083423b8501a94be80125396966.patch | 1455 -------------------- recipes-lxde/lxsession/lxsession/gtk3.patch | 524 +++++++ recipes-lxde/lxsession/lxsession_0.5.2.bb | 13 +- 5 files changed, 535 insertions(+), 1499 deletions(-) delete mode 100644 recipes-lxde/lxsession/lxsession-0.4.9.2/0001-lxsession-logout-fix-dbus-string-value-check-for-sys.patch delete mode 100644 recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-configure-ac.patch delete mode 100644 recipes-lxde/lxsession/lxsession-0.4.9.2/lxsession-logout-git-62bfec81f6c50083423b8501a94be80125396966.patch create mode 100644 recipes-lxde/lxsession/lxsession/gtk3.patch 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 -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 --#include --#include --#include --#include -- --/*** 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 -- --/* 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 - #include - --#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 . -+ * -+ **** License from former file (power.c) **** -+ * -+ * Copyright (C) 2010-2011 Robert Ancell. -+ * Author: Robert Ancell -+ * -+ * 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 -+#include -+#include -+#include -+#include -+ -+/*** 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 -+ -+/* 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 + + +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?= +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 @@ +-5AuthenticationFalsecenternormalFalseTruevertical2True12vertical6TrueTruegtk-missing-imageFalse0True00True1False0True6TrueIdentity:False0True01False1TrueTrueFalse0TrueTrueTrueFalseTrue1False2True00False3False1Trueendgtk-cancelTrueTrueTrueTrueFalseFalse0gtk-okTrueTrueTrueTrueTrueTrueFalseFalse1Falseend0cancelok ++ ++ ++ ++ ++ 5 ++ Authentication ++ False ++ center ++ normal ++ False ++ ++ ++ True ++ vertical ++ 2 ++ ++ ++ True ++ 12 ++ vertical ++ 6 ++ ++ ++ True ++ ++ ++ True ++ gtk-missing-image ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ 0 ++ 0 ++ True ++ ++ ++ 1 ++ ++ ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ 6 ++ ++ ++ True ++ Identity: ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ ++ ++ ++ 0 ++ ++ ++ ++ ++ 1 ++ ++ ++ ++ ++ False ++ 1 ++ ++ ++ ++ ++ True ++ ++ ++ True ++ ++ ++ False ++ 0 ++ ++ ++ ++ ++ True ++ True ++ True ++ False ++ • ++ True ++ ++ ++ 1 ++ ++ ++ ++ ++ False ++ 2 ++ ++ ++ ++ ++ True ++ 0 ++ 0 ++ ++ ++ False ++ 3 ++ ++ ++ ++ ++ False ++ 1 ++ ++ ++ ++ ++ True ++ end ++ ++ ++ gtk-cancel ++ True ++ True ++ True ++ True ++ ++ ++ False ++ False ++ 0 ++ ++ ++ ++ ++ gtk-ok ++ True ++ True ++ True ++ True ++ True ++ True ++ ++ ++ False ++ False ++ 1 ++ ++ ++ ++ ++ False ++ end ++ 0 ++ ++ ++ ++ ++ ++ cancel ++ ok ++ ++ ++ +-- +2.1.4 + +From f28fd2e9309bcc5053430ebfc01a9e130c66b816 Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= +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 @@ + False + center + normal +- False + + + True +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 @@ + 512 + 420 + dialog +- True + + + True +-- +2.1.4 + +From 21fa7f186771b7aa586a8cb05d0622dbee6a7c91 Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Ball=C3=B3=20Gy=C3=B6rgy?= +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?= +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?= +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?= +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" -- cgit v1.2.3