gnome-session r4829 - in branches/dbus_based: . compat gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4829 - in branches/dbus_based: . compat gnome-session
- Date: Tue, 22 Jul 2008 17:10:59 +0000 (UTC)
Author: mccann
Date: Tue Jul 22 17:10:59 2008
New Revision: 4829
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4829&view=rev
Log:
2008-07-22 William Jon McCann <jmccann redhat com>
* compat/at-spi-registryd-wrapper.c (main):
* gnome-session/gsm-manager.c (gsm_manager_setenv):
* gnome-session/gsm-xsmp-server.c (setup_listener):
* gnome-session/main.c (main):
* gnome-session/util.c (gsm_util_update_activation_environment),
(gsm_util_setenv):
* gnome-session/util.h:
Use DBus API to set environment variables in activation environment.
Patch from: Ray Strode Fixes #360475
Modified:
branches/dbus_based/ChangeLog
branches/dbus_based/compat/at-spi-registryd-wrapper.c
branches/dbus_based/gnome-session/gsm-manager.c
branches/dbus_based/gnome-session/gsm-xsmp-server.c
branches/dbus_based/gnome-session/main.c
branches/dbus_based/gnome-session/util.c
branches/dbus_based/gnome-session/util.h
Modified: branches/dbus_based/compat/at-spi-registryd-wrapper.c
==============================================================================
--- branches/dbus_based/compat/at-spi-registryd-wrapper.c (original)
+++ branches/dbus_based/compat/at-spi-registryd-wrapper.c Tue Jul 22 17:10:59 2008
@@ -142,6 +142,8 @@
gdk_window_set_events (root, GDK_PROPERTY_CHANGE_MASK);
gdk_window_add_filter (root, registry_ior_watch, NULL);
+ set_gtk_modules (gsm);
+
if (!g_spawn_command_line_async (AT_SPI_REGISTRYD_DIR "/at-spi-registryd", &error))
{
show_error (gsm);
@@ -152,7 +154,6 @@
gdk_window_remove_filter (root, registry_ior_watch, NULL);
- set_gtk_modules (gsm);
g_object_unref (gsm);
return 0;
Modified: branches/dbus_based/gnome-session/gsm-manager.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-manager.c (original)
+++ branches/dbus_based/gnome-session/gsm-manager.c Tue Jul 22 17:10:59 2008
@@ -2022,7 +2022,7 @@
return FALSE;
}
- g_setenv (variable, value, TRUE);
+ gsm_util_setenv (variable, value);
return TRUE;
}
Modified: branches/dbus_based/gnome-session/gsm-xsmp-server.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-xsmp-server.c (original)
+++ branches/dbus_based/gnome-session/gsm-xsmp-server.c Tue Jul 22 17:10:59 2008
@@ -544,7 +544,7 @@
network_id_list = IceComposeNetworkIdList (server->priv->num_local_xsmp_sockets,
server->priv->xsmp_sockets);
- g_setenv ("SESSION_MANAGER", network_id_list, TRUE);
+ gsm_util_setenv ("SESSION_MANAGER", network_id_list);
g_debug ("GsmXsmpServer: SESSION_MANAGER=%s\n", network_id_list);
free (network_id_list);
}
Modified: branches/dbus_based/gnome-session/main.c
==============================================================================
--- branches/dbus_based/gnome-session/main.c (original)
+++ branches/dbus_based/gnome-session/main.c Tue Jul 22 17:10:59 2008
@@ -225,21 +225,21 @@
* was specified on the command line.
*/
display_str = gdk_get_display ();
- g_setenv ("DISPLAY", display_str, TRUE);
+ gsm_util_setenv ("DISPLAY", display_str);
g_free (display_str);
store = gsm_client_store_new ();
+
/* Start up gconfd and dbus-daemon (in parallel) if they're not
* already running. This requires us to initialize XSMP too, because
* we want $SESSION_MANAGER to be set before launching dbus-daemon.
*/
+ maybe_start_session_bus ();
gsm_gconf_init ();
xsmp_server = gsm_xsmp_server_new (store);
- maybe_start_session_bus ();
-
/* Now make sure they succeeded. (They'll call
* gsm_util_init_error() if they failed.)
*/
Modified: branches/dbus_based/gnome-session/util.c
==============================================================================
--- branches/dbus_based/gnome-session/util.c (original)
+++ branches/dbus_based/gnome-session/util.c Tue Jul 22 17:10:59 2008
@@ -29,6 +29,8 @@
#include <gtk/gtkmain.h>
#include <gtk/gtkmessagedialog.h>
+#include <dbus/dbus-glib.h>
+
#include "util.h"
gchar **
@@ -217,3 +219,75 @@
(unsigned long) pid,
sequence);
}
+
+static gboolean
+gsm_util_update_activation_environment (const char *variable,
+ const char *value,
+ GError **error)
+{
+ DBusGConnection *dbus_connection;
+ DBusGProxy *bus_proxy;
+ GHashTable *environment;
+ gboolean environment_updated;
+
+ environment_updated = FALSE;
+ bus_proxy = NULL;
+ environment = NULL;
+
+ dbus_connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
+
+ if (dbus_connection == NULL)
+ return FALSE;
+
+ bus_proxy = dbus_g_proxy_new_for_name_owner (dbus_connection,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS,
+ error);
+
+ if (bus_proxy == NULL)
+ goto out;
+
+ environment = g_hash_table_new (g_str_hash, g_str_equal);
+
+ g_hash_table_insert (environment, (void *) variable, (void *) value);
+
+ if (!dbus_g_proxy_call (bus_proxy,
+ "UpdateActivationEnvironment", error,
+ DBUS_TYPE_G_STRING_STRING_HASHTABLE,
+ environment, G_TYPE_INVALID,
+ G_TYPE_INVALID))
+ goto out;
+
+ environment_updated = TRUE;
+
+out:
+
+ if (bus_proxy != NULL)
+ g_object_unref (bus_proxy);
+
+ if (environment != NULL)
+ g_hash_table_destroy (environment);
+
+ return environment_updated;
+}
+
+void
+gsm_util_setenv (const char *variable,
+ const char *value)
+{
+ GError *bus_error;
+
+ g_setenv (variable, value, TRUE);
+
+ bus_error = NULL;
+
+ /* If this fails it isn't fatal, it means some things like session
+ * management and keyring won't work in activated clients.
+ */
+ if (!gsm_util_update_activation_environment (variable, value, &bus_error))
+ {
+ g_warning ("Could not make bus activated clients aware of %s=%s environment variable: %s", variable, value, bus_error->message);
+ g_error_free (bus_error);
+ }
+}
Modified: branches/dbus_based/gnome-session/util.h
==============================================================================
--- branches/dbus_based/gnome-session/util.h (original)
+++ branches/dbus_based/gnome-session/util.h Tue Jul 22 17:10:59 2008
@@ -32,6 +32,9 @@
const char *format, ...);
char * gsm_util_generate_startup_id (void);
+void gsm_util_setenv (const char *variable,
+ const char *value);
+
G_END_DECLS
#endif /* __GSM_UTIL_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]