Fix the session IsActive check in the Consolekit case by properly

creating a proxy to the session bus.
This commit is contained in:
ajacoutot 2013-05-23 14:32:59 +00:00
parent 325a6542d2
commit 5ee64d03d0
2 changed files with 155 additions and 1 deletions

View File

@ -1,9 +1,10 @@
# $OpenBSD: Makefile,v 1.227 2013/05/15 12:58:34 ajacoutot Exp $
# $OpenBSD: Makefile,v 1.228 2013/05/23 14:32:59 ajacoutot Exp $
COMMENT= GNOME session
GNOME_PROJECT= gnome-session
GNOME_VERSION= 3.8.2.1
REVISION= 0
CATEGORIES= x11

View File

@ -0,0 +1,153 @@
$OpenBSD: patch-gnome-session_gsm-consolekit_c,v 1.10 2013/05/23 14:32:59 ajacoutot Exp $
https://bugzilla.gnome.org/show_bug.cgi?id=700727
--- gnome-session/gsm-consolekit.c.orig Thu Mar 14 02:41:03 2013
+++ gnome-session/gsm-consolekit.c Thu May 23 16:13:48 2013
@@ -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 *m
{
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 *m
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 *m
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,27 @@ gsm_consolekit_ensure_ck_connection (GsmConsolekit *m
g_object_unref (manager->priv->ck_proxy);
manager->priv->ck_proxy = NULL;
}
+
+ if (manager->priv->session_proxy != NULL) {
+ g_clear_object (&manager->priv->session_proxy);
+ }
+
+ if (manager->priv->session_id != NULL) {
+ 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;
}
+
+ if (manager->priv->session_proxy != NULL) {
+ g_clear_object (&manager->priv->session_proxy);
+ }
+
+ if (manager->priv->session_id != NULL) {
+ g_clear_object (&manager->priv->session_id);
+ }
}
}
@@ -314,6 +362,7 @@ gsm_consolekit_on_name_owner_changed (DBusGProxy *b
}
g_clear_object (&manager->priv->ck_proxy);
+ g_clear_object (&manager->priv->session_proxy);
gsm_consolekit_ensure_ck_connection (manager, NULL);
@@ -340,6 +389,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) {