This is an automated email from the git hooks/post-receive script. eric pushed a commit to branch master in repository xfce/xfce4-session.
commit f610aae1872ae7cb91f65d0151e26b57f61f48b1 Author: Eric Koegel <[email protected]> Date: Mon Apr 25 16:54:52 2016 +0300 Port consolekit to GDBus --- xfce4-session/Makefile.am | 2 + xfce4-session/xfsm-consolekit.c | 290 ++++++++++++++++++---------------------- 2 files changed, 135 insertions(+), 157 deletions(-) diff --git a/xfce4-session/Makefile.am b/xfce4-session/Makefile.am index 73a29c7..cc529bd 100644 --- a/xfce4-session/Makefile.am +++ b/xfce4-session/Makefile.am @@ -75,6 +75,7 @@ xfce4_session_CFLAGS = \ $(LIBSM_CFLAGS) \ $(LIBX11_CFLAGS) \ $(LIBXFCE4UI_CFLAGS) \ + $(GIO_CFLAGS) \ $(DBUS_CFLAGS) \ $(DBUS_GLIB_CFLAGS) \ $(LIBWNCK_CFLAGS) \ @@ -96,6 +97,7 @@ xfce4_session_LDADD = \ $(LIBX11_LIBS) \ $(LIBXFCE4UI_LIBS) \ $(GMODULE_LIBS) \ + $(GIO_LIBS) \ $(DBUS_LIBS) \ $(DBUS_GLIB_LIBS) \ $(LIBWNCK_LIBS) \ diff --git a/xfce4-session/xfsm-consolekit.c b/xfce4-session/xfsm-consolekit.c index 8d99398..3e90ed8 100644 --- a/xfce4-session/xfsm-consolekit.c +++ b/xfce4-session/xfsm-consolekit.c @@ -20,12 +20,11 @@ */ -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> +#include <gio/gio.h> #include <xfce4-session/xfsm-consolekit.h> #include <libxfsm/xfsm-util.h> - +#include "xfsm-global.h" #define CK_NAME "org.freedesktop.ConsoleKit" #define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager" @@ -34,8 +33,6 @@ static void xfsm_consolekit_finalize (GObject *object); -static gboolean xfsm_consolekit_proxy_ensure (XfsmConsolekit *consolekit, - GError **error); static void xfsm_consolekit_proxy_free (XfsmConsolekit *consolekit); @@ -49,9 +46,8 @@ struct _XfsmConsolekit { GObject __parent__; - DBusGConnection *dbus_conn; - DBusGProxy *ck_proxy; - DBusGProxy *dbus_proxy; + GDBusProxy *proxy; + guint name_id; }; @@ -72,135 +68,76 @@ xfsm_consolekit_class_init (XfsmConsolekitClass *klass) static void -xfsm_consolekit_init (XfsmConsolekit *consolekit) +name_acquired (GDBusConnection *connection, + const gchar *name, + const gchar *name_owner, + gpointer user_data) { + XfsmConsolekit *consolekit = user_data; + + xfsm_verbose ("%s started up, owned by %s\n", name, name_owner); + + if (consolekit->proxy != NULL) + { + xfsm_verbose ("already have a connection to consolekit\n"); + return; + } + + consolekit->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + CK_NAME, + CK_MANAGER_PATH, + CK_MANAGER_NAME, + NULL, + NULL); } static void -xfsm_consolekit_finalize (GObject *object) +name_lost (GDBusConnection *connection, + const gchar *name, + gpointer user_data) { - xfsm_consolekit_proxy_free (XFSM_CONSOLEKIT (object)); - - (*G_OBJECT_CLASS (xfsm_consolekit_parent_class)->finalize) (object); -} + XfsmConsolekit *consolekit = user_data; + xfsm_verbose ("ck lost\n"); - -static DBusHandlerResult -xfsm_consolekit_dbus_filter (DBusConnection *connection, - DBusMessage *message, - gpointer data) -{ - g_return_val_if_fail (XFSM_IS_CONSOLEKIT (data), DBUS_HANDLER_RESULT_NOT_YET_HANDLED); - - if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected") - && g_strcmp0 (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0) - { - g_debug ("Consolekit disconnected"); - xfsm_consolekit_proxy_free (XFSM_CONSOLEKIT (data)); - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + xfsm_consolekit_proxy_free (consolekit); } static void -xfsm_consolekit_name_owner_changed (DBusGProxy *dbus_proxy, - const gchar *name, - const gchar *prev_owner, - const gchar *new_owner, - XfsmConsolekit *consolekit) +xfsm_consolekit_init (XfsmConsolekit *consolekit) { - GError *err = NULL; - - g_return_if_fail (XFSM_IS_CONSOLEKIT (consolekit)); - g_return_if_fail (consolekit->dbus_proxy == dbus_proxy); - - if (g_strcmp0 (name, CK_NAME) == 0) - { - g_debug ("Consolekit owner changed"); - - /* only reconnect the consolekit proxy */ - if (consolekit->ck_proxy != NULL) - { - g_object_unref (G_OBJECT (consolekit->ck_proxy)); - consolekit->ck_proxy = NULL; - } - - if (!xfsm_consolekit_proxy_ensure (consolekit, &err)) - { - g_warning ("Failed to reconnect to consolekit: %s", err->message); - g_error_free (err); - } - } + consolekit->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + CK_NAME, + CK_MANAGER_PATH, + CK_MANAGER_NAME, + NULL, + NULL); + + consolekit->name_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM, + CK_NAME, + G_BUS_NAME_WATCHER_FLAGS_AUTO_START, + name_acquired, + name_lost, + consolekit, + NULL); } -static gboolean -xfsm_consolekit_proxy_ensure (XfsmConsolekit *consolekit, - GError **error) +static void +xfsm_consolekit_finalize (GObject *object) { - GError *err = NULL; - DBusConnection *connection; - - if (consolekit->dbus_conn == NULL) - { - consolekit->dbus_conn = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err); - if (consolekit->dbus_conn == NULL) - goto error1; - - connection = dbus_g_connection_get_connection (consolekit->dbus_conn); - dbus_connection_set_exit_on_disconnect (connection, FALSE); - dbus_connection_add_filter (connection, xfsm_consolekit_dbus_filter, consolekit, NULL); - } - - if (consolekit->dbus_proxy == NULL) - { - consolekit->dbus_proxy = dbus_g_proxy_new_for_name_owner (consolekit->dbus_conn, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS, - &err); - if (consolekit->dbus_proxy == NULL) - goto error1; - - /* (dis)connect to consolekit if stopped/started */ - dbus_g_proxy_add_signal (consolekit->dbus_proxy, - "NameOwnerChanged", - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_INVALID); - - dbus_g_proxy_connect_signal (consolekit->dbus_proxy, - "NameOwnerChanged", - G_CALLBACK (xfsm_consolekit_name_owner_changed), - consolekit, NULL); - } - - if (consolekit->ck_proxy == NULL) - { - consolekit->ck_proxy = dbus_g_proxy_new_for_name_owner (consolekit->dbus_conn, - CK_NAME, - CK_MANAGER_PATH, - CK_MANAGER_NAME, - &err); - if (consolekit->ck_proxy == NULL) - goto error1; - } - - return TRUE; - - error1: - - g_propagate_error (error, err); - xfsm_consolekit_proxy_free (consolekit); + xfsm_consolekit_proxy_free (XFSM_CONSOLEKIT (object)); - return FALSE; + (*G_OBJECT_CLASS (xfsm_consolekit_parent_class)->finalize) (object); } @@ -208,29 +145,10 @@ xfsm_consolekit_proxy_ensure (XfsmConsolekit *consolekit, static void xfsm_consolekit_proxy_free (XfsmConsolekit *consolekit) { - DBusConnection *connection; - - if (consolekit->ck_proxy != NULL) + if (consolekit->proxy != NULL) { - g_object_unref (G_OBJECT (consolekit->ck_proxy)); - consolekit->ck_proxy = NULL; - } - - if (consolekit->dbus_proxy != NULL) - { - g_object_unref (G_OBJECT (consolekit->dbus_proxy)); - consolekit->dbus_proxy = NULL; - } - - if (consolekit->dbus_conn != NULL) - { - connection = dbus_g_connection_get_connection (consolekit->dbus_conn); - dbus_connection_remove_filter (connection, - xfsm_consolekit_dbus_filter, - consolekit); - - dbus_g_connection_unref (consolekit->dbus_conn); - consolekit->dbus_conn = NULL; + g_object_unref (G_OBJECT (consolekit->proxy)); + consolekit->proxy = NULL; } } @@ -242,18 +160,34 @@ xfsm_consolekit_can_method (XfsmConsolekit *consolekit, gboolean *can_method, GError **error) { + GVariant *variant = NULL; + g_return_val_if_fail (can_method != NULL, FALSE); /* never return true if something fails */ *can_method = FALSE; - if (!xfsm_consolekit_proxy_ensure (consolekit, error)) + if (!consolekit->proxy) + { + xfsm_verbose ("no ck proxy\n"); return FALSE; + } + + variant = g_dbus_proxy_call_sync (consolekit->proxy, + method, + g_variant_new ("()"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + error); - return dbus_g_proxy_call (consolekit->ck_proxy, method, - error, G_TYPE_INVALID, - G_TYPE_BOOLEAN, can_method, - G_TYPE_INVALID); + if (variant == NULL) + return FALSE; + + g_variant_get_child (variant, 0, "b", can_method); + + g_variant_unref (variant); + return TRUE; } @@ -265,24 +199,34 @@ xfsm_consolekit_can_sleep (XfsmConsolekit *consolekit, gboolean *auth_method, GError **error) { - gboolean ret; gchar *can_string; + GVariant *variant = NULL; + g_return_val_if_fail (can_method != NULL, FALSE); /* never return true if something fails */ *can_method = FALSE; + *auth_method = FALSE; - if (!xfsm_consolekit_proxy_ensure (consolekit, error)) + if (!consolekit->proxy) + { + xfsm_verbose ("no ck proxy\n"); return FALSE; + } - ret = dbus_g_proxy_call (consolekit->ck_proxy, method, - error, G_TYPE_INVALID, - G_TYPE_STRING, &can_string, - G_TYPE_INVALID); + variant = g_dbus_proxy_call_sync (consolekit->proxy, + method, + g_variant_new ("()"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + error); - if (ret == FALSE) + if (variant == NULL) return FALSE; + g_variant_get_child (variant, 0, "s", &can_string); + /* If yes or challenge then we can sleep, it just might take a password */ if (g_strcmp0 (can_string, "yes") == 0 || g_strcmp0 (can_string, "challenge") == 0) { @@ -295,6 +239,7 @@ xfsm_consolekit_can_sleep (XfsmConsolekit *consolekit, *auth_method = FALSE; } + g_variant_unref (variant); return TRUE; } @@ -305,11 +250,27 @@ xfsm_consolekit_try_method (XfsmConsolekit *consolekit, const gchar *method, GError **error) { - if (!xfsm_consolekit_proxy_ensure (consolekit, error)) + GVariant *variant = NULL; + + if (!consolekit->proxy) + { + xfsm_verbose ("no ck proxy\n"); + return FALSE; + } + + variant = g_dbus_proxy_call_sync (consolekit->proxy, + method, + g_variant_new ("()"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + error); + + if (variant == NULL) return FALSE; - return dbus_g_proxy_call (consolekit->ck_proxy, method, error, - G_TYPE_INVALID, G_TYPE_INVALID); + g_variant_unref (variant); + return TRUE; } @@ -319,12 +280,27 @@ xfsm_consolekit_try_sleep (XfsmConsolekit *consolekit, const gchar *method, GError **error) { - if (!xfsm_consolekit_proxy_ensure (consolekit, error)) + GVariant *variant = NULL; + + if (!consolekit->proxy) + { + xfsm_verbose ("no ck proxy\n"); return FALSE; + } - return dbus_g_proxy_call (consolekit->ck_proxy, method, error, - G_TYPE_BOOLEAN, TRUE, - G_TYPE_INVALID, G_TYPE_INVALID); + variant = g_dbus_proxy_call_sync (consolekit->proxy, + method, + g_variant_new_boolean (TRUE), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + error); + + if (variant == NULL) + return FALSE; + + g_variant_unref (variant); + return TRUE; } -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
