Blob Blame History Raw
From 0be4664b2ea3071c01ff479443033eb1accdfb03 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 2 May 2014 11:55:08 +0900
Subject: [PATCH] Set max-width-chars property in ibus-setup wrapped
 GtkLabel.

If GtkWindow has 'resizable' property = FALSE, the wrap in GtkLabel
is not done automatically and need to set 'max-width-chars' property.

TEST=ibus-setup

Review URL: https://codereview.appspot.com/92940043
---
 setup/setup.ui | 1 +
 1 file changed, 1 insertion(+)

diff --git a/setup/setup.ui b/setup/setup.ui
index 5ffbe47..bb78433 100644
--- a/setup/setup.ui
+++ b/setup/setup.ui
@@ -902,6 +902,7 @@
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="wrap">True</property>
+                                <property name="max_width_chars">74</property>
                                 <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;The active input method can be switched around from the selected ones in the above list by pressing the keyboard shortcut keys or clicking the panel icon.&lt;/i&gt;&lt;/small&gt;</property>
                                 <property name="use_markup">True</property>
                               </object>
-- 
1.8.5.3

From 318836a647460e28dcc682543a118567474f9854 Mon Sep 17 00:00:00 2001
From: Eike Hein <hein@kde.org>
Date: Thu, 8 May 2014 11:16:02 +0900
Subject: [PATCH] Add the nodeadkeys variant of the German keyboard layout.

BUG=http://code.google.com/p/ibus/issues/detail?id=1710

Review URL: https://codereview.appspot.com/96040043
Patch from Eike Hein <hein@kde.org>.
---
 engine/simple.xml.in | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/engine/simple.xml.in b/engine/simple.xml.in
index b3ac6a5..9736421 100644
--- a/engine/simple.xml.in
+++ b/engine/simple.xml.in
@@ -330,6 +330,18 @@
                         <icon>ibus-keyboard</icon>
 			<rank>99</rank>
 		</engine>
+                <engine>
+                        <name>xkb:de:nodeadkeys:ger</name>
+                        <language>ger</language>
+                        <license>GPL</license>
+                        <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
+                        <layout>de</layout>
+                        <layout_variant>nodeadkeys</layout_variant>
+                        <longname>German (eliminate dead keys)</longname>
+                        <description>German (eliminate dead keys)</description>
+                        <icon>ibus-keyboard</icon>
+                        <rank>99</rank>
+                </engine>
 		<engine>
 			<name>xkb:gr::gre</name>
 			<language>gre</language>
-- 
1.8.5.3

From 386bafb0b91a61d51385e0bba2b3fc4b1e2d9013 Mon Sep 17 00:00:00 2001
From: Ryu Changwoo <ryu.changwoo@gmail.com>
Date: Thu, 8 May 2014 11:23:14 +0900
Subject: [PATCH] Delete Korean keymap.

BUG=http://code.google.com/p/ibus/issues/detail?id=1708

Review URL: https://codereview.appspot.com/92090043
Patch from Ryu Changwoo <ryu.changwoo@gmail.com>.
---
 engine/simple.xml.in | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/engine/simple.xml.in b/engine/simple.xml.in
index 9736421..1b617f8 100644
--- a/engine/simple.xml.in
+++ b/engine/simple.xml.in
@@ -682,17 +682,5 @@
                         <icon>ibus-keyboard</icon>
 			<rank>99</rank>
 		</engine>
-		<engine>
-			<name>xkb:kr:kr104:kor</name>
-			<language>kor</language>
-			<license>GPL</license>
-			<author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
-			<layout>kr</layout>
-			<layout_variant>kr104</layout_variant>
-			<longname>Korean (101/104 key compatible)</longname>
-			<description>Korean (101/104 key compatible)</description>
-                        <icon>ibus-keyboard</icon>
-			<rank>99</rank>
-		</engine>
 	</engines>
 </component>
-- 
1.8.5.3

From 34692850bd58543e016e35ea7c863d311ca92519 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 9 May 2014 11:40:21 +0900
Subject: [PATCH] Let ibus-ui-gtk3 not to show zero-lenght preedit text.

preedit text is shown by ibus-ui-gtk3 on X11 applications
and do not have to show it likes GTK+ when the lenght is zero.

BUG=http://code.google.com/p/ibus/issues/detail?id=1709
TEST=ibus-ui-gtk3 with ibus-pinyin and x11 applications

Review URL: https://codereview.appspot.com/93150043
---
 ui/gtk3/candidatepanel.vala | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/ui/gtk3/candidatepanel.vala b/ui/gtk3/candidatepanel.vala
index e22135b..db2d5aa 100644
--- a/ui/gtk3/candidatepanel.vala
+++ b/ui/gtk3/candidatepanel.vala
@@ -112,8 +112,15 @@ public class CandidatePanel : Gtk.Box{
 
     public void set_preedit_text(IBus.Text? text, uint cursor) {
         if (text != null) {
-            m_preedit_label.set_text(text.get_text());
-            m_preedit_label.show();
+            var str = text.get_text();
+
+            if (str.length > 0) {
+                m_preedit_label.set_text(str);
+                m_preedit_label.show();
+            } else {
+                m_preedit_label.set_text("");
+                m_preedit_label.hide();
+            }
         } else {
             m_preedit_label.set_text("");
             m_preedit_label.hide();
-- 
1.8.5.3

From ee4c5ec0a39b5ed4a22fe34307a44f3f9fa1303b Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 6 Jun 2014 17:38:08 +0900
Subject: [PATCH] Add Polish (qwertz) keymap in simple.xml

BUG=http://code.google.com/p/ibus/issues/detail?id=1716
TEST=ibus-setup

Review URL: https://codereview.appspot.com/102150045
---
 bus/ibusimpl.c       |  4 ++--
 engine/simple.xml.in | 12 ++++++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
index 97f3602..dd254e2 100644
--- a/bus/ibusimpl.c
+++ b/bus/ibusimpl.c
@@ -1450,7 +1450,7 @@ _ibus_set_global_engine (BusIBusImpl           *ibus,
         g_dbus_method_invocation_return_error (invocation,
                                                G_DBUS_ERROR,
                                                G_DBUS_ERROR_FAILED,
-                                               "Can not find engine %s.",
+                                               "Cannot find engine %s.",
                                                engine_name);
         return;
     }
@@ -1553,7 +1553,7 @@ _ibus_set_preload_engines (BusIBusImpl     *ibus,
             g_set_error (error,
                          G_DBUS_ERROR,
                          G_DBUS_ERROR_FAILED,
-                         "Can not find engine %s.",
+                         "Cannot find engine %s.",
                          names[i]);
             g_ptr_array_free (array, FALSE);
             return FALSE;
diff --git a/engine/simple.xml.in b/engine/simple.xml.in
index 1b617f8..c16f86a 100644
--- a/engine/simple.xml.in
+++ b/engine/simple.xml.in
@@ -477,6 +477,18 @@
                         <icon>ibus-keyboard</icon>
 			<rank>99</rank>
 		</engine>
+                <engine>
+                        <name>xkb:pl:qwertz:pol</name>
+                        <language>pol</language>
+                        <license>GPL</license>
+                        <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
+                        <layout>pl</layout>
+                        <layout_variant>qwertz</layout_variant>
+                        <longname>Polish (qwertz)</longname>
+                        <description>Polish (qwertz)</description>
+                        <icon>ibus-keyboard</icon>
+                        <rank>1</rank>
+                </engine>
 		<engine>
 			<name>xkb:pt::por</name>
 			<language>por</language>
-- 
1.8.5.3

From 9bad0c944162a1700dcb6615aab2a6a9cfd9eff5 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 12 Jun 2014 11:38:43 +0900
Subject: [PATCH] Fix escape key with Ctrl+Shift+U ISO 14755.

GtkIMContextSimple uses gdk_keymap_get_for_display() to check the readable
hex codes but IBusEngineSimple ignored it because does not have the display
argument.
I added is_hex_keyval() to check the escape key and fix this bug.

BUG=http://code.google.com/p/ibus/issues/detail?id=1715
TEST=src/libibus.so

Review URL: https://codereview.appspot.com/101160044
---
 src/ibusenginesimple.c | 47 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/src/ibusenginesimple.c b/src/ibusenginesimple.c
index 8c076ac..300a828 100644
--- a/src/ibusenginesimple.c
+++ b/src/ibusenginesimple.c
@@ -693,6 +693,14 @@ no_sequence_matches (IBusEngineSimple *simple,
 }
 
 static gboolean
+is_hex_keyval (guint keyval)
+{
+  gunichar ch = ibus_keyval_to_unicode (keyval);
+
+  return g_unichar_isxdigit (ch);
+}
+
+static gboolean
 ibus_engine_simple_process_key_event (IBusEngine *engine,
                                       guint       keyval,
                                       guint       keycode,
@@ -712,9 +720,6 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
     while (priv->compose_buffer[n_compose] != 0)
         n_compose++;
 
-    if (n_compose >= IBUS_MAX_COMPOSE_LEN)
-        return TRUE;
-
     if (modifiers & IBUS_RELEASE_MASK) {
         if (priv->in_hex_sequence &&
             (keyval == IBUS_KEY_Control_L || keyval == IBUS_KEY_Control_R ||
@@ -761,7 +766,32 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
                   keyval == IBUS_KEY_KP_Enter);
     is_backspace = keyval == IBUS_KEY_BackSpace;
     is_escape = keyval == IBUS_KEY_Escape;
-    hex_keyval = keyval;
+    hex_keyval = is_hex_keyval (keyval) ? keyval : 0;
+
+    /* gtkimcontextsimple causes a buffer overflow in priv->compose_buffer.
+     * Add the check code here.
+     */
+    if (n_compose >= IBUS_MAX_COMPOSE_LEN) {
+        if (is_backspace) {
+            priv->compose_buffer[--n_compose] = 0;
+        }
+        else if (is_hex_end) {
+            /* invalid hex sequence */
+            // beep_window (event->window);
+            priv->tentative_match = 0;
+            priv->in_hex_sequence = FALSE;
+            priv->compose_buffer[0] = 0;
+        }
+        else if (is_escape) {
+            ibus_engine_simple_reset (engine);
+            return TRUE;
+        }
+
+        if (have_hex_mods)
+            ibus_engine_simple_update_preedit_text (simple);
+
+        return TRUE;
+    }
 
     /* If we are already in a non-hex sequence, or
      * this keystroke is not hex modifiers + hex digit, don't filter
@@ -787,13 +817,12 @@ ibus_engine_simple_process_key_event (IBusEngine *engine,
     /* Handle backspace */
     if (priv->in_hex_sequence && have_hex_mods && is_backspace) {
         if (n_compose > 0) {
-        n_compose--;
+            n_compose--;
             priv->compose_buffer[n_compose] = 0;
             check_hex (simple, n_compose);
-    }
-        else {
-        priv->in_hex_sequence = FALSE;
-    }
+        } else {
+            priv->in_hex_sequence = FALSE;
+        }
 
         ibus_engine_simple_update_preedit_text (simple);
 
-- 
1.8.5.3

From b6afffbd1a06ecf17af009f1de3e513988ecb92e Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 18 Jun 2014 11:42:34 +0900
Subject: [PATCH] Update ibuscomposetable.h for pt-br.

pt_BR.UTF-8/Compose file is updated:
http://cgit.freedesktop.org/xorg/lib/libX11/commit/?id=e3dc0d1733

TEST=engine/test-compose on pt_BR.UTF-8

Review URL: https://codereview.appspot.com/101330044
---
 src/gencomposetable.c  |  19 +-
 src/ibuscomposetable.h | 608 ++-----------------------------------------------
 2 files changed, 38 insertions(+), 589 deletions(-)

diff --git a/src/gencomposetable.c b/src/gencomposetable.c
index bffda07..793a75e 100644
--- a/src/gencomposetable.c
+++ b/src/gencomposetable.c
@@ -1,7 +1,7 @@
 /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
 /* ibus - The Input Bus
- * Copyright (C) 2013 Peng Huang <shawn.p.huang@gmail.com>
- * Copyright (C) 2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
+ * Copyright (C) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>
+ * Copyright (C) 2013-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -19,6 +19,17 @@
  * USA
  */
 
+/* This tool converts COMPOSE_FILES[] to ibuscompose.h .
+ * To update ibuscompose.h:
+ * # rm ibuscompose.h
+ * # make ibuscompose.h
+ *
+ * If you copy libX11/nls/??/Compose.pre in xorg git HEAD to
+ * /usr/share/X11/locale/??/Compose , need to convert:
+ * # sed -e 's/^XCOMM/#/' -e 's|X11_LOCALEDATADIR|/usr/share/X11/locale|'
+ *   Compose.pre > /usr/share/X11/locale/foo/Compose
+ */
+
 #include <glib.h>
 #include <glib/gprintf.h>
 #include <locale.h>
@@ -36,8 +47,8 @@
 "/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */\n"          \
 "/* vim:set et sts=4: */\n"                                                   \
 "/* ibus - The Input Bus\n"                                                   \
-" * Copyright (C) 2013 Peng Huang <shawn.p.huang@gmail.com>\n"                \
-" * Copyright (C) 2013 Takao Fujiwara <takao.fujiwara1@gmail.com>\n"          \
+" * Copyright (C) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>\n"           \
+" * Copyright (C) 2013-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>\n"     \
 " *\n"                                                                        \
 " * This library is free software; you can redistribute it and/or\n"          \
 " * modify it under the terms of the GNU Lesser General Public\n"             \
diff --git a/src/ibuscomposetable.h b/src/ibuscomposetable.h
index 2ba3571..22aab48 100644
--- a/src/ibuscomposetable.h
+++ b/src/ibuscomposetable.h
@@ -2058,596 +2058,34 @@ static const IBusComposeTable ibus_compose_table_fi_fi = {
 };
 
 static const guint16 ibus_compose_seqs_pt_br[] = {
-  IBUS_KEY_dead_grave, 0x1F00, 0, 0, 0,
-    0, 0x1F02, /* U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F01, 0, 0, 0,
-    0, 0x1F03, /* U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F08, 0, 0, 0,
-    0, 0x1F0A, /* U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F09, 0, 0, 0,
-    0, 0x1F0B, /* U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F10, 0, 0, 0,
-    0, 0x1F12, /* U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F11, 0, 0, 0,
-    0, 0x1F13, /* U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F18, 0, 0, 0,
-    0, 0x1F1A, /* U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F19, 0, 0, 0,
-    0, 0x1F1B, /* U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F20, 0, 0, 0,
-    0, 0x1F22, /* U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F21, 0, 0, 0,
-    0, 0x1F23, /* U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F28, 0, 0, 0,
-    0, 0x1F2A, /* U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F29, 0, 0, 0,
-    0, 0x1F2B, /* U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F30, 0, 0, 0,
-    0, 0x1F32, /* U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F31, 0, 0, 0,
-    0, 0x1F33, /* U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F38, 0, 0, 0,
-    0, 0x1F3A, /* U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F39, 0, 0, 0,
-    0, 0x1F3B, /* U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F40, 0, 0, 0,
-    0, 0x1F42, /* U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F41, 0, 0, 0,
-    0, 0x1F43, /* U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F48, 0, 0, 0,
-    0, 0x1F4A, /* U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F49, 0, 0, 0,
-    0, 0x1F4B, /* U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F50, 0, 0, 0,
-    0, 0x1F52, /* U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F51, 0, 0, 0,
-    0, 0x1F53, /* U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F59, 0, 0, 0,
-    0, 0x1F5B, /* U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F60, 0, 0, 0,
-    0, 0x1F62, /* U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F61, 0, 0, 0,
-    0, 0x1F63, /* U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F68, 0, 0, 0,
-    0, 0x1F6A, /* U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */
-  IBUS_KEY_dead_grave, 0x1F69, 0, 0, 0,
-    0, 0x1F6B, /* U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */
-  IBUS_KEY_dead_acute, IBUS_KEY_C, 0, 0, 0,
-    0, 0x00C7, /* Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA */
-  IBUS_KEY_dead_acute, IBUS_KEY_c, 0, 0, 0,
-    0, 0x00E7, /* ccedilla # LATIN SMALL LETTER C WITH CEDILLA */
-  IBUS_KEY_dead_acute, 0x1F00, 0, 0, 0,
-    0, 0x1F04, /* U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F01, 0, 0, 0,
-    0, 0x1F05, /* U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F08, 0, 0, 0,
-    0, 0x1F0C, /* U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F09, 0, 0, 0,
-    0, 0x1F0D, /* U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F10, 0, 0, 0,
-    0, 0x1F14, /* U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F11, 0, 0, 0,
-    0, 0x1F15, /* U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F18, 0, 0, 0,
-    0, 0x1F1C, /* U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F19, 0, 0, 0,
-    0, 0x1F1D, /* U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F20, 0, 0, 0,
-    0, 0x1F24, /* U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F21, 0, 0, 0,
-    0, 0x1F25, /* U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F28, 0, 0, 0,
-    0, 0x1F2C, /* U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F29, 0, 0, 0,
-    0, 0x1F2D, /* U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F30, 0, 0, 0,
-    0, 0x1F34, /* U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F31, 0, 0, 0,
-    0, 0x1F35, /* U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F38, 0, 0, 0,
-    0, 0x1F3C, /* U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F39, 0, 0, 0,
-    0, 0x1F3D, /* U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F40, 0, 0, 0,
-    0, 0x1F44, /* U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F41, 0, 0, 0,
-    0, 0x1F45, /* U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F48, 0, 0, 0,
-    0, 0x1F4C, /* U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F49, 0, 0, 0,
-    0, 0x1F4D, /* U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F50, 0, 0, 0,
-    0, 0x1F54, /* U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F51, 0, 0, 0,
-    0, 0x1F55, /* U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F59, 0, 0, 0,
-    0, 0x1F5D, /* U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F60, 0, 0, 0,
-    0, 0x1F64, /* U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F61, 0, 0, 0,
-    0, 0x1F65, /* U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F68, 0, 0, 0,
-    0, 0x1F6C, /* U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */
-  IBUS_KEY_dead_acute, 0x1F69, 0, 0, 0,
-    0, 0x1F6D, /* U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */
-  IBUS_KEY_dead_circumflex, 0x1EA0, 0, 0, 0,
-    0, 0x1EAC, /* U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
-  IBUS_KEY_dead_circumflex, 0x1EA1, 0, 0, 0,
-    0, 0x1EAD, /* U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */
-  IBUS_KEY_dead_circumflex, 0x1EB8, 0, 0, 0,
-    0, 0x1EC6, /* U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
-  IBUS_KEY_dead_circumflex, 0x1EB9, 0, 0, 0,
-    0, 0x1EC7, /* U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */
-  IBUS_KEY_dead_circumflex, 0x1ECC, 0, 0, 0,
-    0, 0x1ED8, /* U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
-  IBUS_KEY_dead_circumflex, 0x1ECD, 0, 0, 0,
-    0, 0x1ED9, /* U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */
-  IBUS_KEY_dead_macron, 0x01EA, 0, 0, 0,
-    0, 0x01EC, /* U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON */
-  IBUS_KEY_dead_macron, 0x01EB, 0, 0, 0,
-    0, 0x01ED, /* U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON */
-  IBUS_KEY_dead_macron, 0x0226, 0, 0, 0,
-    0, 0x01E0, /* U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON */
-  IBUS_KEY_dead_macron, 0x0227, 0, 0, 0,
-    0, 0x01E1, /* U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON */
-  IBUS_KEY_dead_macron, 0x022E, 0, 0, 0,
-    0, 0x0230, /* U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */
-  IBUS_KEY_dead_macron, 0x022F, 0, 0, 0,
-    0, 0x0231, /* U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */
-  IBUS_KEY_dead_macron, 0x1E36, 0, 0, 0,
-    0, 0x1E38, /* U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */
-  IBUS_KEY_dead_macron, 0x1E37, 0, 0, 0,
-    0, 0x1E39, /* U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */
-  IBUS_KEY_dead_macron, 0x1E5A, 0, 0, 0,
-    0, 0x1E5C, /* U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */
-  IBUS_KEY_dead_macron, 0x1E5B, 0, 0, 0,
-    0, 0x1E5D, /* U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */
-  IBUS_KEY_dead_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_U, 0, 0,
-    0, 0x01D5, /* U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON */
-  IBUS_KEY_dead_macron, IBUS_KEY_dead_diaeresis, IBUS_KEY_u, 0, 0,
-    0, 0x01D6, /* U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON */
-  IBUS_KEY_dead_breve, 0x0228, 0, 0, 0,
-    0, 0x1E1C, /* U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
-  IBUS_KEY_dead_breve, 0x0229, 0, 0, 0,
-    0, 0x1E1D, /* U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
-  IBUS_KEY_dead_breve, 0x1EA0, 0, 0, 0,
-    0, 0x1EB6, /* U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */
-  IBUS_KEY_dead_breve, 0x1EA1, 0, 0, 0,
-    0, 0x1EB7, /* U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */
-  IBUS_KEY_dead_abovedot, 0x017F, 0, 0, 0,
-    0, 0x1E9B, /* U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE */
-  IBUS_KEY_dead_abovedot, 0x1E62, 0, 0, 0,
-    0, 0x1E68, /* U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */
-  IBUS_KEY_dead_abovedot, 0x1E63, 0, 0, 0,
-    0, 0x1E69, /* U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
-  IBUS_KEY_dead_diaeresis, 0x04D8, 0, 0, 0,
-    0, 0x04DA, /* U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */
-  IBUS_KEY_dead_diaeresis, 0x04D9, 0, 0, 0,
-    0, 0x04DB, /* U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS */
-  IBUS_KEY_dead_diaeresis, 0x04E8, 0, 0, 0,
-    0, 0x04EA, /* U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */
-  IBUS_KEY_dead_diaeresis, 0x04E9, 0, 0, 0,
-    0, 0x04EB, /* U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS */
-  IBUS_KEY_dead_diaeresis, IBUS_KEY_dead_macron, IBUS_KEY_U, 0, 0,
-    0, 0x1E7A, /* U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */
-  IBUS_KEY_dead_diaeresis, IBUS_KEY_dead_macron, IBUS_KEY_u, 0, 0,
-    0, 0x1E7B, /* U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */
-  IBUS_KEY_dead_iota, 0x1F00, 0, 0, 0,
-    0, 0x1F80, /* U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F01, 0, 0, 0,
-    0, 0x1F81, /* U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F02, 0, 0, 0,
-    0, 0x1F82, /* U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F03, 0, 0, 0,
-    0, 0x1F83, /* U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F04, 0, 0, 0,
-    0, 0x1F84, /* U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F05, 0, 0, 0,
-    0, 0x1F85, /* U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F06, 0, 0, 0,
-    0, 0x1F86, /* U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F07, 0, 0, 0,
-    0, 0x1F87, /* U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F08, 0, 0, 0,
-    0, 0x1F88, /* U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F09, 0, 0, 0,
-    0, 0x1F89, /* U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F0A, 0, 0, 0,
-    0, 0x1F8A, /* U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F0B, 0, 0, 0,
-    0, 0x1F8B, /* U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F0C, 0, 0, 0,
-    0, 0x1F8C, /* U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F0D, 0, 0, 0,
-    0, 0x1F8D, /* U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F0E, 0, 0, 0,
-    0, 0x1F8E, /* U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F0F, 0, 0, 0,
-    0, 0x1F8F, /* U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F20, 0, 0, 0,
-    0, 0x1F90, /* U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F21, 0, 0, 0,
-    0, 0x1F91, /* U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F22, 0, 0, 0,
-    0, 0x1F92, /* U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F23, 0, 0, 0,
-    0, 0x1F93, /* U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F24, 0, 0, 0,
-    0, 0x1F94, /* U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F25, 0, 0, 0,
-    0, 0x1F95, /* U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F26, 0, 0, 0,
-    0, 0x1F96, /* U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F27, 0, 0, 0,
-    0, 0x1F97, /* U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F28, 0, 0, 0,
-    0, 0x1F98, /* U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F29, 0, 0, 0,
-    0, 0x1F99, /* U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F2A, 0, 0, 0,
-    0, 0x1F9A, /* U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F2B, 0, 0, 0,
-    0, 0x1F9B, /* U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F2C, 0, 0, 0,
-    0, 0x1F9C, /* U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F2D, 0, 0, 0,
-    0, 0x1F9D, /* U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F2E, 0, 0, 0,
-    0, 0x1F9E, /* U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F2F, 0, 0, 0,
-    0, 0x1F9F, /* U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F60, 0, 0, 0,
-    0, 0x1FA0, /* U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F61, 0, 0, 0,
-    0, 0x1FA1, /* U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F62, 0, 0, 0,
-    0, 0x1FA2, /* U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F63, 0, 0, 0,
-    0, 0x1FA3, /* U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F64, 0, 0, 0,
-    0, 0x1FA4, /* U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F65, 0, 0, 0,
-    0, 0x1FA5, /* U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F66, 0, 0, 0,
-    0, 0x1FA6, /* U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F67, 0, 0, 0,
-    0, 0x1FA7, /* U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F68, 0, 0, 0,
-    0, 0x1FA8, /* U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F69, 0, 0, 0,
-    0, 0x1FA9, /* U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F6A, 0, 0, 0,
-    0, 0x1FAA, /* U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F6B, 0, 0, 0,
-    0, 0x1FAB, /* U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F6C, 0, 0, 0,
-    0, 0x1FAC, /* U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F6D, 0, 0, 0,
-    0, 0x1FAD, /* U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F6E, 0, 0, 0,
-    0, 0x1FAE, /* U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F6F, 0, 0, 0,
-    0, 0x1FAF, /* U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F70, 0, 0, 0,
-    0, 0x1FB2, /* U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F74, 0, 0, 0,
-    0, 0x1FC2, /* U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1F7C, 0, 0, 0,
-    0, 0x1FF2, /* U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1FB6, 0, 0, 0,
-    0, 0x1FB7, /* U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1FC6, 0, 0, 0,
-    0, 0x1FC7, /* U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, 0x1FF6, 0, 0, 0,
-    0, 0x1FF7, /* U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F00, 0, 0,
-    0, 0x1F82, /* U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F01, 0, 0,
-    0, 0x1F83, /* U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F08, 0, 0,
-    0, 0x1F8A, /* U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F09, 0, 0,
-    0, 0x1F8B, /* U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F20, 0, 0,
-    0, 0x1F92, /* U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F21, 0, 0,
-    0, 0x1F93, /* U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F28, 0, 0,
-    0, 0x1F9A, /* U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F29, 0, 0,
-    0, 0x1F9B, /* U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F60, 0, 0,
-    0, 0x1FA2, /* U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F61, 0, 0,
-    0, 0x1FA3, /* U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F68, 0, 0,
-    0, 0x1FAA, /* U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_grave, 0x1F69, 0, 0,
-    0, 0x1FAB, /* U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F00, 0, 0,
-    0, 0x1F84, /* U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F01, 0, 0,
-    0, 0x1F85, /* U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F08, 0, 0,
-    0, 0x1F8C, /* U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F09, 0, 0,
-    0, 0x1F8D, /* U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F20, 0, 0,
-    0, 0x1F94, /* U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F21, 0, 0,
-    0, 0x1F95, /* U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F28, 0, 0,
-    0, 0x1F9C, /* U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F29, 0, 0,
-    0, 0x1F9D, /* U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F60, 0, 0,
-    0, 0x1FA4, /* U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F61, 0, 0,
-    0, 0x1FA5, /* U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F68, 0, 0,
-    0, 0x1FAC, /* U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_iota, IBUS_KEY_dead_acute, 0x1F69, 0, 0,
-    0, 0x1FAD, /* U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */
-  IBUS_KEY_dead_voiced_sound, 0x3046, 0, 0, 0,
-    0, 0x3094, /* U3094 # HIRAGANA LETTER VU */
-  IBUS_KEY_dead_voiced_sound, 0x304B, 0, 0, 0,
-    0, 0x304C, /* U304C # HIRAGANA LETTER GA */
-  IBUS_KEY_dead_voiced_sound, 0x304D, 0, 0, 0,
-    0, 0x304E, /* U304E # HIRAGANA LETTER GI */
-  IBUS_KEY_dead_voiced_sound, 0x304F, 0, 0, 0,
-    0, 0x3050, /* U3050 # HIRAGANA LETTER GU */
-  IBUS_KEY_dead_voiced_sound, 0x3051, 0, 0, 0,
-    0, 0x3052, /* U3052 # HIRAGANA LETTER GE */
-  IBUS_KEY_dead_voiced_sound, 0x3053, 0, 0, 0,
-    0, 0x3054, /* U3054 # HIRAGANA LETTER GO */
-  IBUS_KEY_dead_voiced_sound, 0x3055, 0, 0, 0,
-    0, 0x3056, /* U3056 # HIRAGANA LETTER ZA */
-  IBUS_KEY_dead_voiced_sound, 0x3057, 0, 0, 0,
-    0, 0x3058, /* U3058 # HIRAGANA LETTER ZI */
-  IBUS_KEY_dead_voiced_sound, 0x3059, 0, 0, 0,
-    0, 0x305A, /* U305A # HIRAGANA LETTER ZU */
-  IBUS_KEY_dead_voiced_sound, 0x305B, 0, 0, 0,
-    0, 0x305C, /* U305C # HIRAGANA LETTER ZE */
-  IBUS_KEY_dead_voiced_sound, 0x305D, 0, 0, 0,
-    0, 0x305E, /* U305E # HIRAGANA LETTER ZO */
-  IBUS_KEY_dead_voiced_sound, 0x305F, 0, 0, 0,
-    0, 0x3060, /* U3060 # HIRAGANA LETTER DA */
-  IBUS_KEY_dead_voiced_sound, 0x3061, 0, 0, 0,
-    0, 0x3062, /* U3062 # HIRAGANA LETTER DI */
-  IBUS_KEY_dead_voiced_sound, 0x3064, 0, 0, 0,
-    0, 0x3065, /* U3065 # HIRAGANA LETTER DU */
-  IBUS_KEY_dead_voiced_sound, 0x3066, 0, 0, 0,
-    0, 0x3067, /* U3067 # HIRAGANA LETTER DE */
-  IBUS_KEY_dead_voiced_sound, 0x3068, 0, 0, 0,
-    0, 0x3069, /* U3069 # HIRAGANA LETTER DO */
-  IBUS_KEY_dead_voiced_sound, 0x306F, 0, 0, 0,
-    0, 0x3070, /* U3070 # HIRAGANA LETTER BA */
-  IBUS_KEY_dead_voiced_sound, 0x3072, 0, 0, 0,
-    0, 0x3073, /* U3073 # HIRAGANA LETTER BI */
-  IBUS_KEY_dead_voiced_sound, 0x3075, 0, 0, 0,
-    0, 0x3076, /* U3076 # HIRAGANA LETTER BU */
-  IBUS_KEY_dead_voiced_sound, 0x3078, 0, 0, 0,
-    0, 0x3079, /* U3079 # HIRAGANA LETTER BE */
-  IBUS_KEY_dead_voiced_sound, 0x307B, 0, 0, 0,
-    0, 0x307C, /* U307C # HIRAGANA LETTER BO */
-  IBUS_KEY_dead_voiced_sound, 0x309D, 0, 0, 0,
-    0, 0x309E, /* U309E # HIRAGANA VOICED ITERATION MARK */
-  IBUS_KEY_dead_voiced_sound, 0x30F0, 0, 0, 0,
-    0, 0x30F8, /* U30F8 # KATAKANA LETTER VI */
-  IBUS_KEY_dead_voiced_sound, 0x30F1, 0, 0, 0,
-    0, 0x30F9, /* U30F9 # KATAKANA LETTER VE */
-  IBUS_KEY_dead_voiced_sound, 0x30FD, 0, 0, 0,
-    0, 0x30FE, /* U30FE # KATAKANA VOICED ITERATION MARK */
-  IBUS_KEY_dead_semivoiced_sound, 0x306F, 0, 0, 0,
-    0, 0x3071, /* U3071 # HIRAGANA LETTER PA */
-  IBUS_KEY_dead_semivoiced_sound, 0x3072, 0, 0, 0,
-    0, 0x3074, /* U3074 # HIRAGANA LETTER PI */
-  IBUS_KEY_dead_semivoiced_sound, 0x3075, 0, 0, 0,
-    0, 0x3077, /* U3077 # HIRAGANA LETTER PU */
-  IBUS_KEY_dead_semivoiced_sound, 0x3078, 0, 0, 0,
-    0, 0x307A, /* U307A # HIRAGANA LETTER PE */
-  IBUS_KEY_dead_semivoiced_sound, 0x307B, 0, 0, 0,
-    0, 0x307D, /* U307D # HIRAGANA LETTER PO */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_A, 0, 0, 0,
-    0, 0x0200, /* U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_E, 0, 0, 0,
-    0, 0x0204, /* U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_I, 0, 0, 0,
-    0, 0x0208, /* U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_O, 0, 0, 0,
-    0, 0x020C, /* U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_R, 0, 0, 0,
-    0, 0x0210, /* U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_U, 0, 0, 0,
-    0, 0x0214, /* U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_a, 0, 0, 0,
-    0, 0x0201, /* U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_e, 0, 0, 0,
-    0, 0x0205, /* U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_i, 0, 0, 0,
-    0, 0x0209, /* U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_o, 0, 0, 0,
-    0, 0x020D, /* U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_r, 0, 0, 0,
-    0, 0x0211, /* U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, IBUS_KEY_u, 0, 0, 0,
-    0, 0x0215, /* U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE */
-  IBUS_KEY_dead_doublegrave, 0x0474, 0, 0, 0,
-    0, 0x0476, /* U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
-  IBUS_KEY_dead_doublegrave, 0x0475, 0, 0, 0,
-    0, 0x0477, /* U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT */
-  IBUS_KEY_dead_belowring, IBUS_KEY_A, 0, 0, 0,
-    0, 0x1E00, /* U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW */
-  IBUS_KEY_dead_belowring, IBUS_KEY_a, 0, 0, 0,
-    0, 0x1E01, /* U1E01 # LATIN SMALL LETTER A WITH RING BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_B, 0, 0, 0,
-    0, 0x1E06, /* U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_D, 0, 0, 0,
-    0, 0x1E0E, /* U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_K, 0, 0, 0,
-    0, 0x1E34, /* U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_L, 0, 0, 0,
-    0, 0x1E3A, /* U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_N, 0, 0, 0,
-    0, 0x1E48, /* U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_R, 0, 0, 0,
-    0, 0x1E5E, /* U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_T, 0, 0, 0,
-    0, 0x1E6E, /* U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_Z, 0, 0, 0,
-    0, 0x1E94, /* U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_b, 0, 0, 0,
-    0, 0x1E07, /* U1E07 # LATIN SMALL LETTER B WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_d, 0, 0, 0,
-    0, 0x1E0F, /* U1E0F # LATIN SMALL LETTER D WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_h, 0, 0, 0,
-    0, 0x1E96, /* U1E96 # LATIN SMALL LETTER H WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_k, 0, 0, 0,
-    0, 0x1E35, /* U1E35 # LATIN SMALL LETTER K WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_l, 0, 0, 0,
-    0, 0x1E3B, /* U1E3B # LATIN SMALL LETTER L WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_n, 0, 0, 0,
-    0, 0x1E49, /* U1E49 # LATIN SMALL LETTER N WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_r, 0, 0, 0,
-    0, 0x1E5F, /* U1E5F # LATIN SMALL LETTER R WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_t, 0, 0, 0,
-    0, 0x1E6F, /* U1E6F # LATIN SMALL LETTER T WITH LINE BELOW */
-  IBUS_KEY_dead_belowmacron, IBUS_KEY_z, 0, 0, 0,
-    0, 0x1E95, /* U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_D, 0, 0, 0,
-    0, 0x1E12, /* U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_E, 0, 0, 0,
-    0, 0x1E18, /* U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_L, 0, 0, 0,
-    0, 0x1E3C, /* U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_N, 0, 0, 0,
-    0, 0x1E4A, /* U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_T, 0, 0, 0,
-    0, 0x1E70, /* U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_U, 0, 0, 0,
-    0, 0x1E76, /* U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_d, 0, 0, 0,
-    0, 0x1E13, /* U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_e, 0, 0, 0,
-    0, 0x1E19, /* U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_l, 0, 0, 0,
-    0, 0x1E3D, /* U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_n, 0, 0, 0,
-    0, 0x1E4B, /* U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_t, 0, 0, 0,
-    0, 0x1E71, /* U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowcircumflex, IBUS_KEY_u, 0, 0, 0,
-    0, 0x1E77, /* U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */
-  IBUS_KEY_dead_belowtilde, IBUS_KEY_E, 0, 0, 0,
-    0, 0x1E1A, /* U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW */
-  IBUS_KEY_dead_belowtilde, IBUS_KEY_I, 0, 0, 0,
-    0, 0x1E2C, /* U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW */
-  IBUS_KEY_dead_belowtilde, IBUS_KEY_U, 0, 0, 0,
-    0, 0x1E74, /* U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW */
-  IBUS_KEY_dead_belowtilde, IBUS_KEY_e, 0, 0, 0,
-    0, 0x1E1B, /* U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW */
-  IBUS_KEY_dead_belowtilde, IBUS_KEY_i, 0, 0, 0,
-    0, 0x1E2D, /* U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW */
-  IBUS_KEY_dead_belowtilde, IBUS_KEY_u, 0, 0, 0,
-    0, 0x1E75, /* U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW */
-  IBUS_KEY_dead_belowbreve, IBUS_KEY_H, 0, 0, 0,
-    0, 0x1E2A, /* U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW */
-  IBUS_KEY_dead_belowbreve, IBUS_KEY_h, 0, 0, 0,
-    0, 0x1E2B, /* U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW */
-  IBUS_KEY_dead_belowdiaeresis, IBUS_KEY_U, 0, 0, 0,
-    0, 0x1E72, /* U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */
-  IBUS_KEY_dead_belowdiaeresis, IBUS_KEY_u, 0, 0, 0,
-    0, 0x1E73, /* U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_A, 0, 0, 0,
-    0, 0x0202, /* U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_E, 0, 0, 0,
-    0, 0x0206, /* U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_I, 0, 0, 0,
-    0, 0x020A, /* U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_O, 0, 0, 0,
-    0, 0x020E, /* U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_R, 0, 0, 0,
-    0, 0x0212, /* U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_U, 0, 0, 0,
-    0, 0x0216, /* U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_a, 0, 0, 0,
-    0, 0x0203, /* U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_e, 0, 0, 0,
-    0, 0x0207, /* U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_i, 0, 0, 0,
-    0, 0x020B, /* U020B # LATIN SMALL LETTER I WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_o, 0, 0, 0,
-    0, 0x020F, /* U020F # LATIN SMALL LETTER O WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_r, 0, 0, 0,
-    0, 0x0213, /* U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE */
-  IBUS_KEY_dead_invertedbreve, IBUS_KEY_u, 0, 0, 0,
-    0, 0x0217, /* U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE */
-  IBUS_KEY_dead_belowcomma, IBUS_KEY_S, 0, 0, 0,
-    0, 0x0218, /* U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW */
-  IBUS_KEY_dead_belowcomma, IBUS_KEY_T, 0, 0, 0,
-    0, 0x021A, /* U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW */
-  IBUS_KEY_dead_belowcomma, IBUS_KEY_s, 0, 0, 0,
-    0, 0x0219, /* U0219 # LATIN SMALL LETTER S WITH COMMA BELOW */
-  IBUS_KEY_dead_belowcomma, IBUS_KEY_t, 0, 0, 0,
-    0, 0x021B, /* U021B # LATIN SMALL LETTER T WITH COMMA BELOW */
-  IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_slash, 0, 0,
-    0, 0x301E, /* U301e # DOUBLE PRIME QUOTATION MARK */
-  IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_backslash, 0, 0,
-    0, 0x301D, /* U301d # REVERSED DOUBLE PRIME QUOTATION MARK */
-  IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x03D2, 0, 0,
-    0, 0x03D3, /* U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL */
-  IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_5, IBUS_KEY_0, IBUS_KEY_parenright,
-    0, 0x32BF, /* U32BF # CIRCLED NUMBER FIFTY */
-  IBUS_KEY_Multi_key, IBUS_KEY_parenleft, IBUS_KEY_KP_5, IBUS_KEY_0, IBUS_KEY_parenright,
-    0, 0x32BF, /* U32BF # CIRCLED NUMBER FIFTY */
-  IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_E, 0, 0,
-    0, 0x0228, /* U0228 # LATIN CAPITAL LETTER E WITH CEDILLA */
-  IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_e, 0, 0,
-    0, 0x0229, /* U0229 # LATIN SMALL LETTER E WITH CEDILLA */
-  IBUS_KEY_Multi_key, IBUS_KEY_period, 0x1E63, 0, 0,
-    0, 0x1E69, /* U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */
-  IBUS_KEY_Multi_key, IBUS_KEY_question, IBUS_KEY_exclam, 0, 0,
-    0, 0x203D, /* U203D # INTERROBANG */
-  IBUS_KEY_Multi_key, IBUS_KEY_L, IBUS_KEY_equal, 0, 0,
-    0, 0x20A4, /* U20a4 # LIRA SIGN */
-  IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_comma, IBUS_KEY_E, 0,
-    0, 0x1E1C, /* U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
-  IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_comma, IBUS_KEY_e, 0,
-    0, 0x1E1D, /* U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
-  IBUS_KEY_Multi_key, IBUS_KEY_d, IBUS_KEY_minus, 0, 0,
-    0, 0x20AB, /* U20ab # DONG SIGN */
-  IBUS_KEY_Multi_key, IBUS_KEY_e, IBUS_KEY_e, 0, 0,
+  IBUS_KEY_dead_acute, IBUS_KEY_C, 0, 0,
+    0, 0x00C7, /* Ccedilla	# LATIN CAPITAL LETTER C WITH CEDILLA */
+  IBUS_KEY_dead_acute, IBUS_KEY_c, 0, 0,
+    0, 0x00E7, /* ccedilla	# LATIN SMALL LETTER C WITH CEDILLA */
+  IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_slash, 0,
+    0, 0x301E, /* U301e	# DOUBLE PRIME QUOTATION MARK */
+  IBUS_KEY_Multi_key, IBUS_KEY_quotedbl, IBUS_KEY_backslash, 0,
+    0, 0x301D, /* U301d	# REVERSED DOUBLE PRIME QUOTATION MARK */
+  IBUS_KEY_Multi_key, IBUS_KEY_apostrophe, 0x03D2, 0,
+    0, 0x03D3, /* U03D3	# GREEK UPSILON WITH ACUTE AND HOOK SYMBOL */
+  IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_E, 0,
+    0, 0x0228, /* U0228	# LATIN CAPITAL LETTER E WITH CEDILLA */
+  IBUS_KEY_Multi_key, IBUS_KEY_comma, IBUS_KEY_e, 0,
+    0, 0x0229, /* U0229	# LATIN SMALL LETTER E WITH CEDILLA */
+  IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_comma, IBUS_KEY_E,
+    0, 0x1E1C, /* U1E1C	# LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */
+  IBUS_KEY_Multi_key, IBUS_KEY_U, IBUS_KEY_comma, IBUS_KEY_e,
+    0, 0x1E1D, /* U1E1D	# LATIN SMALL LETTER E WITH CEDILLA AND BREVE */
+  IBUS_KEY_Multi_key, IBUS_KEY_e, IBUS_KEY_e, 0,
     0, 0x018F, /* U018f */
-  IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x03D2, 0, 0,
-    0, 0x03D3, /* U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL */
-  IBUS_KEY_Multi_key, 0x2203, 0x0338, 0, 0,
-    0, 0x2204, /* U2204 # THERE DOES NOT EXIST */
-  IBUS_KEY_Multi_key, 0x2208, 0x0338, 0, 0,
-    0, 0x2209, /* U2209 # NOT AN ELEMENT OF */
-  IBUS_KEY_Multi_key, 0x220B, 0x0338, 0, 0,
-    0, 0x220C, /* U220C # DOES NOT CONTAIN AS MEMBER */
-  IBUS_KEY_Multi_key, 0x2223, 0x0338, 0, 0,
-    0, 0x2224, /* U2224 # DOES NOT DIVIDE */
-  IBUS_KEY_Multi_key, 0x2225, 0x0338, 0, 0,
-    0, 0x2226, /* U2226 # NOT PARALLEL TO */
-  IBUS_KEY_Multi_key, 0x2286, 0x0338, 0, 0,
-    0, 0x2288, /* U2288 # NEITHER A SUBSET OF NOR EQUAL TO */
-  IBUS_KEY_Multi_key, 0x2287, 0x0338, 0, 0,
-    0, 0x2289, /* U2289 # NEITHER A SUPERSET OF NOR EQUAL TO */
-  IBUS_KEY_Multi_key, 0x2291, 0x0338, 0, 0,
-    0, 0x22E2, /* U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO */
-  IBUS_KEY_Multi_key, 0x2292, 0x0338, 0, 0,
-    0, 0x22E3, /* U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO */
-  IBUS_KEY_Multi_key, 0x22B4, 0x0338, 0, 0,
-    0, 0x22EC, /* U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO */
-  IBUS_KEY_Multi_key, 0x22B5, 0x0338, 0, 0,
-    0, 0x22ED  /* U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL */
+  IBUS_KEY_Multi_key, IBUS_KEY_acute, 0x03D2, 0,
+    0, 0x03D3  /* U03D3	# GREEK UPSILON WITH ACUTE AND HOOK SYMBOL */
 };
 
 static const IBusComposeTable ibus_compose_table_pt_br = {
     ibus_compose_seqs_pt_br,
-    5,
-    G_N_ELEMENTS (ibus_compose_seqs_pt_br) / (5 + 2)
+    4,
+    G_N_ELEMENTS (ibus_compose_seqs_pt_br) / (4 + 2)
 };
 
 static const IBusComposeTableLocaleList ibus_compose_table_locale_list[] = {
-- 
1.8.5.3

From a5300750e38b5327bdd255d777544d0c0ebcb4d9 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 24 Jun 2014 11:24:40 +0900
Subject: [PATCH] Do not sort ibus engines when they are saved by
 ibus-setup.

ibus 1.5 changes the engine order with Super+space shortcut key
and now ibus-setup shows the sorted engines by longname on UI.
This fixes not to save the sorted order with ibus-setup.

TEST=setup

Review URL: https://codereview.appspot.com/102610044
---
 setup/enginetreeview.py | 13 ++++++++-----
 setup/main.py           |  3 ++-
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py
index b116c54..3ab81b7 100644
--- a/setup/enginetreeview.py
+++ b/setup/enginetreeview.py
@@ -47,7 +47,7 @@ class EngineTreeView(Gtk.TreeView):
     def __init__(self):
         super(EngineTreeView, self).__init__()
 
-        self.__engines = set([])
+        self.__engines = []
         self.__changed = False
 
         # self.set_headers_visible(True)
@@ -186,13 +186,13 @@ class EngineTreeView(Gtk.TreeView):
 
     def set_engines(self, engines):
         self.__model.clear()
-        self.__engines = set([])
+        self.__engines = []
         for e in engines:
             if e in self.__engines:
                 continue
             it = self.__model.append(None)
             self.__model.set(it, 0, e)
-            self.__engines.add(e)
+            self.__engines.append(e)
         self.__emit_changed()
 
     def get_selected_iter(self):
@@ -201,6 +201,9 @@ class EngineTreeView(Gtk.TreeView):
             return selection.get_selected()[1]
 
     def get_engines(self):
+        return self.__engines
+
+    def get_sorted_engines(self):
         return self.get_property("engines")
 
     def get_active_engine(self):
@@ -211,7 +214,7 @@ class EngineTreeView(Gtk.TreeView):
             return
         it = self.__model.prepend(None)
         self.__model.set(it, 0, engine)
-        self.__engines.add(engine)
+        self.__engines = [engine] + self.__engines
         self.scroll_to_cell(self.__model[0].path, None)
 
     def append_engine(self, engine):
@@ -219,7 +222,7 @@ class EngineTreeView(Gtk.TreeView):
             return
         it = self.__model.append(None)
         self.__model.set(it, 0, engine)
-        self.__engines.add(engine)
+        self.__engines.append(engine)
         self.scroll_to_cell(self.__model[-1].path, None)
 
     def remove_engine(self):
diff --git a/setup/main.py b/setup/main.py
index dee7be4..1d89f3d 100644
--- a/setup/main.py
+++ b/setup/main.py
@@ -274,7 +274,7 @@ class Setup(object):
         if prop.name not in ("active-engine", "engines"):
             return
 
-        engines = self.__treeview.get_engines()
+        engines = self.__treeview.get_sorted_engines()
         engine = self.__treeview.get_active_engine()
 
         self.__builder.get_object("button_engine_remove").set_sensitive(engine != None)
@@ -289,6 +289,7 @@ class Setup(object):
             obj.set_sensitive(False)
 
         if prop.name == "engines":
+            engines = self.__treeview.get_engines()
             engine_names = [e.get_name() for e in engines]
             self.__settings_general.set_strv('preload-engines', engine_names)
 
-- 
1.8.5.3

From 8ef258ec31f12405e4f5ded6a7a4d80114a219d4 Mon Sep 17 00:00:00 2001
From: Osamu Aoki <osamu@debian.org>
Date: Thu, 3 Jul 2014 11:39:32 +0900
Subject: [PATCH] Use "keycode Linux_keycode = X11_keysym" format

Delete non-Linux keyboard compatibility.

These are tested for both PC and Mac. Using showkey and xev

Notably:

  Hangul = Eisuu-on-mac-keyboard
  Hangul_Hanja = Kana/kana -on-mac-keyboard

BUG=http://code.google.com/p/ibus/issues/detail?id=1724
TEST=data/keymaps/keycode.py

Review URL: https://codereview.appspot.com/106250045
Patch from Osamu Aoki <osamu@debian.org>.
---
 data/keymaps/jp | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/data/keymaps/jp b/data/keymaps/jp
index 2c78347..e5546fa 100644
--- a/data/keymaps/jp
+++ b/data/keymaps/jp
@@ -31,11 +31,14 @@ keycode 52 = period
 keycode 53 = slash
     shift keycode 53 = question
     shift keycode 58 = Eisu_toggle
-    shift keycode 84 = Execute
-keycode 112 = Katakana
-keycode 115 = backslash
-    shift keycode 115 = underscore
-keycode 121 = Henkan_Mode
-keycode 123 = Muhenkan
+keycode 89 = backslash
+    shift keycode 89 = underscore
+keycode 92 = Henkan_Mode
+keycode 93 = Hiragana_Katakana
+keycode 94 = Muhenkan
 keycode 124 = yen
     shift keycode 124 = bar
+keycode 122 = Hangul
+keycode 123 = Hangul_Hanja
+    shift keycode 84 = Execute
+keycode 112 = Katakana
-- 
1.8.5.3

From 3dcf24742216d6234a45ace1b433b864efdf08a2 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 4 Jul 2014 16:03:57 +0900
Subject: [PATCH] Add ibus reset-config and read-config sub-commands.

BUG=rhbz#530711
TEST=tools/ibus

Review URL: https://codereview.appspot.com/103670044
---
 tools/main.vala | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/tools/main.vala b/tools/main.vala
index db4fd23..ecce80a 100644
--- a/tools/main.vala
+++ b/tools/main.vala
@@ -20,6 +20,12 @@
  * USA
  */
 
+private const string[] IBUS_SCHEMAS = {
+    "org.freedesktop.ibus.general",
+    "org.freedesktop.ibus.general.hotkey",
+    "org.freedesktop.ibus.panel",
+};
+
 bool name_only = false;
 /* system() exists as a public API. */
 bool is_system = false;
@@ -276,6 +282,44 @@ int print_address(string[] argv) {
     return Posix.EXIT_SUCCESS;
 }
 
+int read_config(string[] argv) {
+    var output = new GLib.StringBuilder();
+
+    foreach (string schema in IBUS_SCHEMAS) {
+        GLib.Settings settings = new GLib.Settings(schema);
+
+        output.append_printf("SCHEMA: %s\n", schema);
+
+        foreach (string key in settings.list_keys()) {
+            GLib.Variant variant = settings.get_value(key);
+            output.append_printf("  %s: %s\n", key, variant.print(true));
+        }
+    }
+    print("%s", output.str);
+
+    return Posix.EXIT_SUCCESS;
+}
+
+int reset_config(string[] argv) {
+    print("%s\n", _("Resetting…"));
+
+    foreach (string schema in IBUS_SCHEMAS) {
+        GLib.Settings settings = new GLib.Settings(schema);
+
+        print("SCHEMA: %s\n", schema);
+
+        foreach (string key in settings.list_keys()) {
+            print("  %s\n", key);
+            settings.reset(key);
+        }
+    }
+
+    GLib.Settings.sync();
+    print("%s\n", _("Done"));
+
+    return Posix.EXIT_SUCCESS;
+}
+
 int print_help(string[] argv) {
     print_usage(stdout);
     return Posix.EXIT_SUCCESS;
@@ -299,6 +343,8 @@ static const CommandEntry commands[]  = {
     { "read-cache", N_("Show the content of registry cache"), read_cache },
     { "write-cache", N_("Create registry cache"), write_cache },
     { "address", N_("Print the D-Bus address of ibus-daemon"), print_address },
+    { "read-config", N_("Show the configuration values"), read_config },
+    { "reset-config", N_("Reset the configuration values"), reset_config },
     { "help", N_("Show this information"), print_help }
 };
 
@@ -308,7 +354,7 @@ void print_usage(FileStream stream) {
     stream.printf(_("Usage: %s COMMAND [OPTION...]\n\n"), program_name);
     stream.printf(_("Commands:\n"));
     for (int i = 0; i < commands.length; i++) {
-        stream.printf("  %-11s    %s\n",
+        stream.printf("  %-12s    %s\n",
                       commands[i].name,
                       GLib.dgettext(null, commands[i].description));
     }
-- 
1.8.5.3

From 9e5a2bd2c40f9eed8d99710b63b3dab737aa9b95 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 8 Jul 2014 11:42:12 +0900
Subject: [PATCH] Update ibus(1) for read-config and reset-config.

TEST=tools/ibus.1.gz

Review URL: https://codereview.appspot.com/111900044
---
 tools/ibus.1.in | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/ibus.1.in b/tools/ibus.1.in
index ab99db4..6ac92ff 100644
--- a/tools/ibus.1.in
+++ b/tools/ibus.1.in
@@ -85,6 +85,13 @@ directories, separated by ':'.
 \fBaddress\fR
 Show the D-Bus address of ibus-daemon.
 .TP
+\fBread\-config\fR
+Print the setting values in a gsettings configuration file.
+.TP
+\fBreset\-config\fR
+Reset the user setting values to the default ones in a gsettings
+configuration file.
+.TP
 \fBwatch\fR
 Under construction.
 .TP
-- 
1.8.5.3

From 10483bfebd1f51ffa52ad7d017193ae728f93bf5 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Thu, 10 Jul 2014 11:54:30 +0900
Subject: [PATCH] Fix ibus-setup SEGV in enginetreeview.py

When an engine is added on ibus-setup, enginetreeview.append_engine()
calls self.__model.append(None) and it causes engine == None in
__icon_cell_data_cb() and __name_cell_data_cb() in enginetreeview
with python3-gobject 3.13.x which version has implemented several
deprecated warnings in gi/overrides/Gtk.py .
I think this problem also could happen in the old versions if
the system would be slow.

BUG=rhbz#1048429
TEST=setup in Fedora 21

Review URL: https://codereview.appspot.com/104620043
---
 setup/enginetreeview.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py
index 3ab81b7..afb23fc 100644
--- a/setup/enginetreeview.py
+++ b/setup/enginetreeview.py
@@ -128,12 +128,25 @@ class EngineTreeView(Gtk.TreeView):
     def __icon_cell_data_cb(self, celllayout, renderer, model, it, data):
         engine = self.__model.get_value(it, 0)
 
+        # When append_engine() is called, self.__model.append(None)
+        # is called internally and engine == None could happen in
+        # a slow system.
+        if engine == None:
+            return
+
         icon_size = Gtk.icon_size_lookup(Gtk.IconSize.LARGE_TOOLBAR)[0]
         pixbuf = load_icon(engine.get_icon(), Gtk.IconSize.LARGE_TOOLBAR)
         renderer.set_property("pixbuf", pixbuf)
 
     def __name_cell_data_cb(self, celllayout, renderer, model, it, data):
         engine = self.__model.get_value(it, 0)
+
+        # When append_engine() is called, self.__model.append(None)
+        # is called internally and engine == None could happen in
+        # a slow system.
+        if engine == None:
+            return
+
         renderer.set_property("sensitive", True)
         language = IBus.get_language_name(engine.get_language())
         renderer.set_property("text",
@@ -215,7 +228,6 @@ class EngineTreeView(Gtk.TreeView):
         it = self.__model.prepend(None)
         self.__model.set(it, 0, engine)
         self.__engines = [engine] + self.__engines
-        self.scroll_to_cell(self.__model[0].path, None)
 
     def append_engine(self, engine):
         if engine == None or engine in self.__engines:
@@ -223,7 +235,6 @@ class EngineTreeView(Gtk.TreeView):
         it = self.__model.append(None)
         self.__model.set(it, 0, engine)
         self.__engines.append(engine)
-        self.scroll_to_cell(self.__model[-1].path, None)
 
     def remove_engine(self):
         it = self.get_selected_iter()
-- 
1.8.5.3

From a17dc8e8bd288adedb77ae417d6825419337daae Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 11 Jul 2014 11:45:05 +0900
Subject: [PATCH] Fix deprecated warnings with python3-gobject 3.13.3.

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

/usr/share/ibus/setup/main.py:74: PyGIDeprecationWarning:
Using positional arguments with the GObject constructor has been
deprecated. Please specify keyword(s) for "schema" or use a class
specific constructor.
See: https://wiki.gnome.org/PyGObject/InitializerDeprecations

/usr/share/ibus/setup/main.py:364: PyGTKDeprecationWarning:
The keyword(s) "type" have been deprecated in favor of "message_type"
respectively.
See: https://wiki.gnome.org/PyGObject/InitializerDeprecations

TEST=setup

Review URL: https://codereview.appspot.com/110990044
---
 setup/engineabout.py      | 12 +++++++-----
 setup/keyboardshortcut.py | 32 ++++++++++++++++++--------------
 setup/main.py             | 30 ++++++++++++++++++------------
 setup/setup.ui            |  2 ++
 4 files changed, 45 insertions(+), 31 deletions(-)

diff --git a/setup/engineabout.py b/setup/engineabout.py
index 50ab001..09e9b5c 100644
--- a/setup/engineabout.py
+++ b/setup/engineabout.py
@@ -29,12 +29,14 @@ from gi.repository import Pango
 from i18n import _, N_
 
 class EngineAbout(Gtk.Dialog):
-    def __init__(self, enginedesc):
-        self.__engine_desc = enginedesc
-        super(EngineAbout, self).__init__(_("About"), None,
-                Gtk.DialogFlags.MODAL,
-                (_("_Close"), Gtk.ResponseType.CLOSE))
+    def __init__(self, engine, transient_for = None):
+        self.__engine_desc = engine
+        super(EngineAbout, self).__init__(
+                title = _("About"),
+                transient_for = transient_for)
 
+        buttons = (_("_Close"), Gtk.ResponseType.CLOSE)
+        self.add_buttons(*buttons)
         self.__init_ui()
 
     def __init_ui(self):
diff --git a/setup/keyboardshortcut.py b/setup/keyboardshortcut.py
index d82fea8..91595f7 100644
--- a/setup/keyboardshortcut.py
+++ b/setup/keyboardshortcut.py
@@ -49,7 +49,8 @@ class KeyboardShortcutSelection(Gtk.Box):
         # self.pack_start(label, False, True, 4)
 
         # shortcuts view
-        self.__shortcut_view = Gtk.TreeView(Gtk.ListStore(GObject.TYPE_STRING))
+        self.__shortcut_view = Gtk.TreeView(
+                model = Gtk.ListStore(GObject.TYPE_STRING))
         self.__shortcut_view.set_size_request(-1, 100)
         renderer = Gtk.CellRendererText()
         column = Gtk.TreeViewColumn(_("Keyboard shortcuts"), renderer, text = 0)
@@ -63,7 +64,7 @@ class KeyboardShortcutSelection(Gtk.Box):
 
         # key code
         hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
-        label = Gtk.Label(_("Key code:"))
+        label = Gtk.Label(label = _("Key code:"))
         label.set_justify(Gtk.Justification.LEFT)
         label.set_alignment(0.0, 0.5)
         hbox.pack_start(label, False, True, 4)
@@ -71,19 +72,19 @@ class KeyboardShortcutSelection(Gtk.Box):
         self.__keycode_entry = Gtk.Entry()
         self.__keycode_entry.connect("notify::text", self.__keycode_entry_notify_cb)
         hbox.pack_start(self.__keycode_entry, True, True, 4)
-        self.__keycode_button = Gtk.Button("...")
+        self.__keycode_button = Gtk.Button(label = "...")
         self.__keycode_button.connect("clicked", self.__keycode_button_clicked_cb)
         hbox.pack_start(self.__keycode_button, False, True, 4)
         self.pack_start(hbox, False, True, 4)
 
         # modifiers
         hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
-        label = Gtk.Label(_("Modifiers:"))
+        label = Gtk.Label(label = _("Modifiers:"))
         label.set_justify(Gtk.Justification.LEFT)
         label.set_alignment(0.0, 0.5)
         hbox.pack_start(label, False, True, 4)
 
-        table = Gtk.Table(4, 2)
+        table = Gtk.Table(n_rows = 4, n_columns = 2)
         self.__modifier_buttons = []
         self.__modifier_buttons.append(("Control",
                                         Gtk.CheckButton.new_with_mnemonic("_Control"),
@@ -250,8 +251,10 @@ class KeyboardShortcutSelection(Gtk.Box):
 
     def __keycode_button_clicked_cb(self, button):
         out = []
-        dlg = Gtk.MessageDialog(parent = self.get_toplevel(), buttons = Gtk.ButtonsType.CLOSE)
-        message = _("Please press a key (or a key combination).\nThe dialog will be closed when the key is released.")
+        dlg = Gtk.MessageDialog(transient_for = self.get_toplevel(),
+                                buttons = Gtk.ButtonsType.CLOSE)
+        message = _("Please press a key (or a key combination).\n" \
+                    "The dialog will be closed when the key is released.")
         dlg.set_markup(message)
         dlg.set_title(_("Please press a key (or a key combination)"))
         sw = Gtk.ScrolledWindow()
@@ -265,7 +268,7 @@ class KeyboardShortcutSelection(Gtk.Box):
         model = Gtk.ListStore(GObject.TYPE_INT,
                               GObject.TYPE_UINT,
                               GObject.TYPE_UINT)
-        accel_view = Gtk.TreeView(model)
+        accel_view = Gtk.TreeView(model = model)
         sw.add(accel_view)
         column = Gtk.TreeViewColumn()
         renderer = Gtk.CellRendererAccel(accel_mode=Gtk.CellRendererAccelMode.OTHER,
@@ -315,8 +318,9 @@ class KeyboardShortcutSelection(Gtk.Box):
         self.__apply_button.set_sensitive(False)
 
 class KeyboardShortcutSelectionDialog(Gtk.Dialog):
-    def __init__(self, title = None, parent = None, flags = 0, buttons = None):
-        super(KeyboardShortcutSelectionDialog, self).__init__(title, parent, flags, buttons)
+    def __init__(self, title = None, transient_for = None, flags = 0):
+        super(KeyboardShortcutSelectionDialog, self).__init__(
+                title = title, transient_for = transient_for, flags = flags)
         self.__selection_view = KeyboardShortcutSelection()
         self.vbox.pack_start(self.__selection_view, False, True, 0)
         self.vbox.show_all()
@@ -333,10 +337,10 @@ class KeyboardShortcutSelectionDialog(Gtk.Dialog):
 
 
 if __name__ == "__main__":
-    dlg = KeyboardShortcutSelectionDialog(
-        title = "Select test",
-        buttons = (_("_Cancel"), Gtk.ResponseType.CANCEL,
-                   _("_OK"), Gtk.ResponseType.OK))
+    dlg = KeyboardShortcutSelectionDialog(title = "Select test")
+    buttons = (_("_Cancel"), Gtk.ResponseType.CANCEL,
+               _("_OK"), Gtk.ResponseType.OK)
+    dlg.add_buttons(buttons)
     dlg.add_shortcut("Control+Shift+space")
     dlg.set_shortcuts(None)
     print((dlg.run()))
diff --git a/setup/main.py b/setup/main.py
index 1d89f3d..1bc9cfb 100644
--- a/setup/main.py
+++ b/setup/main.py
@@ -70,10 +70,12 @@ class Setup(object):
     def __init__(self):
         super(Setup, self).__init__()
 
-        self.__settings_general = Gio.Settings("org.freedesktop.ibus.general");
+        self.__settings_general = Gio.Settings(
+                schema = "org.freedesktop.ibus.general");
         self.__settings_hotkey = Gio.Settings(
-                "org.freedesktop.ibus.general.hotkey");
-        self.__settings_panel = Gio.Settings("org.freedesktop.ibus.panel");
+                schema = "org.freedesktop.ibus.general.hotkey");
+        self.__settings_panel = Gio.Settings(
+                schema = "org.freedesktop.ibus.panel");
 
         # IBus.Bus() calls ibus_bus_new().
         # Gtk.Builder().add_from_file() also calls ibus_bus_new_async()
@@ -300,7 +302,7 @@ class Setup(object):
     def __button_engine_about_cb(self, button):
         engine = self.__treeview.get_active_engine()
         if engine:
-            about = EngineAbout(engine)
+            about = EngineAbout(engine = engine, transient_for = self.__window)
             about.run()
             about.destroy()
 
@@ -328,7 +330,7 @@ class Setup(object):
             return
 
         message = _("The IBus daemon is not running. Do you wish to start it?")
-        dlg = Gtk.MessageDialog(type = Gtk.MessageType.QUESTION,
+        dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.QUESTION,
                                 buttons = Gtk.ButtonsType.YES_NO,
                                 text = message)
         id = dlg.run()
@@ -354,7 +356,7 @@ class Setup(object):
                 "  export XMODIFIERS=@im=ibus\n"
                 "  export QT_IM_MODULE=ibus"
                 )
-            dlg = Gtk.MessageDialog(type = Gtk.MessageType.INFO,
+            dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.INFO,
                                     buttons = Gtk.ButtonsType.OK,
                                     text = message)
             id = dlg.run()
@@ -363,7 +365,7 @@ class Setup(object):
         else:
             # Translators: %d == 5 currently
             message = _("IBus daemon could not be started in %d seconds")
-            dlg = Gtk.MessageDialog(type = Gtk.MessageType.INFO,
+            dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.INFO,
                                     buttons = Gtk.ButtonsType.OK,
                                     text = message % timeout)
             id = dlg.run()
@@ -378,7 +380,9 @@ class Setup(object):
         # Translators: Title of the window
         title2 = _("switching input methods")
         title = title1 % title2
-        dialog = keyboardshortcut.KeyboardShortcutSelectionDialog(buttons = buttons, title = title)
+        dialog = keyboardshortcut.KeyboardShortcutSelectionDialog(
+                title = title, transient_for = self.__window)
+        dialog.add_buttons(*buttons)
         text = entry.get_text()
         if text:
             shortcuts = text.split("; ")
@@ -409,9 +413,10 @@ class Setup(object):
             try:
                 self.__bus.register_start_engine(data[DATA_LANG], data[DATA_NAME])
             except Exception as e:
-                dlg = Gtk.MessageDialog(type = Gtk.MessageType.ERROR,
+                dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.ERROR,
+                        transient_for = self.__window,
                         buttons = Gtk.ButtonsType.CLOSE,
-                        message_format = str(e))
+                        text = str(e))
                 dlg.run()
                 dlg.destroy()
                 self.__flush_gtk_events()
@@ -420,9 +425,10 @@ class Setup(object):
             try:
                 self.__bus.register_stop_engine(data[DATA_LANG], data[DATA_NAME])
             except Exception as e:
-                dlg = Gtk.MessageDialog(type = Gtk.MessageType.ERROR,
+                dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.ERROR,
+                        transient_for = self.__window,
                         buttons = Gtk.ButtonsType.CLOSE,
-                        message_format = str(e))
+                        text = str(e))
                 dlg.run()
                 dlg.destroy()
                 self.__flush_gtk_events()
diff --git a/setup/setup.ui b/setup/setup.ui
index bb78433..d7801ea 100644
--- a/setup/setup.ui
+++ b/setup/setup.ui
@@ -62,6 +62,8 @@
     <property name="resizable">False</property>
     <property name="window_position">center-always</property>
     <property name="icon_name">ibus-setup</property>
+    <!-- for GtkFontChooserDialog -->
+    <property name="modal">True</property>
     <child>
       <object class="GtkBox" id="vbox1">
         <property name="orientation">vertical</property>
-- 
1.8.5.3

From b1b4e2946682e3d53aa396d8469c7fa16a2dbca8 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Fri, 11 Jul 2014 11:50:04 +0900
Subject: [PATCH] Export the 'IBUS_SETUP_XID' environment variable for each
 engine setup.

Follow GNOME_CONTROL_CENTER_XID.
https://wiki.gnome.org/AllanDay/IMEGuidelines

TEST=setup

Review URL: https://codereview.appspot.com/112920044
---
 setup/main.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/setup/main.py b/setup/main.py
index 1bc9cfb..e4ddd45 100644
--- a/setup/main.py
+++ b/setup/main.py
@@ -28,6 +28,7 @@ import signal
 import sys
 import time
 
+from gi.repository import GdkX11
 from gi.repository import Gio
 from gi.repository import GLib
 from gi.repository import Gtk
@@ -233,6 +234,7 @@ class Setup(object):
         # add icon search path
         self.__window = self.__builder.get_object("window_preferences")
         self.__window.connect("delete-event", Gtk.main_quit)
+        self.__window.connect("notify::window", self.__gdk_window_set_cb)
 
         self.__button_close = self.__builder.get_object("button_close")
         self.__button_close.connect("clicked", Gtk.main_quit)
@@ -248,6 +250,10 @@ class Setup(object):
         self.__init_panel()
         self.__init_general()
 
+    def __gdk_window_set_cb(self, object, pspec):
+        str = '%u' % GdkX11.X11Window.get_xid(object.get_window())
+        GLib.setenv('IBUS_SETUP_XID', str, True)
+
     def __combobox_notify_active_engine_cb(self, combobox, property):
         engine = self.__combobox.get_active_engine()
         button = self.__builder.get_object("button_engine_add")
-- 
1.8.5.3

From 9b2004efcd26e11bbd56cf51656fe326fc11be8e Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Mon, 14 Jul 2014 11:45:25 +0900
Subject: [PATCH] Call GLib.set_prgname('ibus-setup') for ibus-setup
 main.py

TEST=xlsclients

Review URL: https://codereview.appspot.com/108550043
---
 setup/main.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/setup/main.py b/setup/main.py
index e4ddd45..9bd0af1 100644
--- a/setup/main.py
+++ b/setup/main.py
@@ -28,9 +28,13 @@ import signal
 import sys
 import time
 
+from gi.repository import GLib
+# set_prgname before importing other modules to show the name in warning
+# messages when import modules are failed.
+GLib.set_prgname('ibus-setup')
+
 from gi.repository import GdkX11
 from gi.repository import Gio
-from gi.repository import GLib
 from gi.repository import Gtk
 from gi.repository import IBus
 from os import path
-- 
1.8.5.3