Blob Blame History Raw
From ffd69683443c56910e6db6d4526992a92c222275 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 18 Feb 2014 17:36:45 +0900
Subject: [PATCH] Fixed deprecated GtkHBox, GtkVBox and GtkStock since GTK+
 3.10.

---
 po/ibus-anthy.pot      | 154 +++++++++++++++++++++-----------
 setup/python2/main.py  |  14 +--
 setup/python2/setup.ui | 237 +++++++++++++++++++++++++------------------------
 setup/python3/main.py  |  10 +--
 setup/python3/setup.ui | 237 +++++++++++++++++++++++++------------------------
 5 files changed, 361 insertions(+), 291 deletions(-)

diff --git a/setup/python2/main.py b/setup/python2/main.py
index 98486ad..7c403b8 100644
--- a/setup/python2/main.py
+++ b/setup/python2/main.py
@@ -4,8 +4,8 @@
 #
 # Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
 # Copyright (c) 2009 Hideaki ABE <abe.sendai@gmail.com>
-# Copyright (c) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2013 Red Hat, Inc.
+# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2014 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -1416,14 +1416,14 @@ class AnthySetup(object):
             dlg = Gtk.FileChooserDialog(title=_("Open Dictionary File"),
                                         parent=self.__builder.get_object('main'),
                                         action=Gtk.FileChooserAction.OPEN,
-                                        buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
-                                                 Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
+                                        buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                                                 _("_Open"), Gtk.ResponseType.OK))
         if Gtk.Buildable.get_name(widget) == 'dict:btn_edit':
             dlg = Gtk.Dialog(title=_("Edit Dictionary File"),
                              parent=self.__builder.get_object('main'),
                              flags=Gtk.DialogFlags.MODAL,
-                             buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
-                                      Gtk.STOCK_OK, Gtk.ResponseType.OK))
+                             buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                                      _("_OK"), Gtk.ResponseType.OK))
 
         vbox = self.__builder.get_object('dict:add_extra_vbox')
         if Gtk.Buildable.get_name(widget) == 'dict:btn_add':
@@ -1518,7 +1518,7 @@ class AnthySetup(object):
         dlg = Gtk.Dialog(title=_("View Dictionary File"),
                          parent=self.__builder.get_object('main'),
                          flags=Gtk.DialogFlags.MODAL,
-                         buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK))
+                         buttons=(_("_OK"), Gtk.ResponseType.OK))
         buffer = Gtk.TextBuffer()
         buffer.set_text (lines)
         text_view = Gtk.TextView.new_with_buffer(buffer)
diff --git a/setup/python2/setup.ui b/setup/python2/setup.ui
index d9ec626..dc5e7e1 100644
--- a/setup/python2/setup.ui
+++ b/setup/python2/setup.ui
@@ -195,16 +195,18 @@
     <property name="type_hint">dialog</property>
     <signal handler="on_main_delete" name="delete_event"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <child>
           <object class="GtkNotebook" id="notebook1">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="border_width">6</property>
             <child>
-              <object class="GtkVBox" id="vbox1">
+              <object class="GtkBox" id="vbox1">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">8</property>
                 <child>
                   <object class="GtkFrame" id="frame11">
@@ -355,8 +357,9 @@
                         <property name="bottom_padding">8</property>
                         <property name="left_padding">12</property>
                         <child>
-                          <object class="GtkVBox" id="vbox12">
+                          <object class="GtkBox" id="vbox12">
                             <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
                             <property name="border_width">4</property>
                             <property name="spacing">4</property>
                             <child>
@@ -409,8 +412,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox2">
+              <object class="GtkBox" id="vbox2">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">8</property>
                 <child>
                   <object class="GtkFrame" id="frame21">
@@ -637,8 +641,9 @@
                             <property name="column_spacing">8</property>
                             <property name="row_spacing">4</property>
                             <child>
-                              <object class="GtkHBox" id="hbox4">
+                              <object class="GtkBox" id="hbox4">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkLabel" id="label109">
@@ -773,13 +778,15 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox3">
+              <object class="GtkBox" id="vbox3">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">4</property>
                 <property name="spacing">4</property>
                 <child>
-                  <object class="GtkHBox" id="hbox1">
+                  <object class="GtkBox" id="hbox1">
                     <property name="visible">True</property>
+                    <property name="orientation">horizontal</property>
                     <property name="spacing">8</property>
                     <child>
                       <object class="GtkLabel" id="label21">
@@ -828,6 +835,7 @@
                     <property name="hscrollbar_policy">automatic</property>
                     <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
+                    <property name="height_request">300</property>
                     <child>
                       <object class="GtkTreeView" id="shortcut">
                         <property name="visible">True</property>
@@ -843,53 +851,20 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHButtonBox" id="hbuttonbox31">
+                  <object class="GtkButtonBox" id="hbuttonbox31">
                     <property name="visible">True</property>
+                    <property name="orientation">horizontal</property>
                     <property name="spacing">4</property>
                     <property name="layout_style">end</property>
                     <child>
                       <object class="GtkButton" id="btn_default">
+                        <property name="label" translatable="yes">De_fault</property>
+                        <property name="use_underline">True</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
                         <signal handler="on_btn_default_clicked" name="clicked"/>
-                        <child>
-                          <object class="GtkAlignment" id="alignment31">
-                            <property name="visible">True</property>
-                            <property name="xscale">0</property>
-                            <property name="yscale">0</property>
-                            <child>
-                              <object class="GtkHBox" id="hbox5">
-                                <property name="visible">True</property>
-                                <property name="spacing">2</property>
-                                <child>
-                                  <object class="GtkImage" id="image1">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-undo</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="label27">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">De_fault</property>
-                                    <property name="use_underline">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -899,12 +874,12 @@
                     </child>
                     <child>
                       <object class="GtkButton" id="btn_edit">
-                        <property name="label">gtk-edit</property>
+                        <property name="label" translatable="yes">_Edit</property>
+                        <property name="use_underline">True</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
-                        <property name="use_stock">True</property>
                         <signal handler="on_btn_edit_clicked" name="clicked"/>
                       </object>
                       <packing>
@@ -1352,8 +1327,9 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox51">
+                              <object class="GtkBox" id="hbox51">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkLabel" id="label30">
@@ -1393,13 +1369,14 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox52">
+                              <object class="GtkBox" id="hbox52">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkImage" id="image2">
                                     <property name="visible">True</property>
-                                    <property name="stock">gtk-dialog-info</property>
+                                    <property name="icon_name">dialog-information</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1429,8 +1406,9 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox11">
+                              <object class="GtkBox" id="hbox11">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkLabel" id="label33">
@@ -1471,13 +1449,14 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox53">
+                              <object class="GtkBox" id="hbox53">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkImage" id="image4">
                                     <property name="visible">True</property>
-                                    <property name="stock">gtk-dialog-info</property>
+                                    <property name="icon_name">dialog-information</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1605,8 +1584,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox6">
+              <object class="GtkBox" id="vbox6">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">8</property>
                 <property name="spacing">4</property>
                 <child>
@@ -1620,8 +1600,9 @@
                         <property name="top_padding">4</property>
                         <property name="left_padding">0</property>
                         <child>
-                          <object class="GtkVBox" id="vbox61">
+                          <object class="GtkBox" id="vbox61">
                             <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
                             <property name="border_width">4</property>
                             <property name="spacing">4</property>
                             <child>
@@ -1777,8 +1758,9 @@
                         <property name="top_padding">4</property>
                         <property name="left_padding">0</property>
                         <child>
-                          <object class="GtkVBox" id="vbox71">
+                          <object class="GtkBox" id="vbox71">
                             <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
                             <property name="border_width">4</property>
                             <property name="spacing">4</property>
                             <child>
@@ -1801,8 +1783,9 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHButtonBox" id="hbuttonbox71">
+                              <object class="GtkButtonBox" id="hbuttonbox71">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">4</property>
                                 <property name="layout_style">end</property>
                                 <child>
@@ -1823,12 +1806,12 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_add">
-                                    <property name="label">gtk-add</property>
+                                    <property name="label" translatable="yes">_Add</property>
+                                    <property name="use_underline">True</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_add_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1839,12 +1822,12 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_edit">
-                                    <property name="label">gtk-edit</property>
+                                    <property name="label" translatable="yes">_Edit</property>
+                                    <property name="use_underline">True</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_add_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1855,12 +1838,12 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_delete">
-                                    <property name="label">gtk-delete</property>
+                                    <property name="label" translatable="yes">_Delete</property>
+                                    <property name="use_underline">True</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_delete_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1877,19 +1860,20 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHButtonBox" id="hbuttonbox72">
+                              <object class="GtkButtonBox" id="hbuttonbox72">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">4</property>
                                 <property name="layout_style">end</property>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_up">
-                                    <property name="label">gtk-go-up</property>
+                                    <property name="label" translatable="yes">_Up</property>
+                                    <property name="use_underline">True</property>
                                     <property name="tooltip_text" translatable="yes">You can change the order on language bar</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_order_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1900,13 +1884,13 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_down">
-                                    <property name="label">gtk-go-down</property>
+                                    <property name="label" translatable="yes">_Down</property>
+                                    <property name="use_underline">True</property>
                                     <property name="tooltip_text" translatable="yes">You can change the order on language bar</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_order_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1953,7 +1937,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="about_vbox">
+              <object class="GtkBox" id="about_vbox">
                 <property name="visible">True</property>
                 <property name="orientation">vertical</property>
                 <property name="border_width">10</property>
@@ -1979,18 +1963,19 @@
           </packing>
         </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="btn_apply">
-                <property name="label">gtk-apply</property>
+                <property name="label" translatable="yes">_Apply</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
                 <signal handler="on_btn_apply_clicked" name="clicked"/>
               </object>
               <packing>
@@ -2001,12 +1986,12 @@
             </child>
             <child>
               <object class="GtkButton" id="btn_cancel">
-                <property name="label">gtk-cancel</property>
+                <property name="label" translatable="yes">_Cancel</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
                 <signal handler="on_btn_cancel_clicked" name="clicked"/>
               </object>
               <packing>
@@ -2017,12 +2002,12 @@
             </child>
             <child>
               <object class="GtkButton" id="btn_ok">
-                <property name="label">gtk-ok</property>
+                <property name="label" translatable="yes">_OK</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
                 <signal handler="on_btn_ok_clicked" name="clicked"/>
               </object>
               <packing>
@@ -2053,11 +2038,13 @@
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
+      <object class="GtkBox" id="dialog-vbox2">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <child>
-          <object class="GtkVBox" id="vbox101">
+          <object class="GtkBox" id="vbox101">
             <property name="visible">True</property>
+            <property name="orientation">vertical</property>
             <property name="border_width">5</property>
             <property name="spacing">6</property>
             <child>
@@ -2068,6 +2055,7 @@
                 <property name="hscrollbar_policy">automatic</property>
                 <property name="vscrollbar_policy">automatic</property>
                 <property name="shadow_type">in</property>
+                <property name="height_request">150</property>
                 <child>
                   <object class="GtkTreeView" id="es:treeview">
                     <property name="visible">True</property>
@@ -2081,8 +2069,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox101">
+              <object class="GtkBox" id="hbox101">
                 <property name="visible">True</property>
+                <property name="orientation">horizontal</property>
                 <property name="spacing">8</property>
                 <child>
                   <object class="GtkLabel" id="label1001">
@@ -2128,8 +2117,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox102">
+              <object class="GtkBox" id="hbox102">
                 <property name="visible">True</property>
+                <property name="orientation">horizontal</property>
                 <property name="spacing">8</property>
                 <child>
                   <object class="GtkLabel" id="label1002">
@@ -2143,8 +2133,9 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHBox" id="hbox103">
+                  <object class="GtkBox" id="hbox103">
                     <property name="visible">True</property>
+                    <property name="orientation">horizontal</property>
                     <child>
                       <object class="GtkCheckButton" id="es:checkbutton_alt">
                         <property name="label" translatable="yes">A_lternate</property>
@@ -2197,19 +2188,20 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHButtonBox" id="hbuttonbox101">
+              <object class="GtkButtonBox" id="hbuttonbox101">
                 <property name="visible">True</property>
+                <property name="orientation">horizontal</property>
                 <property name="spacing">6</property>
                 <property name="layout_style">end</property>
                 <child>
                   <object class="GtkButton" id="es:button_add">
-                    <property name="label">gtk-add</property>
+                    <property name="label" translatable="yes">_Add</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                     <signal handler="on_es_button_add_clicked" name="clicked"/>
                   </object>
                   <packing>
@@ -2220,12 +2212,12 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="es:button_refresh">
-                    <property name="label">gtk-refresh</property>
+                    <property name="label" translatable="yes">_Refresh</property>
+                    <property name="use_underline">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                     <signal handler="on_es_button_refresh_clicked" name="clicked"/>
                   </object>
                   <packing>
@@ -2236,13 +2228,13 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="es:button_del">
-                    <property name="label">gtk-delete</property>
+                    <property name="label" translatable="yes">_Delete</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                     <signal handler="on_es_button_del_clicked" name="clicked"/>
                   </object>
                   <packing>
@@ -2264,17 +2256,18 @@
           </packing>
         </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
+          <object class="GtkButtonBox" id="dialog-action_area2">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="cancelbutton101">
-                <property name="label">gtk-cancel</property>
+                <property name="label" translatable="yes">_Cancel</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -2284,12 +2277,12 @@
             </child>
             <child>
               <object class="GtkButton" id="okbutton101">
-                <property name="label">gtk-ok</property>
+                <property name="label" translatable="yes">_OK</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -2318,13 +2311,15 @@
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox3">
+      <object class="GtkBox" id="dialog-vbox3">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="border_width">5</property>
         <property name="spacing">6</property>
         <child>
-          <object class="GtkHBox" id="hbox_for_combobox_custom_key_table">
+          <object class="GtkBox" id="hbox_for_combobox_custom_key_table">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="border_width">5</property>
             <property name="spacing">6</property>
             <child>
@@ -2359,8 +2354,9 @@
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox301">
+          <object class="GtkBox" id="hbox301">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="border_width">5</property>
             <property name="spacing">6</property>
             <child>
@@ -2371,6 +2367,8 @@
                 <property name="hscrollbar_policy">automatic</property>
                 <property name="vscrollbar_policy">automatic</property>
                 <property name="shadow_type">in</property>
+                <property name="width_request">250</property>
+                <property name="height_request">300</property>
                 <child>
                   <object class="GtkTreeView" id="treeview_custom_key_table">
                     <property name="visible">True</property>
@@ -2383,8 +2381,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVButtonBox" id="vbutton301">
+              <object class="GtkButtonBox" id="vbutton301">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="layout_style">start</property>
                 <property name="spacing">6</property>
                 <child>
@@ -2470,12 +2469,12 @@
                 <child>
                   <object class="GtkButton" id="button_add_custom_key">
                     <property name="visible">True</property>
-                    <property name="label">gtk-add</property>
+                    <property name="label" translatable="yes">_Add</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                   </object>
                   <packing>
                     <property name="position">8</property>
@@ -2484,12 +2483,12 @@
                 <child>
                   <object class="GtkButton" id="button_remove_custom_key">
                     <property name="visible">True</property>
-                    <property name="label">gtk-remove</property>
+                    <property name="label" translatable="yes">_Remove</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                   </object>
                   <packing>
                     <property name="position">9</property>
@@ -2508,16 +2507,17 @@
           </packing>
         </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area3">
+          <object class="GtkButtonBox" id="dialog-action_area3">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="closebutton301">
                 <property name="visible">True</property>
-                <property name="label">gtk-close</property>
+                <property name="label" translatable="yes">_Close</property>
+                <property name="use_underline">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
-                <property name="use_stock">True</property>
                 <property name="receives_default">True</property>
               </object>
               <packing>
@@ -2551,12 +2551,14 @@
     <property name="text">Confirmation</property>
     <property name="secondary_text">You are about to close the setup dialog, is that OK?</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox6">
+      <object class="GtkBox" id="dialog-vbox6">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area6">
+          <object class="GtkButtonBox" id="dialog-action_area6">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2586,12 +2588,14 @@
     <property name="text">Notice!</property>
     <property name="secondary_text">You are about to close the setup dialog without saving your changes, is that OK?</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox7">
+      <object class="GtkBox" id="dialog-vbox7">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area7">
+          <object class="GtkButtonBox" id="dialog-action_area7">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2622,12 +2626,14 @@
     <signal handler="on_key_input_dialog_key_press_event" name="key_press_event"/>
     <signal handler="on_key_input_dialog_key_release_event" name="key_release_event"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox8">
+      <object class="GtkBox" id="dialog-vbox8">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area8">
+          <object class="GtkButtonBox" id="dialog-action_area8">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2657,12 +2663,14 @@
     <property name="text">Invalid keysym</property>
     <property name="secondary_text">This keysym is not valid</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox9">
+      <object class="GtkBox" id="dialog-vbox9">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area9">
+          <object class="GtkButtonBox" id="dialog-action_area9">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2680,8 +2688,9 @@
       </object>
     </child>
   </object>
-  <object class="GtkVBox" id="dict:add_extra_vbox">
+  <object class="GtkBox" id="dict:add_extra_vbox">
     <property name="visible">True</property>
+    <property name="orientation">vertical</property>
     <property name="no_show_all">True</property>
     <property name="spacing">10</property>
     <child>
@@ -2800,8 +2809,8 @@
     <property name="program-name">IBus-Anthy</property>
     <property name="copyright">Copyright © 2007–2008 Peng Huang
 Copyright © 2009 Hideaki ABE
-Copyright © 2009–2013 Takao Fujiwara
-Copyright © 2007–2013 Red Hat, Inc.</property>
+Copyright © 2009–2014 Takao Fujiwara
+Copyright © 2007–2014 Red Hat, Inc.</property>
     <property name="comments" translatable="yes">The Anthy engine for the IBus input platform</property>
     <property name="license">GPL</property>
     <property name="website">http://code.google.com/p/ibus/</property>
diff --git a/setup/python3/main.py b/setup/python3/main.py
index fec03a6..2073f59 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -1410,14 +1410,14 @@ class AnthySetup(object):
             dlg = Gtk.FileChooserDialog(title=_("Open Dictionary File"),
                                         parent=self.__builder.get_object('main'),
                                         action=Gtk.FileChooserAction.OPEN,
-                                        buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
-                                                 Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
+                                        buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                                                 _("_Open"), Gtk.ResponseType.OK))
         if Gtk.Buildable.get_name(widget) == 'dict:btn_edit':
             dlg = Gtk.Dialog(title=_("Edit Dictionary File"),
                              parent=self.__builder.get_object('main'),
                              flags=Gtk.DialogFlags.MODAL,
-                             buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
-                                      Gtk.STOCK_OK, Gtk.ResponseType.OK))
+                             buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                                      _("_OK"), Gtk.ResponseType.OK))
 
         vbox = self.__builder.get_object('dict:add_extra_vbox')
         if Gtk.Buildable.get_name(widget) == 'dict:btn_add':
@@ -1512,7 +1512,7 @@ class AnthySetup(object):
         dlg = Gtk.Dialog(title=_("View Dictionary File"),
                          parent=self.__builder.get_object('main'),
                          flags=Gtk.DialogFlags.MODAL,
-                         buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK))
+                         buttons=(_("_OK"), Gtk.ResponseType.OK))
         buffer = Gtk.TextBuffer()
         buffer.set_text (lines)
         text_view = Gtk.TextView.new_with_buffer(buffer)
diff --git a/setup/python3/setup.ui b/setup/python3/setup.ui
index d9ec626..dc5e7e1 100644
--- a/setup/python3/setup.ui
+++ b/setup/python3/setup.ui
@@ -195,16 +195,18 @@
     <property name="type_hint">dialog</property>
     <signal handler="on_main_delete" name="delete_event"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <child>
           <object class="GtkNotebook" id="notebook1">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="border_width">6</property>
             <child>
-              <object class="GtkVBox" id="vbox1">
+              <object class="GtkBox" id="vbox1">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">8</property>
                 <child>
                   <object class="GtkFrame" id="frame11">
@@ -355,8 +357,9 @@
                         <property name="bottom_padding">8</property>
                         <property name="left_padding">12</property>
                         <child>
-                          <object class="GtkVBox" id="vbox12">
+                          <object class="GtkBox" id="vbox12">
                             <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
                             <property name="border_width">4</property>
                             <property name="spacing">4</property>
                             <child>
@@ -409,8 +412,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox2">
+              <object class="GtkBox" id="vbox2">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">8</property>
                 <child>
                   <object class="GtkFrame" id="frame21">
@@ -637,8 +641,9 @@
                             <property name="column_spacing">8</property>
                             <property name="row_spacing">4</property>
                             <child>
-                              <object class="GtkHBox" id="hbox4">
+                              <object class="GtkBox" id="hbox4">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkLabel" id="label109">
@@ -773,13 +778,15 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox3">
+              <object class="GtkBox" id="vbox3">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">4</property>
                 <property name="spacing">4</property>
                 <child>
-                  <object class="GtkHBox" id="hbox1">
+                  <object class="GtkBox" id="hbox1">
                     <property name="visible">True</property>
+                    <property name="orientation">horizontal</property>
                     <property name="spacing">8</property>
                     <child>
                       <object class="GtkLabel" id="label21">
@@ -828,6 +835,7 @@
                     <property name="hscrollbar_policy">automatic</property>
                     <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">in</property>
+                    <property name="height_request">300</property>
                     <child>
                       <object class="GtkTreeView" id="shortcut">
                         <property name="visible">True</property>
@@ -843,53 +851,20 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHButtonBox" id="hbuttonbox31">
+                  <object class="GtkButtonBox" id="hbuttonbox31">
                     <property name="visible">True</property>
+                    <property name="orientation">horizontal</property>
                     <property name="spacing">4</property>
                     <property name="layout_style">end</property>
                     <child>
                       <object class="GtkButton" id="btn_default">
+                        <property name="label" translatable="yes">De_fault</property>
+                        <property name="use_underline">True</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
                         <signal handler="on_btn_default_clicked" name="clicked"/>
-                        <child>
-                          <object class="GtkAlignment" id="alignment31">
-                            <property name="visible">True</property>
-                            <property name="xscale">0</property>
-                            <property name="yscale">0</property>
-                            <child>
-                              <object class="GtkHBox" id="hbox5">
-                                <property name="visible">True</property>
-                                <property name="spacing">2</property>
-                                <child>
-                                  <object class="GtkImage" id="image1">
-                                    <property name="visible">True</property>
-                                    <property name="stock">gtk-undo</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="label27">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">De_fault</property>
-                                    <property name="use_underline">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -899,12 +874,12 @@
                     </child>
                     <child>
                       <object class="GtkButton" id="btn_edit">
-                        <property name="label">gtk-edit</property>
+                        <property name="label" translatable="yes">_Edit</property>
+                        <property name="use_underline">True</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
-                        <property name="use_stock">True</property>
                         <signal handler="on_btn_edit_clicked" name="clicked"/>
                       </object>
                       <packing>
@@ -1352,8 +1327,9 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox51">
+                              <object class="GtkBox" id="hbox51">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkLabel" id="label30">
@@ -1393,13 +1369,14 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox52">
+                              <object class="GtkBox" id="hbox52">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkImage" id="image2">
                                     <property name="visible">True</property>
-                                    <property name="stock">gtk-dialog-info</property>
+                                    <property name="icon_name">dialog-information</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1429,8 +1406,9 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox11">
+                              <object class="GtkBox" id="hbox11">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkLabel" id="label33">
@@ -1471,13 +1449,14 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox53">
+                              <object class="GtkBox" id="hbox53">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">8</property>
                                 <child>
                                   <object class="GtkImage" id="image4">
                                     <property name="visible">True</property>
-                                    <property name="stock">gtk-dialog-info</property>
+                                    <property name="icon_name">dialog-information</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -1605,8 +1584,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox6">
+              <object class="GtkBox" id="vbox6">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="border_width">8</property>
                 <property name="spacing">4</property>
                 <child>
@@ -1620,8 +1600,9 @@
                         <property name="top_padding">4</property>
                         <property name="left_padding">0</property>
                         <child>
-                          <object class="GtkVBox" id="vbox61">
+                          <object class="GtkBox" id="vbox61">
                             <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
                             <property name="border_width">4</property>
                             <property name="spacing">4</property>
                             <child>
@@ -1777,8 +1758,9 @@
                         <property name="top_padding">4</property>
                         <property name="left_padding">0</property>
                         <child>
-                          <object class="GtkVBox" id="vbox71">
+                          <object class="GtkBox" id="vbox71">
                             <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
                             <property name="border_width">4</property>
                             <property name="spacing">4</property>
                             <child>
@@ -1801,8 +1783,9 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHButtonBox" id="hbuttonbox71">
+                              <object class="GtkButtonBox" id="hbuttonbox71">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">4</property>
                                 <property name="layout_style">end</property>
                                 <child>
@@ -1823,12 +1806,12 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_add">
-                                    <property name="label">gtk-add</property>
+                                    <property name="label" translatable="yes">_Add</property>
+                                    <property name="use_underline">True</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_add_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1839,12 +1822,12 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_edit">
-                                    <property name="label">gtk-edit</property>
+                                    <property name="label" translatable="yes">_Edit</property>
+                                    <property name="use_underline">True</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_add_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1855,12 +1838,12 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_delete">
-                                    <property name="label">gtk-delete</property>
+                                    <property name="label" translatable="yes">_Delete</property>
+                                    <property name="use_underline">True</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_delete_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1877,19 +1860,20 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHButtonBox" id="hbuttonbox72">
+                              <object class="GtkButtonBox" id="hbuttonbox72">
                                 <property name="visible">True</property>
+                                <property name="orientation">horizontal</property>
                                 <property name="spacing">4</property>
                                 <property name="layout_style">end</property>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_up">
-                                    <property name="label">gtk-go-up</property>
+                                    <property name="label" translatable="yes">_Up</property>
+                                    <property name="use_underline">True</property>
                                     <property name="tooltip_text" translatable="yes">You can change the order on language bar</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_order_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1900,13 +1884,13 @@
                                 </child>
                                 <child>
                                   <object class="GtkButton" id="dict:btn_down">
-                                    <property name="label">gtk-go-down</property>
+                                    <property name="label" translatable="yes">_Down</property>
+                                    <property name="use_underline">True</property>
                                     <property name="tooltip_text" translatable="yes">You can change the order on language bar</property>
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="can_default">True</property>
                                     <property name="receives_default">False</property>
-                                    <property name="use_stock">True</property>
                                     <signal handler="on_btn_dict_order_clicked" name="clicked"/>
                                   </object>
                                   <packing>
@@ -1953,7 +1937,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="about_vbox">
+              <object class="GtkBox" id="about_vbox">
                 <property name="visible">True</property>
                 <property name="orientation">vertical</property>
                 <property name="border_width">10</property>
@@ -1979,18 +1963,19 @@
           </packing>
         </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="btn_apply">
-                <property name="label">gtk-apply</property>
+                <property name="label" translatable="yes">_Apply</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
                 <signal handler="on_btn_apply_clicked" name="clicked"/>
               </object>
               <packing>
@@ -2001,12 +1986,12 @@
             </child>
             <child>
               <object class="GtkButton" id="btn_cancel">
-                <property name="label">gtk-cancel</property>
+                <property name="label" translatable="yes">_Cancel</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
                 <signal handler="on_btn_cancel_clicked" name="clicked"/>
               </object>
               <packing>
@@ -2017,12 +2002,12 @@
             </child>
             <child>
               <object class="GtkButton" id="btn_ok">
-                <property name="label">gtk-ok</property>
+                <property name="label" translatable="yes">_OK</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
                 <signal handler="on_btn_ok_clicked" name="clicked"/>
               </object>
               <packing>
@@ -2053,11 +2038,13 @@
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
+      <object class="GtkBox" id="dialog-vbox2">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <child>
-          <object class="GtkVBox" id="vbox101">
+          <object class="GtkBox" id="vbox101">
             <property name="visible">True</property>
+            <property name="orientation">vertical</property>
             <property name="border_width">5</property>
             <property name="spacing">6</property>
             <child>
@@ -2068,6 +2055,7 @@
                 <property name="hscrollbar_policy">automatic</property>
                 <property name="vscrollbar_policy">automatic</property>
                 <property name="shadow_type">in</property>
+                <property name="height_request">150</property>
                 <child>
                   <object class="GtkTreeView" id="es:treeview">
                     <property name="visible">True</property>
@@ -2081,8 +2069,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox101">
+              <object class="GtkBox" id="hbox101">
                 <property name="visible">True</property>
+                <property name="orientation">horizontal</property>
                 <property name="spacing">8</property>
                 <child>
                   <object class="GtkLabel" id="label1001">
@@ -2128,8 +2117,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="hbox102">
+              <object class="GtkBox" id="hbox102">
                 <property name="visible">True</property>
+                <property name="orientation">horizontal</property>
                 <property name="spacing">8</property>
                 <child>
                   <object class="GtkLabel" id="label1002">
@@ -2143,8 +2133,9 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHBox" id="hbox103">
+                  <object class="GtkBox" id="hbox103">
                     <property name="visible">True</property>
+                    <property name="orientation">horizontal</property>
                     <child>
                       <object class="GtkCheckButton" id="es:checkbutton_alt">
                         <property name="label" translatable="yes">A_lternate</property>
@@ -2197,19 +2188,20 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHButtonBox" id="hbuttonbox101">
+              <object class="GtkButtonBox" id="hbuttonbox101">
                 <property name="visible">True</property>
+                <property name="orientation">horizontal</property>
                 <property name="spacing">6</property>
                 <property name="layout_style">end</property>
                 <child>
                   <object class="GtkButton" id="es:button_add">
-                    <property name="label">gtk-add</property>
+                    <property name="label" translatable="yes">_Add</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                     <signal handler="on_es_button_add_clicked" name="clicked"/>
                   </object>
                   <packing>
@@ -2220,12 +2212,12 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="es:button_refresh">
-                    <property name="label">gtk-refresh</property>
+                    <property name="label" translatable="yes">_Refresh</property>
+                    <property name="use_underline">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                     <signal handler="on_es_button_refresh_clicked" name="clicked"/>
                   </object>
                   <packing>
@@ -2236,13 +2228,13 @@
                 </child>
                 <child>
                   <object class="GtkButton" id="es:button_del">
-                    <property name="label">gtk-delete</property>
+                    <property name="label" translatable="yes">_Delete</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                     <signal handler="on_es_button_del_clicked" name="clicked"/>
                   </object>
                   <packing>
@@ -2264,17 +2256,18 @@
           </packing>
         </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
+          <object class="GtkButtonBox" id="dialog-action_area2">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="cancelbutton101">
-                <property name="label">gtk-cancel</property>
+                <property name="label" translatable="yes">_Cancel</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -2284,12 +2277,12 @@
             </child>
             <child>
               <object class="GtkButton" id="okbutton101">
-                <property name="label">gtk-ok</property>
+                <property name="label" translatable="yes">_OK</property>
+                <property name="use_underline">True</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -2318,13 +2311,15 @@
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox3">
+      <object class="GtkBox" id="dialog-vbox3">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="border_width">5</property>
         <property name="spacing">6</property>
         <child>
-          <object class="GtkHBox" id="hbox_for_combobox_custom_key_table">
+          <object class="GtkBox" id="hbox_for_combobox_custom_key_table">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="border_width">5</property>
             <property name="spacing">6</property>
             <child>
@@ -2359,8 +2354,9 @@
           </packing>
         </child>
         <child>
-          <object class="GtkHBox" id="hbox301">
+          <object class="GtkBox" id="hbox301">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="border_width">5</property>
             <property name="spacing">6</property>
             <child>
@@ -2371,6 +2367,8 @@
                 <property name="hscrollbar_policy">automatic</property>
                 <property name="vscrollbar_policy">automatic</property>
                 <property name="shadow_type">in</property>
+                <property name="width_request">250</property>
+                <property name="height_request">300</property>
                 <child>
                   <object class="GtkTreeView" id="treeview_custom_key_table">
                     <property name="visible">True</property>
@@ -2383,8 +2381,9 @@
               </packing>
             </child>
             <child>
-              <object class="GtkVButtonBox" id="vbutton301">
+              <object class="GtkButtonBox" id="vbutton301">
                 <property name="visible">True</property>
+                <property name="orientation">vertical</property>
                 <property name="layout_style">start</property>
                 <property name="spacing">6</property>
                 <child>
@@ -2470,12 +2469,12 @@
                 <child>
                   <object class="GtkButton" id="button_add_custom_key">
                     <property name="visible">True</property>
-                    <property name="label">gtk-add</property>
+                    <property name="label" translatable="yes">_Add</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                   </object>
                   <packing>
                     <property name="position">8</property>
@@ -2484,12 +2483,12 @@
                 <child>
                   <object class="GtkButton" id="button_remove_custom_key">
                     <property name="visible">True</property>
-                    <property name="label">gtk-remove</property>
+                    <property name="label" translatable="yes">_Remove</property>
+                    <property name="use_underline">True</property>
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="can_default">True</property>
                     <property name="receives_default">False</property>
-                    <property name="use_stock">True</property>
                   </object>
                   <packing>
                     <property name="position">9</property>
@@ -2508,16 +2507,17 @@
           </packing>
         </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area3">
+          <object class="GtkButtonBox" id="dialog-action_area3">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="closebutton301">
                 <property name="visible">True</property>
-                <property name="label">gtk-close</property>
+                <property name="label" translatable="yes">_Close</property>
+                <property name="use_underline">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
-                <property name="use_stock">True</property>
                 <property name="receives_default">True</property>
               </object>
               <packing>
@@ -2551,12 +2551,14 @@
     <property name="text">Confirmation</property>
     <property name="secondary_text">You are about to close the setup dialog, is that OK?</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox6">
+      <object class="GtkBox" id="dialog-vbox6">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area6">
+          <object class="GtkButtonBox" id="dialog-action_area6">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2586,12 +2588,14 @@
     <property name="text">Notice!</property>
     <property name="secondary_text">You are about to close the setup dialog without saving your changes, is that OK?</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox7">
+      <object class="GtkBox" id="dialog-vbox7">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area7">
+          <object class="GtkButtonBox" id="dialog-action_area7">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2622,12 +2626,14 @@
     <signal handler="on_key_input_dialog_key_press_event" name="key_press_event"/>
     <signal handler="on_key_input_dialog_key_release_event" name="key_release_event"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox8">
+      <object class="GtkBox" id="dialog-vbox8">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area8">
+          <object class="GtkButtonBox" id="dialog-action_area8">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2657,12 +2663,14 @@
     <property name="text">Invalid keysym</property>
     <property name="secondary_text">This keysym is not valid</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox9">
+      <object class="GtkBox" id="dialog-vbox9">
         <property name="visible">True</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area9">
+          <object class="GtkButtonBox" id="dialog-action_area9">
             <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
             <property name="layout_style">end</property>
             <child>
               <placeholder/>
@@ -2680,8 +2688,9 @@
       </object>
     </child>
   </object>
-  <object class="GtkVBox" id="dict:add_extra_vbox">
+  <object class="GtkBox" id="dict:add_extra_vbox">
     <property name="visible">True</property>
+    <property name="orientation">vertical</property>
     <property name="no_show_all">True</property>
     <property name="spacing">10</property>
     <child>
@@ -2800,8 +2809,8 @@
     <property name="program-name">IBus-Anthy</property>
     <property name="copyright">Copyright © 2007–2008 Peng Huang
 Copyright © 2009 Hideaki ABE
-Copyright © 2009–2013 Takao Fujiwara
-Copyright © 2007–2013 Red Hat, Inc.</property>
+Copyright © 2009–2014 Takao Fujiwara
+Copyright © 2007–2014 Red Hat, Inc.</property>
     <property name="comments" translatable="yes">The Anthy engine for the IBus input platform</property>
     <property name="license">GPL</property>
     <property name="website">http://code.google.com/p/ibus/</property>
-- 
1.8.0

From c7caeaf8dc3aaaf5b1d546ffb418aae52b8905a4 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 16 Jul 2014 14:57:07 +0900
Subject: [PATCH] Fixed deprecated warnings with python3-gobject 3.13.3.

python3-gobject adds several warnings in gi/overrides/Gtk.py

/usr/share/ibus-anthy/setup/main.py:1519: PyGTKDeprecationWarning:
The "buttons" argument must be a Gtk.ButtonsType enum value. Please
use the "add_buttons" method for adding buttons.
See: https://wiki.gnome.org/PyGObject/InitializerDeprecations

/usr/lib64/python3.4/site-packages/gi/overrides/Gtk.py:537:
PyGTKDeprecationWarning: The keyword(s) "parent" have been deprecated
in favor of "transient_for" respectively.
See: https://wiki.gnome.org/PyGObject/InitializerDeprecations
---
 setup/python2/main.py | 52 +++++++++++++++++++++++++++++++--------------------
 setup/python3/main.py | 52 +++++++++++++++++++++++++++++++--------------------
 2 files changed, 64 insertions(+), 40 deletions(-)

diff --git a/setup/python2/main.py b/setup/python2/main.py
index 7c403b8..424e703 100644
--- a/setup/python2/main.py
+++ b/setup/python2/main.py
@@ -325,11 +325,11 @@ class AnthySetup(object):
         return (section, key)
 
     def __run_message_dialog(self, message, type=Gtk.MessageType.INFO):
-        dlg = Gtk.MessageDialog(parent=self.__builder.get_object('main'),
-                                flags=Gtk.DialogFlags.MODAL,
-                                message_type=type,
-                                buttons=Gtk.ButtonsType.OK,
-                                message_format=message)
+        dlg = Gtk.MessageDialog(
+                transient_for=self.__builder.get_object('main'),
+                message_type=type,
+                buttons=Gtk.ButtonsType.OK,
+                text=message)
         dlg.run()
         dlg.destroy()
 
@@ -420,6 +420,7 @@ class AnthySetup(object):
         for key, value in sorted(rule.items(), \
             cmp = self.__japanese_tuple_sort):
             ls.append(['romaji', key, value])
+        tv.set_model(None)
         tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")),
                                             Gtk.CellRendererText(), text=1))
         tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")),
@@ -455,6 +456,7 @@ class AnthySetup(object):
         for key, value in sorted(rule.items(), \
             cmp = self.__japanese_tuple_sort):
             ls.append(['kana', key, value])
+        tv.set_model(None)
         tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")),
                                             Gtk.CellRendererText(), text=1))
         tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")),
@@ -502,6 +504,7 @@ class AnthySetup(object):
         for key, value in sorted(rule.items(), \
             cmp = self.__japanese_thumb_sort):
             ls.append(['thumb', key, value[0], value[2], value[1]])
+        tv.set_model(None)
         tv.append_column(Gtk.TreeViewColumn(_(_("Input")),
                                             Gtk.CellRendererText(), text=1))
         tv.append_column(Gtk.TreeViewColumn(_(_("Single")),
@@ -582,9 +585,10 @@ class AnthySetup(object):
         combobox.clear()
         combobox.disconnect_by_func(self.on_cb_custom_key_table_changed)
 
-    def __run_dialog_custom_key_table(self, mode):
+    def __run_dialog_custom_key_table(self, widget, mode):
         prefs = self.prefs
         dlg = self.__builder.get_object('dialog_custom_key_table')
+        dlg.set_transient_for(widget.get_toplevel())
         label = self.__builder.get_object('label_custom_key_table')
         label_output = self.__builder.get_object('label_output_custom_key')
         list_labels = []
@@ -1134,6 +1138,7 @@ class AnthySetup(object):
             Gtk.main_quit()
             return True
         dlg = self.__builder.get_object('quit_check')
+        dlg.set_transient_for(widget.get_toplevel())
         dlg.set_markup('<big><b>%s</b></big>' % _("Confirmation"))
         dlg.format_secondary_text(
                 _("You are about to close the setup dialog, is that OK?"))
@@ -1150,6 +1155,7 @@ class AnthySetup(object):
             Gtk.main_quit()
             return True
         dlg = self.__builder.get_object('quit_check_without_save')
+        dlg.set_transient_for(widget.get_toplevel())
         dlg.set_markup('<big><b>%s</b></big>' % _("Notice!"))
         dlg.format_secondary_text(
                 _("You are about to close the setup dialog without saving your changes, is that OK?"))
@@ -1225,6 +1231,7 @@ class AnthySetup(object):
         for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']:
             self.__builder.get_object(w).set_active(False)
         dlg = self.__builder.get_object('edit_shortcut')
+        dlg.set_transient_for(widget.get_toplevel())
         id = dlg.run()
         dlg.hide()
         if id == Gtk.ResponseType.OK:
@@ -1245,13 +1252,13 @@ class AnthySetup(object):
             self.__builder.get_object('btn_apply').set_sensitive(True)
 
     def on_btn_romaji_custom_table_clicked(self, widget):
-        self.__run_dialog_custom_key_table('romaji')
+        self.__run_dialog_custom_key_table(widget, 'romaji')
 
     def on_btn_kana_custom_table_clicked(self, widget):
-        self.__run_dialog_custom_key_table('kana')
+        self.__run_dialog_custom_key_table(widget, 'kana')
 
     def on_btn_thumb_custom_table_clicked(self, widget):
-        self.__run_dialog_custom_key_table('thumb')
+        self.__run_dialog_custom_key_table(widget, 'thumb')
 
     def on_btn_add_custom_key(self, widget, user_data):
         prefs = self.prefs
@@ -1380,6 +1387,7 @@ class AnthySetup(object):
         for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']:
             self.__builder.get_object(w).set_active(False)
         dlg = self.__builder.get_object('edit_shortcut')
+        dlg.set_transient_for(widget.get_toplevel())
         id = dlg.run()
         dlg.hide()
         self.__builder.get_object('es:button_add').show()
@@ -1414,16 +1422,17 @@ class AnthySetup(object):
 
         if Gtk.Buildable.get_name(widget) == 'dict:btn_add':
             dlg = Gtk.FileChooserDialog(title=_("Open Dictionary File"),
-                                        parent=self.__builder.get_object('main'),
-                                        action=Gtk.FileChooserAction.OPEN,
-                                        buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
-                                                 _("_Open"), Gtk.ResponseType.OK))
+                                        transient_for=widget.get_toplevel(),
+                                        action=Gtk.FileChooserAction.OPEN)
+            buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                     _("_Open"), Gtk.ResponseType.OK)
+            dlg.add_buttons(*buttons)
         if Gtk.Buildable.get_name(widget) == 'dict:btn_edit':
             dlg = Gtk.Dialog(title=_("Edit Dictionary File"),
-                             parent=self.__builder.get_object('main'),
-                             flags=Gtk.DialogFlags.MODAL,
-                             buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
-                                      _("_OK"), Gtk.ResponseType.OK))
+                             transient_for=widget.get_toplevel())
+            buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                     _("_OK"), Gtk.ResponseType.OK)
+            dlg.add_buttons(*buttons)
 
         vbox = self.__builder.get_object('dict:add_extra_vbox')
         if Gtk.Buildable.get_name(widget) == 'dict:btn_add':
@@ -1516,9 +1525,9 @@ class AnthySetup(object):
             lines = unicode(lines, encoding).encode('utf-8')
 
         dlg = Gtk.Dialog(title=_("View Dictionary File"),
-                         parent=self.__builder.get_object('main'),
-                         flags=Gtk.DialogFlags.MODAL,
-                         buttons=(_("_OK"), Gtk.ResponseType.OK))
+                         transient_for=widget.get_toplevel())
+        buttons=(_("_OK"), Gtk.ResponseType.OK)
+        dlg.add_buttons(*buttons)
         buffer = Gtk.TextBuffer()
         buffer.set_text (lines)
         text_view = Gtk.TextView.new_with_buffer(buffer)
@@ -1666,6 +1675,7 @@ class AnthySetup(object):
 
     def on_es_button_run_input_clicked(self, widget):
         dlg = self.__builder.get_object('key_input_dialog')
+        dlg.set_transient_for(widget.get_toplevel())
         dlg.set_markup('<big><b>%s</b></big>' % _("Please press a key (or a key combination)"))
         dlg.format_secondary_text(_("The dialog will be closed when the key is released"))
         id = dlg.run()
@@ -1686,6 +1696,7 @@ class AnthySetup(object):
         s = self.__builder.get_object('es:entry').get_text()
         if not s or not IBus.keyval_from_name(s):
             dlg = self.__builder.get_object('invalid_keysym')
+            dlg.set_transient_for(widget.get_toplevel())
             dlg.set_markup('<big><b>%s</b></big>' % _("Invalid keysym"))
             dlg.format_secondary_text(_("This keysym is not valid"))
             dlg.run()
@@ -1706,6 +1717,7 @@ class AnthySetup(object):
         s = self.__builder.get_object('es:entry').get_text()
         if not s or not IBus.keyval_from_name(s):
             dlg = self.__builder.get_object('invalid_keysym')
+            dlg.set_transient_for(widget.get_toplevel())
             dlg.set_markup('<big><b>%s</b></big>' % _("Invalid keysym"))
             dlg.format_secondary_text(_("This keysym is not valid"))
             dlg.run()
diff --git a/setup/python3/main.py b/setup/python3/main.py
index 2073f59..e1ca22e 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -328,11 +328,11 @@ class AnthySetup(object):
         return (section, key)
 
     def __run_message_dialog(self, message, type=Gtk.MessageType.INFO):
-        dlg = Gtk.MessageDialog(parent=self.__builder.get_object('main'),
-                                flags=Gtk.DialogFlags.MODAL,
-                                message_type=type,
-                                buttons=Gtk.ButtonsType.OK,
-                                message_format=message)
+        dlg = Gtk.MessageDialog(
+                transient_for=self.__builder.get_object('main'),
+                message_type=type,
+                buttons=Gtk.ButtonsType.OK,
+                text=message)
         dlg.run()
         dlg.destroy()
 
@@ -425,6 +425,7 @@ class AnthySetup(object):
         for key, value in sorted(list(rule.items()), \
             key = functools.cmp_to_key(self.__japanese_tuple_sort)):
             ls.append(['romaji', key, value])
+        tv.set_model(None)
         tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")),
                                             Gtk.CellRendererText(), text=1))
         tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")),
@@ -460,6 +461,7 @@ class AnthySetup(object):
         for key, value in sorted(list(rule.items()), \
             key = functools.cmp_to_key(self.__japanese_tuple_sort)):
             ls.append(['kana', key, value])
+        tv.set_model(None)
         tv.append_column(Gtk.TreeViewColumn(_(_("Input Chars")),
                                             Gtk.CellRendererText(), text=1))
         tv.append_column(Gtk.TreeViewColumn(_(_("Output Chars")),
@@ -507,6 +509,7 @@ class AnthySetup(object):
         for key, value in sorted(list(rule.items()), \
             key = functools.cmp_to_key(self.__japanese_thumb_sort)):
             ls.append(['thumb', key, value[0], value[2], value[1]])
+        tv.set_model(None)
         tv.append_column(Gtk.TreeViewColumn(_(_("Input")),
                                             Gtk.CellRendererText(), text=1))
         tv.append_column(Gtk.TreeViewColumn(_(_("Single")),
@@ -587,9 +590,10 @@ class AnthySetup(object):
         combobox.clear()
         combobox.disconnect_by_func(self.on_cb_custom_key_table_changed)
 
-    def __run_dialog_custom_key_table(self, mode):
+    def __run_dialog_custom_key_table(self, widget, mode):
         prefs = self.prefs
         dlg = self.__builder.get_object('dialog_custom_key_table')
+        dlg.set_transient_for(widget.get_toplevel())
         label = self.__builder.get_object('label_custom_key_table')
         label_output = self.__builder.get_object('label_output_custom_key')
         list_labels = []
@@ -1128,6 +1132,7 @@ class AnthySetup(object):
             Gtk.main_quit()
             return True
         dlg = self.__builder.get_object('quit_check')
+        dlg.set_transient_for(widget.get_toplevel())
         dlg.set_markup('<big><b>%s</b></big>' % _("Confirmation"))
         dlg.format_secondary_text(
                 _("You are about to close the setup dialog, is that OK?"))
@@ -1144,6 +1149,7 @@ class AnthySetup(object):
             Gtk.main_quit()
             return True
         dlg = self.__builder.get_object('quit_check_without_save')
+        dlg.set_transient_for(widget.get_toplevel())
         dlg.set_markup('<big><b>%s</b></big>' % _("Notice!"))
         dlg.format_secondary_text(
                 _("You are about to close the setup dialog without saving your changes, is that OK?"))
@@ -1219,6 +1225,7 @@ class AnthySetup(object):
         for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']:
             self.__builder.get_object(w).set_active(False)
         dlg = self.__builder.get_object('edit_shortcut')
+        dlg.set_transient_for(widget.get_toplevel())
         id = dlg.run()
         dlg.hide()
         if id == Gtk.ResponseType.OK:
@@ -1239,13 +1246,13 @@ class AnthySetup(object):
             self.__builder.get_object('btn_apply').set_sensitive(True)
 
     def on_btn_romaji_custom_table_clicked(self, widget):
-        self.__run_dialog_custom_key_table('romaji')
+        self.__run_dialog_custom_key_table(widget, 'romaji')
 
     def on_btn_kana_custom_table_clicked(self, widget):
-        self.__run_dialog_custom_key_table('kana')
+        self.__run_dialog_custom_key_table(widget, 'kana')
 
     def on_btn_thumb_custom_table_clicked(self, widget):
-        self.__run_dialog_custom_key_table('thumb')
+        self.__run_dialog_custom_key_table(widget, 'thumb')
 
     def on_btn_add_custom_key(self, widget, user_data):
         prefs = self.prefs
@@ -1374,6 +1381,7 @@ class AnthySetup(object):
         for w in ['es:checkbutton_ctrl', 'es:checkbutton_alt', 'es:checkbutton_shift']:
             self.__builder.get_object(w).set_active(False)
         dlg = self.__builder.get_object('edit_shortcut')
+        dlg.set_transient_for(widget.get_toplevel())
         id = dlg.run()
         dlg.hide()
         self.__builder.get_object('es:button_add').show()
@@ -1408,16 +1416,17 @@ class AnthySetup(object):
 
         if Gtk.Buildable.get_name(widget) == 'dict:btn_add':
             dlg = Gtk.FileChooserDialog(title=_("Open Dictionary File"),
-                                        parent=self.__builder.get_object('main'),
-                                        action=Gtk.FileChooserAction.OPEN,
-                                        buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
-                                                 _("_Open"), Gtk.ResponseType.OK))
+                                        transient_for=widget.get_toplevel(),
+                                        action=Gtk.FileChooserAction.OPEN)
+            buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                     _("_Open"), Gtk.ResponseType.OK)
+            dlg.add_buttons(*buttons)
         if Gtk.Buildable.get_name(widget) == 'dict:btn_edit':
             dlg = Gtk.Dialog(title=_("Edit Dictionary File"),
-                             parent=self.__builder.get_object('main'),
-                             flags=Gtk.DialogFlags.MODAL,
-                             buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
-                                      _("_OK"), Gtk.ResponseType.OK))
+                             transient_for=widget.get_toplevel())
+            buttons=(_("_Cancel"), Gtk.ResponseType.CANCEL,
+                     _("_OK"), Gtk.ResponseType.OK)
+            dlg.add_buttons(*buttons)
 
         vbox = self.__builder.get_object('dict:add_extra_vbox')
         if Gtk.Buildable.get_name(widget) == 'dict:btn_add':
@@ -1510,9 +1519,9 @@ class AnthySetup(object):
             lines = str(lines, encoding)
 
         dlg = Gtk.Dialog(title=_("View Dictionary File"),
-                         parent=self.__builder.get_object('main'),
-                         flags=Gtk.DialogFlags.MODAL,
-                         buttons=(_("_OK"), Gtk.ResponseType.OK))
+                         transient_for=widget.get_toplevel())
+        buttons=(_("_OK"), Gtk.ResponseType.OK)
+        dlg.add_buttons(*buttons)
         buffer = Gtk.TextBuffer()
         buffer.set_text (lines)
         text_view = Gtk.TextView.new_with_buffer(buffer)
@@ -1660,6 +1669,7 @@ class AnthySetup(object):
 
     def on_es_button_run_input_clicked(self, widget):
         dlg = self.__builder.get_object('key_input_dialog')
+        dlg.set_transient_for(widget.get_toplevel())
         dlg.set_markup('<big><b>%s</b></big>' % _("Please press a key (or a key combination)"))
         dlg.format_secondary_text(_("The dialog will be closed when the key is released"))
         id = dlg.run()
@@ -1680,6 +1690,7 @@ class AnthySetup(object):
         s = self.__builder.get_object('es:entry').get_text()
         if not s or not IBus.keyval_from_name(s):
             dlg = self.__builder.get_object('invalid_keysym')
+            dlg.set_transient_for(widget.get_toplevel())
             dlg.set_markup('<big><b>%s</b></big>' % _("Invalid keysym"))
             dlg.format_secondary_text(_("This keysym is not valid"))
             dlg.run()
@@ -1700,6 +1711,7 @@ class AnthySetup(object):
         s = self.__builder.get_object('es:entry').get_text()
         if not s or not IBus.keyval_from_name(s):
             dlg = self.__builder.get_object('invalid_keysym')
+            dlg.set_transient_for(widget.get_toplevel())
             dlg.set_markup('<big><b>%s</b></big>' % _("Invalid keysym"))
             dlg.format_secondary_text(_("This keysym is not valid"))
             dlg.run()
-- 
1.8.5.3

From 981c40b4a8cf42ffde07dcf5925539f337461f61 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 10 Jul 2014 17:13:49 +0900
Subject: [PATCH] Set max-width-chars property in ibus-anthy-setup wrapped
 GtkLabel.

---
 setup/python2/setup.ui | 1 +
 setup/python3/setup.ui | 1 +
 2 files changed, 2 insertions(+)

diff --git a/setup/python2/setup.ui b/setup/python2/setup.ui
index dc5e7e1..b6d8ef2 100644
--- a/setup/python2/setup.ui
+++ b/setup/python2/setup.ui
@@ -1469,6 +1469,7 @@
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
                                     <property name="wrap">True</property>
+                                    <property name="max_width_chars">74</property>
                                     <property name="label" translatable="yes">You do not have to reconfigure the system keyboard layout for "Additional Key Arrangement" since this option changes input method layout only in case input method is turned on.</property>
                                     <property name="tooltip_text" translatable="yes">You do not have to reconfigure XKB since this option changes IM layout only with IM on.</property>
                                   </object>
diff --git a/setup/python3/setup.ui b/setup/python3/setup.ui
index dc5e7e1..b6d8ef2 100644
--- a/setup/python3/setup.ui
+++ b/setup/python3/setup.ui
@@ -1469,6 +1469,7 @@
                                     <property name="visible">True</property>
                                     <property name="xalign">0</property>
                                     <property name="wrap">True</property>
+                                    <property name="max_width_chars">74</property>
                                     <property name="label" translatable="yes">You do not have to reconfigure the system keyboard layout for "Additional Key Arrangement" since this option changes input method layout only in case input method is turned on.</property>
                                     <property name="tooltip_text" translatable="yes">You do not have to reconfigure XKB since this option changes IM layout only with IM on.</property>
                                   </object>
-- 
1.8.5.3

From a1e5f1ce7b87a37cab7ba458ad2343fc20056f47 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 11 Jul 2014 12:11:53 +0900
Subject: [PATCH] Set a parent window from 'IBUS_SETUP_XID' environment
 variable in setup.

---
 setup/python2/main.py | 25 ++++++++++++++++++++-----
 setup/python3/main.py | 25 ++++++++++++++++++++-----
 2 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/setup/python2/main.py b/setup/python2/main.py
index 5df1cdd..cdfdc4d 100644
--- a/setup/python2/main.py
+++ b/setup/python2/main.py
@@ -82,22 +82,37 @@ class AnthySetup(object):
         builder.add_from_file(builder_file)
 
         toplevel = builder.get_object('main')
+        parent_xid = 0
+        parent_wmname = None
+        parent_wmclass = None
 
         try:
-            gnome_control_center_xid = int(environ['GNOME_CONTROL_CENTER_XID'])
+            parent_xid = int(environ['IBUS_SETUP_XID'])
+            if parent_xid != 0:
+                parent_wmname = 'ibus-setup'
+                parent_wmclass = 'Ibus-setup'
         except:
-            gnome_control_center_xid = 0
+            pass
+
+        try:
+            if parent_xid == 0:
+                parent_xid = int(environ['GNOME_CONTROL_CENTER_XID'])
+                if parent_xid != 0:
+                    parent_wmname = 'gnome-conrol-center'
+                    parent_wmclass = 'Gnome-conrol-center'
+        except:
+            pass
 
-        if gnome_control_center_xid != 0:
+        if parent_xid != 0:
             def set_transient(obj, pspec):
                 window = toplevel.get_window()
                 if window == None:
                     return
                 parent_window = GdkX11.X11Window.foreign_new_for_display(Gdk.Display.get_default(),
-                                                                         gnome_control_center_xid)
+                                                                         parent_xid)
                 if parent_window != None:
                     window.set_transient_for(parent_window)
-            toplevel.set_wmclass('gnome-control-center', 'Gnome-control-center')
+            toplevel.set_wmclass(parent_wmname, parent_wmclass)
             toplevel.set_modal(True)
             toplevel.set_type_hint(Gdk.WindowTypeHint.DIALOG)
             toplevel.connect('notify::window', set_transient)
diff --git a/setup/python3/main.py b/setup/python3/main.py
index 8921402..3141bb8 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -85,22 +85,37 @@ class AnthySetup(object):
         builder.add_from_file(builder_file)
 
         toplevel = builder.get_object('main')
+        parent_xid = 0
+        parent_wmname = None
+        parent_wmclass = None
 
         try:
-            gnome_control_center_xid = int(environ['GNOME_CONTROL_CENTER_XID'])
+            parent_xid = int(environ['IBUS_SETUP_XID'])
+            if parent_xid != 0:
+                parent_wmname = 'ibus-setup'
+                parent_wmclass = 'Ibus-setup'
         except:
-            gnome_control_center_xid = 0
+            pass
+
+        try:
+            if parent_xid == 0:
+                parent_xid = int(environ['GNOME_CONTROL_CENTER_XID'])
+                if parent_xid != 0:
+                    parent_wmname = 'gnome-conrol-center'
+                    parent_wmclass = 'Gnome-conrol-center'
+        except:
+            pass
 
-        if gnome_control_center_xid != 0:
+        if parent_xid != 0:
             def set_transient(obj, pspec):
                 window = toplevel.get_window()
                 if window == None:
                     return
                 parent_window = GdkX11.X11Window.foreign_new_for_display(Gdk.Display.get_default(),
-                                                                         gnome_control_center_xid)
+                                                                         parent_xid)
                 if parent_window != None:
                     window.set_transient_for(parent_window)
-            toplevel.set_wmclass('gnome-control-center', 'Gnome-control-center')
+            toplevel.set_wmclass(parent_wmname, parent_wmclass)
             toplevel.set_modal(True)
             toplevel.set_type_hint(Gdk.WindowTypeHint.DIALOG)
             toplevel.connect('notify::window', set_transient)
-- 
1.8.5.3

From 4d605b873bf4b0af2a337cd076175c8d0a703346 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 27 Feb 2014 18:32:01 +0900
Subject: [PATCH] Added another status icon for input mode.

---
 engine/python2/Makefile.am     |   5 +-
 engine/python2/engine.py       |  94 ++++++++-
 engine/python2/propertyicon.py |  81 ++++++++
 engine/python3/Makefile.am     |   5 +-
 engine/python3/engine.py       |  92 ++++++++-
 engine/python3/propertyicon.py |  81 ++++++++
 po/ibus-anthy.pot              | 426 +++++++++++++++++++++--------------------
 setup/python2/anthyprefs.py.in |   6 +-
 setup/python2/main.py          |   6 +-
 setup/python2/prefs.py         |  32 +++-
 setup/python2/setup.ui         |  19 +-
 setup/python3/anthyprefs.py.in |   2 +
 setup/python3/main.py          |   6 +-
 setup/python3/prefs.py         |  28 ++-
 setup/python3/setup.ui         |  19 +-
 15 files changed, 658 insertions(+), 244 deletions(-)
 create mode 100644 engine/python2/propertyicon.py
 create mode 100644 engine/python3/propertyicon.py

diff --git a/engine/python2/Makefile.am b/engine/python2/Makefile.am
index a96f831..965d534 100644
--- a/engine/python2/Makefile.am
+++ b/engine/python2/Makefile.am
@@ -3,8 +3,8 @@
 # ibus-anthy - The Anthy engine for IBus
 #
 # Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2013 Red Hat, Inc.
+# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2014 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -29,6 +29,7 @@ engine_anthy_PYTHON = \
 	jastring.py \
 	kana.py \
 	main.py \
+	propertyicon.py \
 	romaji.py \
 	segment.py \
 	tables.py \
diff --git a/engine/python2/engine.py b/engine/python2/engine.py
index 90a5750..c7a6fb3 100644
--- a/engine/python2/engine.py
+++ b/engine/python2/engine.py
@@ -4,8 +4,8 @@
 # ibus-anthy - The Anthy engine for IBus
 #
 # Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2013 Red Hat, Inc.
+# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2014 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -35,6 +35,7 @@ try:
 except:
     pass
 
+from gi.repository import Gio
 from gi.repository import GLib
 from gi.repository import IBus
 
@@ -117,6 +118,7 @@ class Engine(IBus.EngineSimple):
     __keybind = {}
     __thumb = None
     __latin_with_shift = True
+    __input_mode_icon = None
 
     def __init__(self, bus, object_path):
         super(Engine, self).__init__(engine_name="anthy",
@@ -170,6 +172,8 @@ class Engine(IBus.EngineSimple):
             ibus_config.connect('value-changed',
                                 self.__config_value_changed_cb)
 
+        self.__run_input_mode_icon()
+
     def __get_ibus_version(self):
         if self.__ibus_version == 0.0:
             self.__ibus_version = \
@@ -258,6 +262,73 @@ class Engine(IBus.EngineSimple):
         signal.signal(signum, signal.SIG_DFL)
         os.kill(os.getpid(), signum)
 
+    def __is_gnome_shell_running(self):
+        connection = None
+        variant = None
+
+        try:
+            connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
+            variant = connection.call_sync('org.gnome.Shell',
+                                           '/org/gnome/Shell',
+                                           'org.freedesktop.DBus.Peer',
+                                           'Ping',
+                                           None,
+                                           None,
+                                           Gio.DBusCallFlags.NONE,
+                                           -1,
+                                           None)
+        except GLib.GError as e:
+            pass
+    
+        if connection != None:
+            try:
+                connection.flush_sync(None)
+            except GLib.GError as e:
+                printerr('GDBusConnection flush failed: ' + str(e))
+
+        if variant == None:
+            return False
+        return True
+
+    def __run_input_mode_icon(self):
+        self.__input_mode_icon = None
+
+        if self.__is_gnome_shell_running():
+            return
+        try:
+            from gi.repository import Gdk
+            if Gdk.Display.get_default() == None:
+                return
+        except Exception as e:
+            printerr('import Gdk failed: ' + str(e))
+            return
+
+        if not self.__prefs.get_value('common', 'show-input-mode-icon'):
+            return
+
+        rgba = Gdk.RGBA(red = 0.0, green = 0.0, blue = 0.0, alpha = 1.0)
+        spec = self.__prefs.get_value('common', 'icon-str-rgba')
+        if not rgba.parse(spec):
+            printerr('invalid icon-str-rgba: %s' % spec)
+            rgba = Gdk.RGBA(red = 0.0, green = 0.0, blue = 0.0, alpha = 1.0)
+
+        modes = {
+            INPUT_MODE_HIRAGANA : 'あ',
+            INPUT_MODE_KATAKANA : 'ア',
+            INPUT_MODE_HALF_WIDTH_KATAKANA : '_ア',
+            INPUT_MODE_LATIN : '_A',
+            INPUT_MODE_WIDE_LATIN : 'A',
+        }
+
+        try:
+            import propertyicon
+            self.__input_mode_icon = propertyicon.PropertyIcon(rgba)
+            self.__input_mode_icon.set_visible(True)
+            self.__input_mode_icon.set_from_symbol(modes[self.__input_mode])
+        except Exception as e:
+            printerr('import PropertyIcon failed: ' + str(e))
+            return
+
     def __set_input_mode_props(self, anthy_props):
         # The class method is kept even if the engine is switched.
         if Engine.__input_mode == None:
@@ -847,6 +918,9 @@ class Engine(IBus.EngineSimple):
         prop.set_label(IBus.Text.new_from_string(label))
         self.update_property(prop)
 
+        if self.__input_mode_icon != None:
+            self.__input_mode_icon.set_from_symbol(symbol)
+
         self.__reset()
         self.__invalidate()
 
@@ -1030,6 +1104,7 @@ class Engine(IBus.EngineSimple):
         # It seems do_destroy() is called when launch_engine() is called.
         #self.__remove_dict_files()
         # It seems super.destroy() does not unref the engine.
+        self.__input_mode_icon = None
 
     def __join_all_segments(self):
         while True:
@@ -1109,7 +1184,7 @@ class Engine(IBus.EngineSimple):
 
             # fill lookup_table
             self.__lookup_table.clear()
-            for i in xrange(0, seg_stat.nr_predictions):
+            for i in xrange(0, nr_predictions):
                 buf = self.__context.get_prediction(i)
                 candidate = UN(buf)
                 self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate))
@@ -1220,6 +1295,12 @@ class Engine(IBus.EngineSimple):
     def __update_anthy_convert_chars(self):
         self.__convert_chars = u''
         pos = 0
+
+        (seg_index, text) = self.__segments[self.__cursor_pos]
+        # prediction lookup window + BackSpace will return None
+        if text == None:
+            return
+
         for i, (seg_index, text) in enumerate(self.__segments):
             self.__convert_chars += text
             if i < self.__cursor_pos:
@@ -2110,6 +2191,13 @@ class Engine(IBus.EngineSimple):
                 self.__fetch_dict_values(base_sec)
             self.__prefs.set_value(base_sec, name, value)
             self.__set_dict_mode_props(self.__prop_list, True)
+        elif base_sec == 'common':
+            if name == 'show_input_mode_icon':
+                name = 'show-input-mode-icon'
+                self.__prefs.set_value(base_sec, name, value)
+                self.__run_input_mode_icon()
+            else:
+                self.__prefs.set_value(base_sec, name, value)
         elif base_sec:
             self.__prefs.set_value(base_sec, name, value)
         else:
diff --git a/engine/python2/propertyicon.py b/engine/python2/propertyicon.py
new file mode 100644
index 0000000..fa5f34f
--- /dev/null
+++ b/engine/python2/propertyicon.py
@@ -0,0 +1,81 @@
+# vim:set et sts=4 sw=4:
+# -*- coding: utf-8 -*-
+#
+# ibus-anthy - The Anthy engine for IBus
+#
+# Copyright (c) 2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# for python2
+from __future__ import print_function
+
+import cairo
+import sys
+
+from gi.repository import Gdk
+from gi.repository import Gio
+from gi.repository import GLib
+from gi.repository import Gtk
+from gi.repository import Pango
+from gi.repository import PangoCairo
+
+class PropertyIcon(Gtk.StatusIcon):
+    __xkb_icon_pixbufs = {}
+    __xkb_icon_rgba = None
+
+    def __init__(self, rgba):
+        super(Gtk.StatusIcon, self).__init__()
+        self.__xkb_icon_rgba = rgba
+
+    def __context_render_string(self, cr, symbol, image_width, image_height):
+        lwidth = 0
+        lheight = 0
+        desc = Pango.FontDescription.from_string('Monospace Bold 22')
+        layout = PangoCairo.create_layout(cr)
+
+        layout.set_font_description(desc)
+        layout.set_text(symbol, -1)
+        (lwidth, lheight) = layout.get_size()
+        cr.move_to((image_width - lwidth / Pango.SCALE) / 2,
+                   (image_height - lheight / Pango.SCALE) / 2)
+        cr.set_source_rgba(self.__xkb_icon_rgba.red,
+                           self.__xkb_icon_rgba.green,
+                           self.__xkb_icon_rgba.blue,
+                           self.__xkb_icon_rgba.alpha)
+        PangoCairo.show_layout(cr, layout)
+
+    def __create_icon_pixbuf_with_string(self, symbol):
+        if symbol in self.__xkb_icon_pixbufs:
+            return self.__xkb_icon_pixbufs[symbol]
+
+        image = cairo.ImageSurface(cairo.FORMAT_ARGB32, 48, 48)
+        cr = cairo.Context(image)
+        width = image.get_width()
+        height = image.get_height()
+
+        cr.set_source_rgba(0.0, 0.0, 0.0, 0.0)
+        cr.set_operator(cairo.OPERATOR_SOURCE)
+        cr.paint()
+        cr.set_operator(cairo.OPERATOR_OVER)
+        self.__context_render_string(cr, symbol, width, height)
+        pixbuf = Gdk.pixbuf_get_from_surface(image, 0, 0, width, height)
+        self.__xkb_icon_pixbufs[symbol] = pixbuf
+        return pixbuf
+
+    def set_from_symbol(self, symbol):
+        pixbuf = self.__create_icon_pixbuf_with_string(symbol)
+        self.set_from_pixbuf(pixbuf)
diff --git a/engine/python3/Makefile.am b/engine/python3/Makefile.am
index a96f831..965d534 100644
--- a/engine/python3/Makefile.am
+++ b/engine/python3/Makefile.am
@@ -3,8 +3,8 @@
 # ibus-anthy - The Anthy engine for IBus
 #
 # Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
-# Copyright (c) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2013 Red Hat, Inc.
+# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2014 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -29,6 +29,7 @@ engine_anthy_PYTHON = \
 	jastring.py \
 	kana.py \
 	main.py \
+	propertyicon.py \
 	romaji.py \
 	segment.py \
 	tables.py \
diff --git a/engine/python3/engine.py b/engine/python3/engine.py
index 7eadf23..6563087 100644
--- a/engine/python3/engine.py
+++ b/engine/python3/engine.py
@@ -36,6 +36,7 @@ try:
 except:
     pass
 
+from gi.repository import Gio
 from gi.repository import GLib
 from gi.repository import IBus
 
@@ -118,6 +119,7 @@ class Engine(IBus.EngineSimple):
     __keybind = {}
     __thumb = None
     __latin_with_shift = True
+    __input_mode_icon = None
 
     def __init__(self, bus, object_path):
         super(Engine, self).__init__(engine_name="anthy",
@@ -171,6 +173,8 @@ class Engine(IBus.EngineSimple):
             ibus_config.connect('value-changed',
                                 self.__config_value_changed_cb)
 
+        self.__run_input_mode_icon()
+
     def __get_ibus_version(self):
         if self.__ibus_version == 0.0:
             self.__ibus_version = \
@@ -259,6 +263,73 @@ class Engine(IBus.EngineSimple):
         signal.signal(signum, signal.SIG_DFL)
         os.kill(os.getpid(), signum)
 
+    def __is_gnome_shell_running(self):
+        connection = None
+        variant = None
+
+        try:
+            connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
+            variant = connection.call_sync('org.gnome.Shell',
+                                           '/org/gnome/Shell',
+                                           'org.freedesktop.DBus.Peer',
+                                           'Ping',
+                                           None,
+                                           None,
+                                           Gio.DBusCallFlags.NONE,
+                                           -1,
+                                           None)
+        except GLib.GError as e:
+            pass
+    
+        if connection != None:
+            try:
+                connection.flush_sync(None)
+            except GLib.GError as e:
+                printerr('GDBusConnection flush failed: ' + str(e))
+
+        if variant == None:
+            return False
+        return True
+
+    def __run_input_mode_icon(self):
+        self.__input_mode_icon = None
+
+        if self.__is_gnome_shell_running():
+            return
+        try:
+            from gi.repository import Gdk
+            if Gdk.Display.get_default() == None:
+                return
+        except Exception as e:
+            printerr('import Gdk failed: ' + str(e))
+            return
+
+        if not self.__prefs.get_value('common', 'show-input-mode-icon'):
+            return
+
+        rgba = Gdk.RGBA(red = 0.0, green = 0.0, blue = 0.0, alpha = 1.0)
+        spec = self.__prefs.get_value('common', 'icon-str-rgba')
+        if not rgba.parse(spec):
+            printerr('invalid icon-str-rgba: %s' % spec)
+            rgba = Gdk.RGBA(red = 0.0, green = 0.0, blue = 0.0, alpha = 1.0)
+
+        modes = {
+            INPUT_MODE_HIRAGANA : 'あ',
+            INPUT_MODE_KATAKANA : 'ア',
+            INPUT_MODE_HALF_WIDTH_KATAKANA : '_ア',
+            INPUT_MODE_LATIN : '_A',
+            INPUT_MODE_WIDE_LATIN : 'A',
+        }
+
+        try:
+            import propertyicon
+            self.__input_mode_icon = propertyicon.PropertyIcon(rgba)
+            self.__input_mode_icon.set_visible(True)
+            self.__input_mode_icon.set_from_symbol(modes[self.__input_mode])
+        except Exception as e:
+            printerr('import PropertyIcon failed: ' + str(e))
+            return
+
     def __set_input_mode_props(self, anthy_props):
         # The class method is kept even if the engine is switched.
         if Engine.__input_mode == None:
@@ -842,6 +913,9 @@ class Engine(IBus.EngineSimple):
         prop.set_label(IBus.Text.new_from_string(label))
         self.update_property(prop)
 
+        if self.__input_mode_icon != None:
+            self.__input_mode_icon.set_from_symbol(symbol)
+
         self.__reset()
         self.__invalidate()
 
@@ -1025,6 +1099,7 @@ class Engine(IBus.EngineSimple):
         # It seems do_destroy() is called when launch_engine() is called.
         #self.__remove_dict_files()
         # It seems super.destroy() does not unref the engine.
+        self.__input_mode_icon = None
 
     def __join_all_segments(self):
         while True:
@@ -1104,7 +1179,7 @@ class Engine(IBus.EngineSimple):
 
             # fill lookup_table
             self.__lookup_table.clear()
-            for i in range(0, seg_stat.nr_predictions):
+            for i in range(0, nr_predictions):
                 buf = self.__context.get_prediction(i)
                 candidate = buf
                 self.__lookup_table.append_candidate(IBus.Text.new_from_string(candidate))
@@ -1215,6 +1290,12 @@ class Engine(IBus.EngineSimple):
     def __update_anthy_convert_chars(self):
         self.__convert_chars = ''
         pos = 0
+
+        (seg_index, text) = self.__segments[self.__cursor_pos]
+        # prediction lookup window + BackSpace will return None
+        if text == None:
+            return
+
         for i, (seg_index, text) in enumerate(self.__segments):
             self.__convert_chars += text
             if i < self.__cursor_pos:
@@ -2104,6 +2185,13 @@ class Engine(IBus.EngineSimple):
                 self.__fetch_dict_values(base_sec)
             self.__prefs.set_value(base_sec, name, value)
             self.__set_dict_mode_props(self.__prop_list, True)
+        elif base_sec == 'common':
+            if name == 'show_input_mode_icon':
+                name = 'show-input-mode-icon'
+                self.__prefs.set_value(base_sec, name, value)
+                self.__run_input_mode_icon()
+            else:
+                self.__prefs.set_value(base_sec, name, value)
         elif base_sec:
             self.__prefs.set_value(base_sec, name, value)
         else:
@@ -2312,7 +2400,7 @@ class Engine(IBus.EngineSimple):
         nr_predictions = self.__context.get_nr_predictions()
 
 #        for i in range(nr_predictions):
-#            print self.__context.get_prediction(i)
+#            print(self.__context.get_prediction(i))
 
         buf = self.__context.get_prediction(0)
         if not buf:
diff --git a/engine/python3/propertyicon.py b/engine/python3/propertyicon.py
new file mode 100644
index 0000000..fa5f34f
--- /dev/null
+++ b/engine/python3/propertyicon.py
@@ -0,0 +1,81 @@
+# vim:set et sts=4 sw=4:
+# -*- coding: utf-8 -*-
+#
+# ibus-anthy - The Anthy engine for IBus
+#
+# Copyright (c) 2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# for python2
+from __future__ import print_function
+
+import cairo
+import sys
+
+from gi.repository import Gdk
+from gi.repository import Gio
+from gi.repository import GLib
+from gi.repository import Gtk
+from gi.repository import Pango
+from gi.repository import PangoCairo
+
+class PropertyIcon(Gtk.StatusIcon):
+    __xkb_icon_pixbufs = {}
+    __xkb_icon_rgba = None
+
+    def __init__(self, rgba):
+        super(Gtk.StatusIcon, self).__init__()
+        self.__xkb_icon_rgba = rgba
+
+    def __context_render_string(self, cr, symbol, image_width, image_height):
+        lwidth = 0
+        lheight = 0
+        desc = Pango.FontDescription.from_string('Monospace Bold 22')
+        layout = PangoCairo.create_layout(cr)
+
+        layout.set_font_description(desc)
+        layout.set_text(symbol, -1)
+        (lwidth, lheight) = layout.get_size()
+        cr.move_to((image_width - lwidth / Pango.SCALE) / 2,
+                   (image_height - lheight / Pango.SCALE) / 2)
+        cr.set_source_rgba(self.__xkb_icon_rgba.red,
+                           self.__xkb_icon_rgba.green,
+                           self.__xkb_icon_rgba.blue,
+                           self.__xkb_icon_rgba.alpha)
+        PangoCairo.show_layout(cr, layout)
+
+    def __create_icon_pixbuf_with_string(self, symbol):
+        if symbol in self.__xkb_icon_pixbufs:
+            return self.__xkb_icon_pixbufs[symbol]
+
+        image = cairo.ImageSurface(cairo.FORMAT_ARGB32, 48, 48)
+        cr = cairo.Context(image)
+        width = image.get_width()
+        height = image.get_height()
+
+        cr.set_source_rgba(0.0, 0.0, 0.0, 0.0)
+        cr.set_operator(cairo.OPERATOR_SOURCE)
+        cr.paint()
+        cr.set_operator(cairo.OPERATOR_OVER)
+        self.__context_render_string(cr, symbol, width, height)
+        pixbuf = Gdk.pixbuf_get_from_surface(image, 0, 0, width, height)
+        self.__xkb_icon_pixbufs[symbol] = pixbuf
+        return pixbuf
+
+    def set_from_symbol(self, symbol):
+        pixbuf = self.__create_icon_pixbuf_with_string(symbol)
+        self.set_from_pixbuf(pixbuf)
diff --git a/setup/python2/anthyprefs.py.in b/setup/python2/anthyprefs.py.in
index a685da1..883fb23 100644
--- a/setup/python2/anthyprefs.py.in
+++ b/setup/python2/anthyprefs.py.in
@@ -5,8 +5,8 @@
 #
 # Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
 # Copyright (c) 2009 Hideaki ABE <abe.sendai@gmail.com>
-# Copyright (c) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2013 Red Hat, Inc.
+# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2014 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -362,6 +362,8 @@ _config = {
         'show-dict-mode': True,
         'show-dict-config': False,
         'show-preferences': True,
+        'show-input-mode-icon': True,
+        'icon-str-rgba': '#41507a',
 
         'period_style': 0,
         'symbol_style': 1,
diff --git a/setup/python2/main.py b/setup/python2/main.py
index 7c403b8..0e7c62e 100644
--- a/setup/python2/main.py
+++ b/setup/python2/main.py
@@ -144,7 +144,8 @@ class AnthySetup(object):
                      'half_width_symbol', 'half_width_number', 'half_width_space',
                      'latin_with_shift',
                      'thumb:keyboard_layout_mode', 'thumb:keyboard_layout',
-                     'thumb:fmv_extension', 'thumb:handakuten']:
+                     'thumb:fmv_extension', 'thumb:handakuten',
+                     'show_input_mode_icon']:
             section, key = self.__get_section_key(name)
             builder.get_object(name).set_active(prefs.get_value(section, key))
 
@@ -322,6 +323,9 @@ class AnthySetup(object):
         else:
             section = 'common'
             key = name
+        if section == 'common':
+            if name == 'show_input_mode_icon':
+                key = 'show-input-mode-icon'
         return (section, key)
 
     def __run_message_dialog(self, message, type=Gtk.MessageType.INFO):
diff --git a/setup/python2/prefs.py b/setup/python2/prefs.py
index 1b88908..9a147ee 100644
--- a/setup/python2/prefs.py
+++ b/setup/python2/prefs.py
@@ -4,8 +4,8 @@
 #
 # Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
 # Copyright (c) 2009 Hideaki ABE <abe.sendai@gmail.com>
-# Copyright (c) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2013 Red Hat, Inc.
+# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2014 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -145,15 +145,27 @@ class Prefs(object):
         variant = self._config.get_values(s)
         for key in variant.keys():
             v = variant[key]
+            # FIXME: ibus-dconf converts the keys.
+            #if key.find('_') >= 0:
+            #    key = key.replace('_', '-')
+            if section == 'common':
+                if key == 'show_input_mode':
+                    key = 'show-input-mode'
+                elif key == 'show_typing_method':
+                    key = 'show-typing-method'
+                elif key == 'show_segment_mode':
+                    key = 'show-segment-mode'
+                elif key == 'show_dict_mode':
+                    key = 'show-dict-mode'
+                elif key == 'show_dict_config':
+                    key = 'show-dict-config'
+                elif key == 'show_preferences':
+                    key = 'show-preferences'
+                elif key == 'show_input_mode_icon':
+                    key = 'show-input-mode-icon'
+                elif key == 'icon_str_rgba':
+                    key = 'icon-str-rgba'
             self.modified.setdefault(section, {})[key] = v if v != [''] else []
-        # FIXME: ibus-dconf converts the keys.
-        if section == 'common':
-            self.fetch_item(section, 'show-input-mode')
-            self.fetch_item(section, 'show-typing-method')
-            self.fetch_item(section, 'show-segment-mode')
-            self.fetch_item(section, 'show-dict-mode')
-            self.fetch_item(section, 'show-dict-config')
-            self.fetch_item(section, 'show-preferences')
 
     def fetch_item(self, section, key, readonly=False):
         if self._config == None:
diff --git a/setup/python2/setup.ui b/setup/python2/setup.ui
index dc5e7e1..edd6cfa 100644
--- a/setup/python2/setup.ui
+++ b/setup/python2/setup.ui
@@ -346,6 +346,23 @@
                   </packing>
                 </child>
                 <child>
+                  <object class="GtkCheckButton" id="show_input_mode_icon">
+                    <property name="label" translatable="yes">_Show input mode icon</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="draw_indicator">True</property>
+                    <signal handler="on_ck_toggled" name="toggled"/>
+                    <accelerator key="S" modifiers="GDK_MOD1_MASK" signal="grab_focus"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
                   <object class="GtkFrame" id="frame12">
                     <property name="visible">True</property>
                     <property name="label_xalign">0</property>
@@ -396,7 +413,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">1</property>
+                    <property name="position">2</property>
                   </packing>
                 </child>
               </object>
diff --git a/setup/python3/anthyprefs.py.in b/setup/python3/anthyprefs.py.in
index 53c9d1d..b9032f2 100644
--- a/setup/python3/anthyprefs.py.in
+++ b/setup/python3/anthyprefs.py.in
@@ -355,6 +355,8 @@ _config = {
         'show-dict-mode': True,
         'show-dict-config': False,
         'show-preferences': True,
+        'show-input-mode-icon': True,
+        'icon-str-rgba': '#41507a',
 
         'period_style': 0,
         'symbol_style': 1,
diff --git a/setup/python3/main.py b/setup/python3/main.py
index 2073f59..f70bc1f 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -147,7 +147,8 @@ class AnthySetup(object):
                      'half_width_symbol', 'half_width_number', 'half_width_space',
                      'latin_with_shift',
                      'thumb:keyboard_layout_mode', 'thumb:keyboard_layout',
-                     'thumb:fmv_extension', 'thumb:handakuten']:
+                     'thumb:fmv_extension', 'thumb:handakuten',
+                     'show_input_mode_icon']:
             section, key = self.__get_section_key(name)
             builder.get_object(name).set_active(prefs.get_value(section, key))
 
@@ -325,6 +326,9 @@ class AnthySetup(object):
         else:
             section = 'common'
             key = name
+        if section == 'common':
+            if name == 'show_input_mode_icon':
+                key = 'show-input-mode-icon'
         return (section, key)
 
     def __run_message_dialog(self, message, type=Gtk.MessageType.INFO):
diff --git a/setup/python3/prefs.py b/setup/python3/prefs.py
index a4af88d..2b3f4ea 100644
--- a/setup/python3/prefs.py
+++ b/setup/python3/prefs.py
@@ -145,15 +145,27 @@ class Prefs(object):
         variant = self._config.get_values(s)
         for key in list(variant.keys()):
             v = variant[key]
+            # FIXME: ibus-dconf converts the keys.
+            #if key.find('_') >= 0:
+            #    key = key.replace('_', '-')
+            if section == 'common':
+                if key == 'show_input_mode':
+                    key = 'show-input-mode'
+                elif key == 'show_typing_method':
+                    key = 'show-typing-method'
+                elif key == 'show_segment_mode':
+                    key = 'show-segment-mode'
+                elif key == 'show_dict_mode':
+                    key = 'show-dict-mode'
+                elif key == 'show_dict_config':
+                    key = 'show-dict-config'
+                elif key == 'show_preferences':
+                    key = 'show-preferences'
+                elif key == 'show_input_mode_icon':
+                    key = 'show-input-mode-icon'
+                elif key == 'icon_str_rgba':
+                    key = 'icon-str-rgba'
             self.modified.setdefault(section, {})[key] = v if v != [''] else []
-        # FIXME: ibus-dconf converts the keys.
-        if section == 'common':
-            self.fetch_item(section, 'show-input-mode')
-            self.fetch_item(section, 'show-typing-method')
-            self.fetch_item(section, 'show-segment-mode')
-            self.fetch_item(section, 'show-dict-mode')
-            self.fetch_item(section, 'show-dict-config')
-            self.fetch_item(section, 'show-preferences')
 
     def fetch_item(self, section, key, readonly=False):
         if self._config == None:
diff --git a/setup/python3/setup.ui b/setup/python3/setup.ui
index dc5e7e1..edd6cfa 100644
--- a/setup/python3/setup.ui
+++ b/setup/python3/setup.ui
@@ -346,6 +346,23 @@
                   </packing>
                 </child>
                 <child>
+                  <object class="GtkCheckButton" id="show_input_mode_icon">
+                    <property name="label" translatable="yes">_Show input mode icon</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="draw_indicator">True</property>
+                    <signal handler="on_ck_toggled" name="toggled"/>
+                    <accelerator key="S" modifiers="GDK_MOD1_MASK" signal="grab_focus"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
                   <object class="GtkFrame" id="frame12">
                     <property name="visible">True</property>
                     <property name="label_xalign">0</property>
@@ -396,7 +413,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">1</property>
+                    <property name="position">2</property>
                   </packing>
                 </child>
               </object>
-- 
1.8.0

From c13d52a823ee2b084e57bde3859ead64f94bd437 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Mon, 21 Apr 2014 17:05:19 +0900
Subject: [PATCH] Fix to unref pixbuf when propery icon is unrefed.

---
 engine/python2/engine.py       | 1 +
 engine/python2/propertyicon.py | 6 ++++++
 engine/python3/engine.py       | 1 +
 engine/python3/propertyicon.py | 6 ++++++
 4 files changed, 14 insertions(+)

diff --git a/engine/python2/engine.py b/engine/python2/engine.py
index c7a6fb3..68a4b48 100644
--- a/engine/python2/engine.py
+++ b/engine/python2/engine.py
@@ -1104,6 +1104,7 @@ class Engine(IBus.EngineSimple):
         # It seems do_destroy() is called when launch_engine() is called.
         #self.__remove_dict_files()
         # It seems super.destroy() does not unref the engine.
+        self.__input_mode_icon.clear()
         self.__input_mode_icon = None
 
     def __join_all_segments(self):
diff --git a/engine/python2/propertyicon.py b/engine/python2/propertyicon.py
index fa5f34f..437e94c 100644
--- a/engine/python2/propertyicon.py
+++ b/engine/python2/propertyicon.py
@@ -76,6 +76,12 @@ class PropertyIcon(Gtk.StatusIcon):
         self.__xkb_icon_pixbufs[symbol] = pixbuf
         return pixbuf
 
+    def clear(self):
+        self.set_from_icon_name('')
+        self.set_visible(False)
+        self.__xkb_icon_pixbufs = {}
+        self.__xkb_icon_rgba = None
+
     def set_from_symbol(self, symbol):
         pixbuf = self.__create_icon_pixbuf_with_string(symbol)
         self.set_from_pixbuf(pixbuf)
diff --git a/engine/python3/engine.py b/engine/python3/engine.py
index 6563087..67370d8 100644
--- a/engine/python3/engine.py
+++ b/engine/python3/engine.py
@@ -1099,6 +1099,7 @@ class Engine(IBus.EngineSimple):
         # It seems do_destroy() is called when launch_engine() is called.
         #self.__remove_dict_files()
         # It seems super.destroy() does not unref the engine.
+        self.__input_mode_icon.clear()
         self.__input_mode_icon = None
 
     def __join_all_segments(self):
diff --git a/engine/python3/propertyicon.py b/engine/python3/propertyicon.py
index fa5f34f..437e94c 100644
--- a/engine/python3/propertyicon.py
+++ b/engine/python3/propertyicon.py
@@ -76,6 +76,12 @@ class PropertyIcon(Gtk.StatusIcon):
         self.__xkb_icon_pixbufs[symbol] = pixbuf
         return pixbuf
 
+    def clear(self):
+        self.set_from_icon_name('')
+        self.set_visible(False)
+        self.__xkb_icon_pixbufs = {}
+        self.__xkb_icon_rgba = None
+
     def set_from_symbol(self, symbol):
         pixbuf = self.__create_icon_pixbuf_with_string(symbol)
         self.set_from_pixbuf(pixbuf)
-- 
1.8.5.3

From b852cfb6061259e4fd7198e3a2579b4495e15ecd Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Mon, 19 May 2014 12:01:22 +0900
Subject: [PATCH] Fix None object has clear() in input mode icon. (#1097364)

---
 engine/python2/engine.py | 3 ++-
 engine/python3/engine.py | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/engine/python2/engine.py b/engine/python2/engine.py
index 68a4b48..68e898b 100644
--- a/engine/python2/engine.py
+++ b/engine/python2/engine.py
@@ -1104,7 +1104,8 @@ class Engine(IBus.EngineSimple):
         # It seems do_destroy() is called when launch_engine() is called.
         #self.__remove_dict_files()
         # It seems super.destroy() does not unref the engine.
-        self.__input_mode_icon.clear()
+        if self.__input_mode_icon != None:
+            self.__input_mode_icon.clear()
         self.__input_mode_icon = None
 
     def __join_all_segments(self):
diff --git a/engine/python3/engine.py b/engine/python3/engine.py
index 67370d8..517a64a 100644
--- a/engine/python3/engine.py
+++ b/engine/python3/engine.py
@@ -1099,7 +1099,8 @@ class Engine(IBus.EngineSimple):
         # It seems do_destroy() is called when launch_engine() is called.
         #self.__remove_dict_files()
         # It seems super.destroy() does not unref the engine.
-        self.__input_mode_icon.clear()
+        if self.__input_mode_icon != None:
+            self.__input_mode_icon.clear()
         self.__input_mode_icon = None
 
     def __join_all_segments(self):
-- 
1.8.5.3