From e61932c0922b189d8680b8cdc6e12d1881c98528 Mon Sep 17 00:00:00 2001 From: Peng Huang Date: Wed, 15 Apr 2009 10:15:10 +0800 Subject: [PATCH] Add $IBUS_SESSION_ID in socket path. --- bus/server.c | 2 +- ibus/common.py | 7 ++++++- src/ibusbus.c | 2 +- src/ibusshare.c | 25 +++++++++++++++++++++++++ src/ibusshare.h | 1 + 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/bus/server.c b/bus/server.c index 425dd86..41bf3e1 100644 --- a/bus/server.c +++ b/bus/server.c @@ -89,7 +89,7 @@ bus_server_listen (BusServer *server) gchar *path; gboolean retval; - path = g_strdup_printf("/tmp/ibus-%s", ibus_get_user_name ()); + path = ibus_get_socket_folder (); mkdir (path, 0700); chmod (path, 0700); diff --git a/ibus/common.py b/ibus/common.py index 527d3a5..571ebaa 100644 --- a/ibus/common.py +++ b/ibus/common.py @@ -67,7 +67,12 @@ if not __username: if not __username: __username = os.getenv ("USERNAME") -IBUS_ADDR = "unix:path=/tmp/ibus-%s/ibus-%s-%s" % (__username, __hostname, __display_number) +__session_id = os.getenv ("IBUS_SESSION_ID") + +IBUS_ADDR = "unix:path=/tmp/ibus-%s%s/ibus-%s-%s" % (__username, + "-" + __session_id if __session_id else "", + __hostname, + __display_number) # IBUS_ADDR = "tcp:host=localhost,port=7799" IBUS_IFACE_IBUS = "org.freedesktop.IBus" diff --git a/src/ibusbus.c b/src/ibusbus.c index 373e5d4..d4ba041 100644 --- a/src/ibusbus.c +++ b/src/ibusbus.c @@ -220,7 +220,7 @@ ibus_bus_init (IBusBus *bus) ibus_bus_connect (bus); - path = g_strdup_printf ("/tmp/ibus-%s/", ibus_get_user_name ()); + path = ibus_get_socket_folder (); file = g_file_new_for_path (path); priv->monitor = g_file_monitor_directory (file, 0, NULL, NULL); diff --git a/src/ibusshare.c b/src/ibusshare.c index c7aa1fe..4893f19 100644 --- a/src/ibusshare.c +++ b/src/ibusshare.c @@ -69,6 +69,31 @@ ibus_get_user_name (void) } const gchar * +ibus_get_session_id (void) +{ + return g_getenv("IBUS_SESSION_ID"); +} + +const gchar * +ibus_get_socket_folder (void) +{ + static gchar *folder = NULL; + + if (folder == NULL) { + const gchar *session = ibus_get_session_id (); + if (session && session[0] != '\0') { + folder = g_strdup_printf ("/tmp/ibus-%s-%s", + ibus_get_user_name (), session); + } + else { + folder = g_strdup_printf ("/tmp/ibus-%s", + ibus_get_user_name ()); + } + } + return folder; +} + +const gchar * ibus_get_socket_path (void) { static gchar *path = NULL; diff --git a/src/ibusshare.h b/src/ibusshare.h index f3b34c4..4c0c645 100644 --- a/src/ibusshare.h +++ b/src/ibusshare.h @@ -49,6 +49,7 @@ void ibus_set_display (const gchar *display); const gchar *ibus_get_address (void); const gchar *ibus_get_user_name (void); const gchar *ibus_get_socket_path (void); +const gchar *ibus_get_socket_folder (void); const gchar *ibus_keyval_name (guint keyval); guint ibus_keyval_from_name (const gchar *keyval_name); -- 2.7.4