Accepting request 81637 from home:vuntz:branches:GNOME:Factory
Fixes to work well with new gdm OBS-URL: https://build.opensuse.org/request/show/81637 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-session?expand=0&rev=122
This commit is contained in:
parent
50cfcd83f6
commit
a2085a5345
127
gnome-session-dbus-disconnected.patch
Normal file
127
gnome-session-dbus-disconnected.patch
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
diff --git a/gnome-session/gsm-consolekit.c b/gnome-session/gsm-consolekit.c
|
||||||
|
index f53993f..66bebd1 100644
|
||||||
|
--- a/gnome-session/gsm-consolekit.c
|
||||||
|
+++ b/gnome-session/gsm-consolekit.c
|
||||||
|
@@ -152,7 +152,8 @@ gsm_consolekit_dbus_filter (DBusConnection *connection,
|
||||||
|
DBUS_INTERFACE_LOCAL, "Disconnected") &&
|
||||||
|
strcmp (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0) {
|
||||||
|
gsm_consolekit_free_dbus (manager);
|
||||||
|
- return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
|
+ /* let other filters get this disconnected signal, so that they
|
||||||
|
+ * can handle it too */
|
||||||
|
}
|
||||||
|
|
||||||
|
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||||||
|
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
|
||||||
|
index b531197..2d74d40 100644
|
||||||
|
--- a/gnome-session/gsm-manager.c
|
||||||
|
+++ b/gnome-session/gsm-manager.c
|
||||||
|
@@ -151,6 +151,7 @@ struct GsmManagerPrivate
|
||||||
|
|
||||||
|
DBusGProxy *bus_proxy;
|
||||||
|
DBusGConnection *connection;
|
||||||
|
+ gboolean dbus_disconnected : 1;
|
||||||
|
|
||||||
|
/* Interface with other parts of the system */
|
||||||
|
UpClient *up_client;
|
||||||
|
@@ -1814,6 +1815,11 @@ _disconnect_client (GsmManager *manager,
|
||||||
|
"phase");
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (manager->priv->dbus_disconnected && GSM_IS_DBUS_CLIENT (client)) {
|
||||||
|
+ g_debug ("GsmManager: dbus disconnected, not restarting application");
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (app == NULL) {
|
||||||
|
g_debug ("GsmManager: unable to find application for client - not restarting");
|
||||||
|
goto out;
|
||||||
|
@@ -1872,6 +1878,12 @@ _disconnect_dbus_client (const char *id,
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* If no service name, then we simply disconnect all clients */
|
||||||
|
+ if (!data->service_name) {
|
||||||
|
+ _disconnect_client (data->manager, client);
|
||||||
|
+ return TRUE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
name = gsm_dbus_client_get_bus_name (GSM_DBUS_CLIENT (client));
|
||||||
|
if (IS_STRING_EMPTY (name)) {
|
||||||
|
return FALSE;
|
||||||
|
@@ -1885,6 +1897,15 @@ _disconnect_dbus_client (const char *id,
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * remove_clients_for_connection:
|
||||||
|
+ * @manager: a #GsmManager
|
||||||
|
+ * @service_name: a service name
|
||||||
|
+ *
|
||||||
|
+ * Disconnects clients that own @service_name.
|
||||||
|
+ *
|
||||||
|
+ * If @service_name is NULL, then disconnects all clients for the connection.
|
||||||
|
+ */
|
||||||
|
static void
|
||||||
|
remove_clients_for_connection (GsmManager *manager,
|
||||||
|
const char *service_name)
|
||||||
|
@@ -1968,10 +1989,32 @@ bus_name_owner_changed (DBusGProxy *bus_proxy,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static DBusHandlerResult
|
||||||
|
+gsm_manager_bus_filter (DBusConnection *connection,
|
||||||
|
+ DBusMessage *message,
|
||||||
|
+ void *user_data)
|
||||||
|
+{
|
||||||
|
+ GsmManager *manager;
|
||||||
|
+
|
||||||
|
+ manager = GSM_MANAGER (user_data);
|
||||||
|
+
|
||||||
|
+ if (dbus_message_is_signal (message,
|
||||||
|
+ DBUS_INTERFACE_LOCAL, "Disconnected") &&
|
||||||
|
+ strcmp (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0) {
|
||||||
|
+ g_debug ("GsmManager: dbus disconnected; disconnecting dbus clients...");
|
||||||
|
+ manager->priv->dbus_disconnected = TRUE;
|
||||||
|
+ remove_clients_for_connection (manager, NULL);
|
||||||
|
+ /* let other filters get this disconnected signal, so that they
|
||||||
|
+ * can handle it too */
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
||||||
|
+}
|
||||||
|
static gboolean
|
||||||
|
register_manager (GsmManager *manager)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
+ DBusConnection *connection;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
manager->priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
|
||||||
|
@@ -1983,6 +2026,12 @@ register_manager (GsmManager *manager)
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ connection = dbus_g_connection_get_connection (manager->priv->connection);
|
||||||
|
+ dbus_connection_add_filter (connection,
|
||||||
|
+ gsm_manager_bus_filter,
|
||||||
|
+ manager, NULL);
|
||||||
|
+ manager->priv->dbus_disconnected = FALSE;
|
||||||
|
+
|
||||||
|
manager->priv->bus_proxy = dbus_g_proxy_new_for_name (manager->priv->connection,
|
||||||
|
DBUS_SERVICE_DBUS,
|
||||||
|
DBUS_PATH_DBUS,
|
||||||
|
diff --git a/gnome-session/gsm-shell.c b/gnome-session/gsm-shell.c
|
||||||
|
index 0b26f09..9785160 100644
|
||||||
|
--- a/gnome-session/gsm-shell.c
|
||||||
|
+++ b/gnome-session/gsm-shell.c
|
||||||
|
@@ -228,7 +228,8 @@ gsm_shell_bus_filter (DBusConnection *connection,
|
||||||
|
DBUS_INTERFACE_LOCAL, "Disconnected") &&
|
||||||
|
strcmp (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0) {
|
||||||
|
gsm_shell_disconnect_from_bus (shell);
|
||||||
|
- return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
|
+ /* let other filters get this disconnected signal, so that they
|
||||||
|
+ * can handle it too */
|
||||||
|
}
|
||||||
|
|
||||||
|
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
|
@ -1,3 +1,10 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Sep 9 08:00:56 UTC 2011 - vuntz@opensuse.org
|
||||||
|
|
||||||
|
- Add gnome-session-dbus-disconnected.patch: this fixes the case
|
||||||
|
where the session bus quits before gnome-session, so we can
|
||||||
|
properly terminate the session. Helps make the new gdm work.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Sep 5 07:33:53 UTC 2011 - vuntz@opensuse.org
|
Mon Sep 5 07:33:53 UTC 2011 - vuntz@opensuse.org
|
||||||
|
|
||||||
|
@ -37,6 +37,8 @@ Patch1: gnome-session-kdm-support.patch
|
|||||||
Patch2: gnome-session-wm-switch.patch
|
Patch2: gnome-session-wm-switch.patch
|
||||||
# PATCH-NEEDS-REBASE gnome-session-bgo507101-tile-ui.patch bgo507101 vuntz@novell.com -- Tile UI for logout dialog. (Was: PATCH-FIX-UPSTREAM)
|
# PATCH-NEEDS-REBASE gnome-session-bgo507101-tile-ui.patch bgo507101 vuntz@novell.com -- Tile UI for logout dialog. (Was: PATCH-FIX-UPSTREAM)
|
||||||
Patch3: gnome-session-bgo507101-tile-ui.patch
|
Patch3: gnome-session-bgo507101-tile-ui.patch
|
||||||
|
# PATCH-FIX-UPSTREAM gnome-session-dbus-disconnected.patch vuntz@opensuse.org -- Various fixes for the case where dbus quits early; helps with the new gdm. Taken from git.
|
||||||
|
Patch4: gnome-session-dbus-disconnected.patch
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: gnome-common
|
BuildRequires: gnome-common
|
||||||
BuildRequires: gnome-patch-translation
|
BuildRequires: gnome-patch-translation
|
||||||
@ -125,6 +127,7 @@ translation-update-upstream
|
|||||||
#%patch2 -p1
|
#%patch2 -p1
|
||||||
# needs-rebase
|
# needs-rebase
|
||||||
#%patch3 -p0
|
#%patch3 -p0
|
||||||
|
%patch4 -p1
|
||||||
# gnome-patch-translation-update
|
# gnome-patch-translation-update
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
Loading…
Reference in New Issue
Block a user