[at-spi] Set GTK_MODULES env var in at-spi-registryd.
- From: Li Yuan <liyuan src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [at-spi] Set GTK_MODULES env var in at-spi-registryd.
- Date: Tue, 25 Aug 2009 07:18:59 +0000 (UTC)
commit 1119d5f964966a533c2259cd6b9c3cfecb3357af
Author: Li Yuan <li yuan sun com>
Date: Tue Aug 25 15:13:34 2009 +0800
Set GTK_MODULES env var in at-spi-registryd.
Bug #592981. After fixing bug #578334, at-spi-registryd should set
GTK_MODULES by itself since gnome-session will remove related code.
configure.in | 2 +
registryd/registry-main.c | 78 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 80 insertions(+), 0 deletions(-)
---
diff --git a/configure.in b/configure.in
index 2e06eea..ab8cad9 100644
--- a/configure.in
+++ b/configure.in
@@ -28,6 +28,7 @@ AC_SUBST(LT_AGE)
dnl required versions of other tools.
m4_define([req_ver_atk], [1.17.0])
m4_define([req_ver_gtk], [2.10.0])
+m4_define([req_ver_dbus], [0.76])
m4_define([req_ver_gail], [1.9.0])
m4_define([req_ver_libbonobo], [1.107.0])
@@ -100,6 +101,7 @@ PKG_CHECK_MODULES(REGISTRYD, [
libbonobo-2.0 >= req_ver_libbonobo
atk >= req_ver_atk
gtk+-2.0 >= req_ver_gtk
+ dbus-glib-1 >= req_ver_dbus
])
AC_SUBST(REGISTRYD_LIBS)
AC_SUBST(REGISTRYD_CFLAGS)
diff --git a/registryd/registry-main.c b/registryd/registry-main.c
index bd98740..8f47e97 100644
--- a/registryd/registry-main.c
+++ b/registryd/registry-main.c
@@ -31,6 +31,7 @@
#include <libbonobo.h>
#include <glib.h>
#include "registry.h"
+#include <dbus/dbus-glib.h>
#ifdef HAVE_SM
#include <X11/SM/SMlib.h>
@@ -42,6 +43,7 @@
static void registry_set_ior (SpiRegistry *registry);
static void registry_session_init (const char *previous_client_id, const char *exe);
+static void set_gtk_modules (DBusGProxy *gsm);
#ifdef HAVE_SM
static void die_callback (SmcConn smc_conn, SmPointer client_data);
static void save_yourself_callback (SmcConn smc_conn,
@@ -63,6 +65,10 @@ main (int argc, char **argv)
char *cp, *dp;
SpiRegistry *registry;
+ DBusGConnection *connection;
+ DBusGProxy *gsm;
+ GError *error;
+
if (!bonobo_init (&argc, argv))
{
g_error ("Could not initialize oaf / Bonobo");
@@ -96,6 +102,18 @@ main (int argc, char **argv)
#ifdef AT_SPI_DEBUG
fprintf (stderr, "SpiRegistry Message: SpiRegistry daemon is running.\n");
#endif
+ error = NULL;
+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+ if (connection == NULL)
+ {
+ g_error ("couldn't get D-Bus connection: %s", error->message);
+ }
+ gsm = dbus_g_proxy_new_for_name (connection,
+ "org.gnome.SessionManager",
+ "/org/gnome/SessionManager",
+ "org.gnome.SessionManager");
+ set_gtk_modules (gsm);
+
registry_set_ior (registry);
/* If DESKTOP_AUTOSTART_ID exists, assume we're started by session
@@ -364,3 +382,63 @@ save_yourself_callback (SmcConn smc_conn,
}
#endif
+static void
+set_gtk_modules (DBusGProxy *gsm)
+{
+ const char *old;
+ char *value;
+ gboolean found_gail;
+ gboolean found_atk_bridge;
+ GError *error;
+ int i;
+
+ found_gail = FALSE;
+ found_atk_bridge = FALSE;
+
+ old = g_getenv ("GTK_MODULES");
+ if (old != NULL) {
+ char **old_modules;
+ char **modules;
+
+ old_modules = g_strsplit (old, ":", -1);
+ for (i = 0; old_modules[i]; i++) {
+ if (!strcmp (old_modules[i], "gail")) {
+ found_gail = TRUE;
+ } else if (!strcmp (old_modules[i], "atk-bridge")) {
+ found_atk_bridge = TRUE;
+ }
+ }
+
+ modules = g_new (char *, i + (found_gail ? 0 : 1) +
+ (found_atk_bridge ? 0 : 1) + 1);
+ for (i = 0; old_modules[i]; i++) {
+ modules[i] = old_modules[i];
+ }
+ if (!found_gail) {
+ modules[i++] = "gail";
+ }
+ if (!found_atk_bridge) {
+ modules[i++] = "atk-bridge";
+ }
+ modules[i] = NULL;
+
+ value = g_strjoinv (":", modules);
+ g_free (modules);
+ g_strfreev (old_modules);
+ } else {
+ value = g_strdup ("gail:atk-bridge");
+ }
+
+ error = NULL;
+ if (!dbus_g_proxy_call (gsm, "Setenv", &error,
+ G_TYPE_STRING, "GTK_MODULES",
+ G_TYPE_STRING, value,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID)) {
+ g_warning ("Could not set GTK_MODULES: %s", error->message);
+ g_error_free (error);
+ }
+
+ g_free (value);
+ return;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]