[gnome-session/gnome-3-8] consolekit: fix SessionIsActive
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session/gnome-3-8] consolekit: fix SessionIsActive
- Date: Tue, 30 Jul 2013 19:14:56 +0000 (UTC)
commit 70d496740870488995d3c6527506623374669520
Author: Antoine Jacoutot <ajacoutot gnome org>
Date: Fri May 24 07:57:35 2013 +0200
consolekit: fix SessionIsActive
IsActive is handled by the Session interface and not the Manager one.
This fixes querying for the IsActive property.
gnome-session/gsm-consolekit.c | 59 +++++++++++++++++++++++++++++++++------
1 files changed, 50 insertions(+), 9 deletions(-)
---
diff --git a/gnome-session/gsm-consolekit.c b/gnome-session/gsm-consolekit.c
index 99a34a6..c4b7e4c 100644
--- a/gnome-session/gsm-consolekit.c
+++ b/gnome-session/gsm-consolekit.c
@@ -39,7 +39,6 @@
#define CK_NAME "org.freedesktop.ConsoleKit"
#define CK_PATH "/org/freedesktop/ConsoleKit"
-#define CK_INTERFACE "org.freedesktop.ConsoleKit"
#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager"
#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
@@ -56,10 +55,13 @@ struct _GsmConsolekitPrivate
DBusGConnection *dbus_connection;
DBusGProxy *bus_proxy;
DBusGProxy *ck_proxy;
+ DBusGProxy *session_proxy;
UpClient *up_client;
gboolean is_active;
gboolean restarting;
+
+ gchar *session_id;
};
enum {
@@ -172,7 +174,7 @@ is_active_cb (DBusGProxy *proxy,
if (!dbus_g_proxy_end_call (proxy, call, &local_error,
G_TYPE_BOOLEAN, &is_active,
G_TYPE_INVALID)) {
- g_warning ("Failed isActive call to ConsoleKit: %s",
+ g_warning ("Failed IsActive call to ConsoleKit: %s",
local_error->message);
g_clear_error (&local_error);
return;
@@ -201,8 +203,12 @@ gsm_consolekit_ensure_ck_connection (GsmConsolekit *manager,
{
GError *connection_error;
gboolean is_connected;
+ gboolean ret;
+ guint32 pid;
connection_error = NULL;
+ manager->priv->session_id = NULL;
+ is_connected = FALSE;
if (manager->priv->dbus_connection == NULL) {
DBusConnection *connection;
@@ -253,9 +259,9 @@ gsm_consolekit_ensure_ck_connection (GsmConsolekit *manager,
if (manager->priv->ck_proxy == NULL) {
manager->priv->ck_proxy =
dbus_g_proxy_new_for_name_owner (manager->priv->dbus_connection,
- "org.freedesktop.ConsoleKit",
- "/org/freedesktop/ConsoleKit/Manager",
- "org.freedesktop.ConsoleKit.Manager",
+ CK_NAME,
+ CK_MANAGER_PATH,
+ CK_MANAGER_INTERFACE,
&connection_error);
if (manager->priv->ck_proxy == NULL) {
@@ -263,14 +269,40 @@ gsm_consolekit_ensure_ck_connection (GsmConsolekit *manager,
is_connected = FALSE;
goto out;
}
-
- dbus_g_proxy_begin_call (manager->priv->ck_proxy,
+ }
+
+ pid = getpid ();
+ ret = dbus_g_proxy_call (manager->priv->ck_proxy, "GetSessionForUnixProcess", &connection_error,
+ G_TYPE_UINT, pid,
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_OBJECT_PATH, &manager->priv->session_id,
+ G_TYPE_INVALID);
+ if (!ret) {
+ g_propagate_error (error, connection_error);
+ goto out;
+ }
+
+ if (manager->priv->session_proxy == NULL) {
+ manager->priv->session_proxy =
+ dbus_g_proxy_new_for_name_owner (manager->priv->dbus_connection,
+ CK_NAME,
+ manager->priv->session_id,
+ CK_SESSION_INTERFACE,
+ &connection_error);
+
+ if (manager->priv->session_proxy == NULL) {
+ g_propagate_error (error, connection_error);
+ is_connected = FALSE;
+ goto out;
+ }
+
+ dbus_g_proxy_begin_call (manager->priv->session_proxy,
"IsActive",
is_active_cb, g_object_ref (manager),
(GDestroyNotify)g_object_unref,
G_TYPE_INVALID);
- dbus_g_proxy_add_signal (manager->priv->ck_proxy, "ActiveChanged", G_TYPE_BOOLEAN,
G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (manager->priv->ck_proxy, "ActiveChanged",
+ dbus_g_proxy_add_signal (manager->priv->session_proxy, "ActiveChanged", G_TYPE_BOOLEAN,
G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (manager->priv->session_proxy, "ActiveChanged",
G_CALLBACK (on_active_changed), manager, NULL);
}
@@ -291,11 +323,17 @@ gsm_consolekit_ensure_ck_connection (GsmConsolekit *manager,
g_object_unref (manager->priv->ck_proxy);
manager->priv->ck_proxy = NULL;
}
+
+ g_clear_object (&manager->priv->session_proxy);
+ g_clear_object (&manager->priv->session_id);
} else if (manager->priv->bus_proxy == NULL) {
if (manager->priv->ck_proxy != NULL) {
g_object_unref (manager->priv->ck_proxy);
manager->priv->ck_proxy = NULL;
}
+
+ g_clear_object (&manager->priv->session_proxy);
+ g_clear_object (&manager->priv->session_id);
}
}
@@ -314,6 +352,7 @@ gsm_consolekit_on_name_owner_changed (DBusGProxy *bus_proxy,
}
g_clear_object (&manager->priv->ck_proxy);
+ g_clear_object (&manager->priv->session_proxy);
gsm_consolekit_ensure_ck_connection (manager, NULL);
@@ -340,6 +379,8 @@ gsm_consolekit_free_dbus (GsmConsolekit *manager)
{
g_clear_object (&manager->priv->bus_proxy);
g_clear_object (&manager->priv->ck_proxy);
+ g_clear_object (&manager->priv->session_proxy);
+ g_clear_object (&manager->priv->session_id);
g_clear_object (&manager->priv->up_client);
if (manager->priv->dbus_connection != NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]