gnome-session r4829 - in branches/dbus_based: . compat gnome-session



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]