Blob Blame History Raw
diff --git a/bus/ibus.desktop.in b/bus/ibus.desktop.in
index fcf2f21..cd2ad60 100644
--- a/bus/ibus.desktop.in
+++ b/bus/ibus.desktop.in
@@ -7,7 +7,7 @@ Exec=ibus-daemon --xim
 Icon=ibus
 Terminal=false
 Type=Application
-X-GNOME-Autostart-Phase=Panel
+X-GNOME-Autostart-Phase=Applications
 X-GNOME-AutoRestart=false
 X-GNOME-Autostart-Notify=true
 X-KDE-autostart-after=panel
diff --git a/bus/inputcontext.c b/bus/inputcontext.c
index 456e049..7003bd7 100644
--- a/bus/inputcontext.c
+++ b/bus/inputcontext.c
@@ -2091,10 +2091,10 @@ bus_input_context_filter_keyboard_shortcuts (BusInputContext    *context,
         return TRUE;
     }
     else if (event == next_factory) {
-        g_signal_emit (context, context_signals[REQUEST_NEXT_ENGINE], 0);
-        if (priv->engine && !priv->enabled) {
-            bus_input_context_enable (context);
+        if (priv->engine == NULL || priv->enabled == FALSE) {
+            return FALSE;
         }
+        g_signal_emit (context, context_signals[REQUEST_NEXT_ENGINE], 0);
         return TRUE;
     }
     else if (event == prev_factory) {
diff --git a/bus/server.c b/bus/server.c
index 7245bd3..1c796f2 100644
--- a/bus/server.c
+++ b/bus/server.c
@@ -86,21 +86,23 @@ bus_server_listen (BusServer *server)
 
     // const gchar *address = "unix:abstract=/tmp/ibus-c"
     const gchar *address;
-    gchar *path;
+    const gchar *path;
     gboolean retval;
 
-    path = g_strdup_printf("/tmp/ibus-%s", ibus_get_user_name ());
-    mkdir (path, 0775);
+    path = ibus_get_socket_folder ();
+    mkdir (path, 0700);
+    chmod (path, 0700);
+
     address = ibus_get_address ();
 
     retval = ibus_server_listen (IBUS_SERVER (server), address);
+    chmod (ibus_get_socket_path (), 0600);
 
     if (!retval) {
         g_printerr ("Can not listen on %s! Please try remove directory %s and run again.", address, path);
         exit (-1);
     }
 
-    g_free(path);
     return retval;
 }
 
diff --git a/client/gtk2/ibusimcontext.c b/client/gtk2/ibusimcontext.c
index 5da4dec..168e45a 100644
--- a/client/gtk2/ibusimcontext.c
+++ b/client/gtk2/ibusimcontext.c
@@ -190,14 +190,20 @@ _key_snooper_cb (GtkWidget   *widget,
     IBusIMContext *ibusimcontext;
     ibusimcontext = (IBusIMContext *) _focus_im_context;
 
-    if (!_use_key_snooper)
+    if (G_UNLIKELY (!_use_key_snooper))
         return retval;
 
     if (ibusimcontext == NULL)
-        return retval;
+        return FALSE;
 
-    if (ibusimcontext->ibuscontext == NULL || ibusimcontext->has_focus == FALSE)
-        return retval;
+    if (G_UNLIKELY (ibusimcontext->ibuscontext == NULL || ibusimcontext->has_focus == FALSE))
+        return FALSE;
+
+    if (G_UNLIKELY (event->state & IBUS_HANDLED_MASK))
+        return TRUE;
+
+    if (G_UNLIKELY (event->state & IBUS_IGNORED_MASK))
+        return FALSE;
 
     switch (event->type) {
     case GDK_KEY_RELEASE:
@@ -212,6 +218,14 @@ _key_snooper_cb (GtkWidget   *widget,
         break;
     default:
         retval = FALSE;
+        break;
+    }
+
+    if (retval) {
+        event->state |= IBUS_HANDLED_MASK;
+    }
+    else {
+        event->state |= IBUS_IGNORED_MASK;
     }
 
     return retval;
@@ -383,11 +397,18 @@ ibus_im_context_filter_keypress (GtkIMContext *context,
 
     IBusIMContext *ibusimcontext = (IBusIMContext *) context;
 
-    if (ibusimcontext->ibuscontext && ibusimcontext->has_focus) {
+    if (G_LIKELY (ibusimcontext->ibuscontext && ibusimcontext->has_focus)) {
         /* If context does not have focus, ibus will process key event in sync mode.
          * It is a workaround for increase search in treeview.
          */
-        gboolean retval;
+        gboolean retval = FALSE;
+
+        if (event->state & IBUS_HANDLED_MASK)
+            return TRUE;
+
+        if (event->state & IBUS_IGNORED_MASK)
+            return gtk_im_context_filter_keypress (ibusimcontext->slave, event);
+
         switch (event->type) {
         case GDK_KEY_RELEASE:
             retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
@@ -404,9 +425,13 @@ ibus_im_context_filter_keypress (GtkIMContext *context,
         }
 
         if (retval) {
+            event->state |= IBUS_HANDLED_MASK;
             return TRUE;
         }
-        return gtk_im_context_filter_keypress (ibusimcontext->slave, event);
+        else {
+            event->state |= IBUS_IGNORED_MASK;
+            return gtk_im_context_filter_keypress (ibusimcontext->slave, event);
+        }
     }
     else {
         return gtk_im_context_filter_keypress (ibusimcontext->slave, event);
diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
index be4b980..a976eec 100644
--- a/data/ibus.schemas.in
+++ b/data/ibus.schemas.in
@@ -18,7 +18,7 @@
       <owner>ibus</owner>
       <type>list</type>
       <list_type>string</list_type>
-      <default>[Control+space,Zenkaku_Hankaku,Alt+Zenkaku_Hankaku,Alt+grave,Hangul]</default>
+      <default>[Control+space,Zenkaku_Hankaku,Alt+Zenkaku_Hankaku,Alt+grave,Hangul,Alt+Release+Alt_R]</default>
       <locale name="C">
         <short>Trigger Hotkey</short>
 	    <long>Trigger hotkey for enable or disable input context</long>
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/ibus/modifier.py b/ibus/modifier.py
index 7f6afad..56d8be9 100644
--- a/ibus/modifier.py
+++ b/ibus/modifier.py
@@ -33,11 +33,15 @@ BUTTON2_MASK = 1 << 9
 BUTTON3_MASK = 1 << 10
 BUTTON4_MASK = 1 << 11
 BUTTON5_MASK = 1 << 12
-  
+
+HANDLED_MASK = 1 << 24
+IGNORED_MASK = 1 << 25
+FORWARD_MASK = 1 << 25
+
 SUPER_MASK = 1 << 26
 HYPER_MASK = 1 << 27
 META_MASK = 1 << 28
-  
+
 RELEASE_MASK = 1 << 30
 
 MODIFIER_MASK = 0x5c001fff
diff --git a/po/as.po b/po/as.po
index 8e33ca2..9b81669 100644
--- a/po/as.po
+++ b/po/as.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ibus.master.ibus.as\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-02 02:13+0000\n"
-"PO-Revision-Date: 2009-04-08 15:55+0530\n"
+"POT-Creation-Date: 2009-04-06 11:45+0800\n"
+"PO-Revision-Date: 2009-04-09 19:03+0530\n"
 "Last-Translator: Amitakhya Phukan <aphukan@fedoraproject.org>\n"
 "Language-Team: Assamese <fedora-trans-as@redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -16,163 +16,19 @@ msgstr ""
 "X-Generator: Lokalize 0.3\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
-#: ../src/keyname-table.h:3940
-msgid "keyboard label|BackSpace"
-msgstr "keyboard label|BackSpace"
+#: ../bus/ibus.desktop.in.h:1
+msgid "IBus"
+msgstr "IBus"
 
-#: ../src/keyname-table.h:3941
-msgid "keyboard label|Tab"
-msgstr "keyboard label|Tab"
-
-#: ../src/keyname-table.h:3942
-msgid "keyboard label|Return"
-msgstr "keyboard label|Return"
-
-#: ../src/keyname-table.h:3943
-msgid "keyboard label|Pause"
-msgstr "keyboard label|Pause"
-
-#: ../src/keyname-table.h:3944
-msgid "keyboard label|Scroll_Lock"
-msgstr "keyboard label|Scroll_Lock"
-
-#: ../src/keyname-table.h:3945
-msgid "keyboard label|Sys_Req"
-msgstr "keyboard label|Sys_Req"
-
-#: ../src/keyname-table.h:3946
-msgid "keyboard label|Escape"
-msgstr "keyboard label|Escape"
-
-#: ../src/keyname-table.h:3947
-msgid "keyboard label|Multi_key"
-msgstr "keyboard label|Multi_key"
-
-#: ../src/keyname-table.h:3948
-msgid "keyboard label|Home"
-msgstr "keyboard label|Home"
-
-#: ../src/keyname-table.h:3949
-msgid "keyboard label|Left"
-msgstr "keyboard label|Left"
-
-#: ../src/keyname-table.h:3950
-msgid "keyboard label|Up"
-msgstr "keyboard label|Up"
-
-#: ../src/keyname-table.h:3951
-msgid "keyboard label|Right"
-msgstr "keyboard label|Right"
-
-#: ../src/keyname-table.h:3952
-msgid "keyboard label|Down"
-msgstr "keyboard label|Down"
-
-#: ../src/keyname-table.h:3953
-msgid "keyboard label|Page_Up"
-msgstr "keyboard label|Page_Up"
-
-#: ../src/keyname-table.h:3954
-msgid "keyboard label|Page_Down"
-msgstr "keyboard label|Page_Down"
-
-#: ../src/keyname-table.h:3955
-msgid "keyboard label|End"
-msgstr "keyboard label|End"
-
-#: ../src/keyname-table.h:3956
-msgid "keyboard label|Begin"
-msgstr "keyboard label|Begin"
-
-#: ../src/keyname-table.h:3957
-msgid "keyboard label|Print"
-msgstr "keyboard label|Print"
-
-#: ../src/keyname-table.h:3958
-msgid "keyboard label|Insert"
-msgstr "keyboard label|Insert"
-
-#: ../src/keyname-table.h:3959
-msgid "keyboard label|Num_Lock"
-msgstr "keyboard label|Num_Lock"
-
-#: ../src/keyname-table.h:3960
-msgid "keyboard label|KP_Space"
-msgstr "keyboard label|KP_Space"
-
-#: ../src/keyname-table.h:3961
-msgid "keyboard label|KP_Tab"
-msgstr "keyboard label|KP_Tab"
-
-#: ../src/keyname-table.h:3962
-msgid "keyboard label|KP_Enter"
-msgstr "keyboard label|KP_Enter"
-
-#: ../src/keyname-table.h:3963
-msgid "keyboard label|KP_Home"
-msgstr "keyboard label|KP_Home"
-
-#: ../src/keyname-table.h:3964
-msgid "keyboard label|KP_Left"
-msgstr "keyboard label|KP_Left"
-
-#: ../src/keyname-table.h:3965
-msgid "keyboard label|KP_Up"
-msgstr "keyboard label|KP_Up"
-
-#: ../src/keyname-table.h:3966
-msgid "keyboard label|KP_Right"
-msgstr "keyboard label|KP_Right"
-
-#: ../src/keyname-table.h:3967
-msgid "keyboard label|KP_Down"
-msgstr "keyboard label|KP_Down"
-
-#: ../src/keyname-table.h:3968
-msgid "keyboard label|KP_Page_Up"
-msgstr "keyboard label|KP_Page_Up"
-
-#: ../src/keyname-table.h:3969
-msgid "keyboard label|KP_Prior"
-msgstr "keyboard label|KP_Prior"
-
-#: ../src/keyname-table.h:3970
-msgid "keyboard label|KP_Page_Down"
-msgstr "keyboard label|KP_Page_Down"
-
-#: ../src/keyname-table.h:3971
-msgid "keyboard label|KP_Next"
-msgstr "keyboard label|KP_Next"
-
-#: ../src/keyname-table.h:3972
-msgid "keyboard label|KP_End"
-msgstr "keyboard label|KP_End"
-
-#: ../src/keyname-table.h:3973
-msgid "keyboard label|KP_Begin"
-msgstr "keyboard label|KP_Begin"
-
-#: ../src/keyname-table.h:3974
-msgid "keyboard label|KP_Insert"
-msgstr "keyboard label|KP_Insert"
-
-#: ../src/keyname-table.h:3975
-msgid "keyboard label|KP_Delete"
-msgstr "keyboard label|KP_Delete"
-
-#: ../src/keyname-table.h:3976
-msgid "keyboard label|Delete"
-msgstr "keyboard label|Delete"
+#: ../bus/ibus.desktop.in.h:2 ../ui/gtk/panel.py:97
+msgid "IBus input method framework"
+msgstr "IBus input method framework"
 
 #: ../ibus/lang.py:40 ../ui/gtk/panel.py:307 ../ui/gtk/panel.py:308
 #: ../ui/gtk/panel.py:309 ../ui/gtk/panel.py:310
 msgid "Other"
 msgstr "অন্য"
 
-#: ../ui/gtk/panel.py:97
-msgid "IBus input method framework"
-msgstr "IBus input method framework"
-
 #: ../ui/gtk/panel.py:282
 msgid "Restart"
 msgstr "পুনৰাৰম্ভ"
@@ -191,25 +47,24 @@ msgstr "অমিতাক্ষ ফুকন (aphukan@fedoraproject.org)"
 
 #. create input methods menu
 #: ../ui/gtk/languagebar.py:84
-msgid "Switch engine"
-msgstr "কলঘৰ সলনি কৰক"
+msgid "Switch input method"
+msgstr "নিবেশ পদ্ধতি সলনি কৰক"
 
 #: ../setup/main.py:103
 msgid "trigger"
 msgstr "ট্ৰিগাৰ"
 
 #: ../setup/main.py:113
-msgid "next engine"
-msgstr "পিছৰ কলঘৰ"
+msgid "next input method"
+msgstr "পিছৰ নিবেশ পদ্ধতি"
 
 #: ../setup/main.py:123
-msgid "prev engine"
-msgstr "আগৰ কলঘৰ"
+msgid "previous input method"
+msgstr "আগৰ নিবেশ পদ্ধতি"
 
 #: ../setup/main.py:204
 msgid "IBus daemon is not started. Do you want to start it now?"
-msgstr ""
-"IBus ডেমন আৰম্ভ কৰা হোৱা নাই । আপুনি ইয়াক এতিয়া আৰম্ভ কৰিব বিচাৰে নেকি ?"
+msgstr "IBus ডেমন আৰম্ভ কৰা হোৱা নাই । আপুনি ইয়াক এতিয়া আৰম্ভ কৰিব বিচাৰে নেকি ?"
 
 #: ../setup/main.py:219
 msgid ""
@@ -219,8 +74,8 @@ msgid ""
 "  export XMODIFIERS=@im=ibus\n"
 "  export QT_IM_MODULE=ibus"
 msgstr ""
-"IBus আৰম্ভ কৰা হ'ল! IBus ব্যৱহাৰ কৰিব নোৱাৰিলে, এই শাৰী"
-"$HOME/.bashrc ত যোগ দিয়ক, আৰু আপোনাৰ ডেষ্কট'পত পুনঃ প্ৰৱেশ কৰক ।\n"
+"IBus আৰম্ভ কৰা হ'ল! IBus ব্যৱহাৰ কৰিব নোৱাৰিলে, এই শাৰী$HOME/.bashrc ত যোগ "
+"দিয়ক, আৰু আপোনাৰ ডেষ্কট'পত পুনঃ প্ৰৱেশ কৰক ।\n"
 "  export GTK_IM_MODULE=ibus\n"
 "  export XMODIFIERS=@im=ibus\n"
 "  export QT_IM_MODULE=ibus"
@@ -318,7 +173,7 @@ msgstr ""
 "অনুভূমিক\n"
 "উলম্ব"
 
-#: ../setup/setup.glade.h:19
+#: ../setup/setup.glade.h:19 ../setup/ibus-setup.desktop.in.h:1
 msgid "IBus Preferences"
 msgstr "IBus পছন্দ"
 
@@ -341,21 +196,21 @@ msgid "Next input method:"
 msgstr "পিছৰ নিবেশ পদ্ধতি:"
 
 #: ../setup/setup.glade.h:25
+msgid "Previous input method:"
+msgstr "আগৰ নিবেশ পদ্ধতি"
+
+#: ../setup/setup.glade.h:26
 msgid "Show language panel:"
 msgstr "ভাষাৰ পেনেল দেখুৱাওক:"
 
-#: ../setup/setup.glade.h:26
+#: ../setup/setup.glade.h:27
 msgid "Start ibus on login"
 msgstr "প্ৰৱেশত ibus আৰম্ভ কৰক"
 
-#: ../setup/setup.glade.h:27
+#: ../setup/setup.glade.h:28
 msgid "Use custom font"
 msgstr "স্বনিৰ্বাচিত ফন্ট ব্যৱহাৰ কৰা হ'ব"
 
-#: ../setup/setup.glade.h:28
-msgid "previous input method:"
-msgstr "আগৰ নিবেশ পদ্ধতি:"
-
 #: ../data/ibus.schemas.in.h:1
 msgid "Auto Hide"
 msgstr "স্বয়ংক্ৰিয়ভাবে লুকাওক"
@@ -405,8 +260,7 @@ msgid ""
 "The behavior of language panel. 0 = Always hide, 1 = Auto hide, 2 = Always "
 "show"
 msgstr ""
-"ভাষাৰ পেনেলৰ আচৰণ । ০ = সদায় লুকাওক, ১ = স্বয়ংক্ৰিয়ভাবে লুকাওক, ২ = সদায় "
-"দেখুৱাওক"
+"ভাষাৰ পেনেলৰ আচৰণ । ০ = সদায় লুকাওক, ১ = স্বয়ংক্ৰিয়ভাবে লুকাওক, ২ = সদায় দেখুৱাওক"
 
 #: ../data/ibus.schemas.in.h:13
 msgid "Trigger Hotkey"
@@ -428,4 +282,122 @@ msgstr "ভাষাৰ পেনেলৰ বাবে স্বনিৰ্ব
 msgid "[Control+space]"
 msgstr "[Control+space]"
 
+#~ msgid "keyboard label|BackSpace"
+#~ msgstr "keyboard label|BackSpace"
+
+#~ msgid "keyboard label|Tab"
+#~ msgstr "keyboard label|Tab"
+
+#~ msgid "keyboard label|Return"
+#~ msgstr "keyboard label|Return"
+
+#~ msgid "keyboard label|Pause"
+#~ msgstr "keyboard label|Pause"
+
+#~ msgid "keyboard label|Scroll_Lock"
+#~ msgstr "keyboard label|Scroll_Lock"
+
+#~ msgid "keyboard label|Sys_Req"
+#~ msgstr "keyboard label|Sys_Req"
+
+#~ msgid "keyboard label|Escape"
+#~ msgstr "keyboard label|Escape"
+
+#~ msgid "keyboard label|Multi_key"
+#~ msgstr "keyboard label|Multi_key"
+
+#~ msgid "keyboard label|Home"
+#~ msgstr "keyboard label|Home"
+
+#~ msgid "keyboard label|Left"
+#~ msgstr "keyboard label|Left"
+
+#~ msgid "keyboard label|Up"
+#~ msgstr "keyboard label|Up"
+
+#~ msgid "keyboard label|Right"
+#~ msgstr "keyboard label|Right"
+
+#~ msgid "keyboard label|Down"
+#~ msgstr "keyboard label|Down"
+
+#~ msgid "keyboard label|Page_Up"
+#~ msgstr "keyboard label|Page_Up"
+
+#~ msgid "keyboard label|Page_Down"
+#~ msgstr "keyboard label|Page_Down"
+
+#~ msgid "keyboard label|End"
+#~ msgstr "keyboard label|End"
+
+#~ msgid "keyboard label|Begin"
+#~ msgstr "keyboard label|Begin"
+
+#~ msgid "keyboard label|Print"
+#~ msgstr "keyboard label|Print"
+
+#~ msgid "keyboard label|Insert"
+#~ msgstr "keyboard label|Insert"
+
+#~ msgid "keyboard label|Num_Lock"
+#~ msgstr "keyboard label|Num_Lock"
+
+#~ msgid "keyboard label|KP_Space"
+#~ msgstr "keyboard label|KP_Space"
+
+#~ msgid "keyboard label|KP_Tab"
+#~ msgstr "keyboard label|KP_Tab"
+
+#~ msgid "keyboard label|KP_Enter"
+#~ msgstr "keyboard label|KP_Enter"
+
+#~ msgid "keyboard label|KP_Home"
+#~ msgstr "keyboard label|KP_Home"
+
+#~ msgid "keyboard label|KP_Left"
+#~ msgstr "keyboard label|KP_Left"
+
+#~ msgid "keyboard label|KP_Up"
+#~ msgstr "keyboard label|KP_Up"
+
+#~ msgid "keyboard label|KP_Right"
+#~ msgstr "keyboard label|KP_Right"
+
+#~ msgid "keyboard label|KP_Down"
+#~ msgstr "keyboard label|KP_Down"
+
+#~ msgid "keyboard label|KP_Page_Up"
+#~ msgstr "keyboard label|KP_Page_Up"
+
+#~ msgid "keyboard label|KP_Prior"
+#~ msgstr "keyboard label|KP_Prior"
+
+#~ msgid "keyboard label|KP_Page_Down"
+#~ msgstr "keyboard label|KP_Page_Down"
+
+#~ msgid "keyboard label|KP_Next"
+#~ msgstr "keyboard label|KP_Next"
+
+#~ msgid "keyboard label|KP_End"
+#~ msgstr "keyboard label|KP_End"
+
+#~ msgid "keyboard label|KP_Begin"
+#~ msgstr "keyboard label|KP_Begin"
+
+#~ msgid "keyboard label|KP_Insert"
+#~ msgstr "keyboard label|KP_Insert"
+
+#~ msgid "keyboard label|KP_Delete"
+#~ msgstr "keyboard label|KP_Delete"
+
+#~ msgid "keyboard label|Delete"
+#~ msgstr "keyboard label|Delete"
+
+#~ msgid "Switch engine"
+#~ msgstr "কলঘৰ সলনি কৰক"
+
+#~ msgid "next engine"
+#~ msgstr "পিছৰ কলঘৰ"
 
+#~ msgid "prev engine"
+#~ msgstr "আগৰ কলঘৰ"
diff --git a/po/te.po b/po/te.po
index 3b8c0da..9c65afd 100644
--- a/po/te.po
+++ b/po/te.po
@@ -1,21 +1,21 @@
-# translation of ibus.master.ibus.po to Telugu
+# translation of ibus.master.te.po to Telugu
 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Krishna Babu K <kkrothap@redhat.com>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: ibus.master.ibus\n"
+"Project-Id-Version: ibus.master.te\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-07 15:38+0800\n"
-"PO-Revision-Date: 2009-04-07 00:39+0530\n"
+"POT-Creation-Date: 2009-04-06 11:45+0800\n"
+"PO-Revision-Date: 2009-04-14 15:04+0530\n"
 "Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
 "Language-Team: Telugu <en@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
 "\n"
 
 #: ../bus/ibus.desktop.in.h:1
@@ -49,23 +49,20 @@ msgstr "కృష్ణబాబు కె <kkrothap@redhat.com> 2009."
 
 #. create input methods menu
 #: ../ui/gtk/languagebar.py:84
-#, fuzzy
 msgid "Switch input method"
-msgstr "ఎటువంటి ఇన్పుట్ పద్దతిలేదు"
+msgstr "ఇన్పుట్ పద్దతి మార్చుము"
 
 #: ../setup/main.py:103
 msgid "trigger"
 msgstr "బిస (ట్రిగ్గర్)"
 
 #: ../setup/main.py:113
-#, fuzzy
 msgid "next input method"
-msgstr "తరువాతి ఇన్పుట్ పద్దతి:"
+msgstr "తరువాతి ఇన్పుట్ పద్దతి"
 
 #: ../setup/main.py:123
-#, fuzzy
 msgid "previous input method"
-msgstr "మునుపటి ఇన్పుట్ పద్దతి:"
+msgstr "మునుపటి ఇన్పుట్ పద్దతి"
 
 #: ../setup/main.py:204
 msgid "IBus daemon is not started. Do you want to start it now?"
@@ -201,7 +198,6 @@ msgid "Next input method:"
 msgstr "తరువాతి ఇన్పుట్ పద్దతి:"
 
 #: ../setup/setup.glade.h:25
-#, fuzzy
 msgid "Previous input method:"
 msgstr "మునుపటి ఇన్పుట్ పద్దతి:"
 
@@ -285,14 +281,7 @@ msgstr "మలచుకొనిన ఫాంటు వుపయోగించ
 msgid "Use custom font name for language panel"
 msgstr "భాషా ప్యానల్ కొరకు మలచుకొనిన ఫాంట్ నామము వుపయోగించుము"
 
-#~ msgid "Switch engine"
-#~ msgstr "ఇంజన్‌ను మార్చుము"
-
-#~ msgid "next engine"
-#~ msgstr "తరువాతి యింజన్"
-
-#~ msgid "prev engine"
-#~ msgstr "మునుపటి యింజన్"
+#: ../data/ibus.schemas.in.h:17
+msgid "[Control+space]"
+msgstr "[Control+space]"
 
-#~ msgid "[Control+space]"
-#~ msgstr "[Control+space]"
diff --git a/setup/keyboardshortcut.py b/setup/keyboardshortcut.py
index a9e2233..f954343 100644
--- a/setup/keyboardshortcut.py
+++ b/setup/keyboardshortcut.py
@@ -27,6 +27,7 @@ __all__ = (
 import gobject
 import gtk
 from gtk import gdk
+from gtk import keysyms
 
 from gettext import dgettext
 _  = lambda a : dgettext("ibus", a)
@@ -217,8 +218,29 @@ class KeyboardShortcutSelection(gtk.VBox):
         if id != gtk.RESPONSE_OK or not out:
             return
         keyevent = out[0]
+        state = keyevent.state & (gdk.CONTROL_MASK | \
+                                  gdk.SHIFT_MASK   | \
+                                  gdk.MOD1_MASK    | \
+                                  gdk.META_MASK    | \
+                                  gdk.SUPER_MASK   | \
+                                  gdk.HYPER_MASK)
+        if state == 0:
+            state = state | gdk.RELEASE_MASK
+        elif keyevent.keyval in (keysyms.Control_L, keysyms.Control_R) and state == gdk.CONTROL_MASK:
+            state = state | gdk.RELEASE_MASK
+        elif keyevent.keyval in (keysyms.Shift_L, keysyms.Shift_R) and state == gdk.SHIFT_MASK:
+            state = state | gdk.RELEASE_MASK
+        elif keyevent.keyval in (keysyms.Alt_L, keysyms.Alt_R) and state == gdk.MOD1_MASK:
+            state = state | gdk.RELEASE_MASK
+        elif keyevent.keyval in (keysyms.Meta_L, keysyms.Meta_R) and state == gdk.META_MASK:
+            state = state | gdk.RELEASE_MASK
+        elif keyevent.keyval in (keysyms.Super_L, keysyms.Super_R) and state == gdk.SUPER_MASK:
+            state = state | gdk.RELEASE_MASK
+        elif keyevent.keyval in (keysyms.Hyper_L, keysyms.Hyper_R) and state == gdk.HYPER_MASK:
+            state = state | gdk.RELEASE_MASK
+
         for name, button, mask in self.__modifier_buttons:
-            if keyevent.state & mask:
+            if state & mask:
                 button.set_active(True)
             else:
                 button.set_active(False)
diff --git a/src/ibusbus.c b/src/ibusbus.c
index 373e5d4..756f8e5 100644
--- a/src/ibusbus.c
+++ b/src/ibusbus.c
@@ -220,14 +220,17 @@ 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 ();
+    mkdir (path, 0700);
+    chmod (path, 0700);
+
+
     file = g_file_new_for_path (path);
     priv->monitor = g_file_monitor_directory (file, 0, NULL, NULL);
 
     g_signal_connect (priv->monitor, "changed", (GCallback) _changed_cb, bus);
 
     g_object_unref (file);
-    g_free (path);
 }
 
 static void
diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
index 95754cf..52547ff 100644
--- a/src/ibusinputcontext.c
+++ b/src/ibusinputcontext.c
@@ -553,7 +553,10 @@ ibus_input_context_process_key_event (IBusInputContext *context,
     IBusError *error = NULL;
     gboolean retval;
 
-    if (state & IBUS_FORWARD_MASK)
+    if (state & IBUS_HANDLED_MASK)
+        return TRUE;
+
+    if (state & IBUS_IGNORED_MASK)
         return FALSE;
 
     retval = ibus_proxy_call_with_reply ((IBusProxy *) context,
diff --git a/src/ibusshare.c b/src/ibusshare.c
index c7aa1fe..186be85 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;
@@ -78,7 +103,7 @@ ibus_get_socket_path (void)
         gchar *display;
         gchar *displaynumber = "0";
         gchar *screennumber = "0";
-        const gchar *username = NULL;
+        const gchar *folder= NULL;
         gchar *p;
 
         if (_display == NULL) {
@@ -111,14 +136,14 @@ ibus_get_socket_path (void)
             }
         }
 
-        username = ibus_get_user_name ();
+        folder = ibus_get_socket_folder ();
 
         if (hostname[0] == '\0')
             hostname = "unix";
 
         path = g_strdup_printf (
-            "/tmp/ibus-%s/ibus-%s-%s",
-            username, hostname, displaynumber);
+            "%s/ibus-%s-%s",
+            folder, hostname, displaynumber);
         g_free (display);
     }
     return path;
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);
diff --git a/src/ibustypes.h b/src/ibustypes.h
index d2f15ba..2f7c0bf 100644
--- a/src/ibustypes.h
+++ b/src/ibustypes.h
@@ -69,11 +69,13 @@ typedef enum
     IBUS_BUTTON5_MASK  = 1 << 12,
 
     /* The next few modifiers are used by XKB, so we skip to the end.
-     * Bits 15 - 24 are currently unused. Bit 29 is used internally.
+     * Bits 15 - 23 are currently unused. Bit 29 is used internally.
      */
 
-    /* forward mask */
+    /* ibus mask */
+    IBUS_HANDLED_MASK  = 1 << 24,
     IBUS_FORWARD_MASK  = 1 << 25,
+    IBUS_IGNORED_MASK  = IBUS_FORWARD_MASK,
 
     IBUS_SUPER_MASK    = 1 << 26,
     IBUS_HYPER_MASK    = 1 << 27,