Fix the session IsActive check in the Consolekit case by properly
creating a proxy to the session bus.
This commit is contained in:
parent
325a6542d2
commit
5ee64d03d0
@ -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
|
||||
|
||||
|
153
x11/gnome/session/patches/patch-gnome-session_gsm-consolekit_c
Normal file
153
x11/gnome/session/patches/patch-gnome-session_gsm-consolekit_c
Normal 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) {
|
Loading…
x
Reference in New Issue
Block a user