public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream
@ 2026-05-31  2:06 Takao Fujiwara
  0 siblings, 0 replies; 6+ messages in thread
From: Takao Fujiwara @ 2026-05-31  2:06 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/ibus
            Branch : autotool
            Commit : a25fa373bc9cb363430751b96c4691f91279a939
            Author : Takao Fujiwara <tfujiwar@redhat.com>
            Date   : 2015-04-02T14:26:55+09:00
            Stats  : +1508/-5 in 4 file(s)
            URL    : https://src.fedoraproject.org/rpms/ibus/c/a25fa373bc9cb363430751b96c4691f91279a939?branch=autotool

            Log:
            Updated ibus-HEAD.patch from upstream

Added Swedish svdvorak
I18N engine longnames and descriptions on ibus-setup
Moved PropertyPanel at bottom right in KDE5
Drew gray color on Handle PropertyPanel
Enabled ibus engine full path icon in KDE5
Updated translations

---
diff --git a/.gitignore b/.gitignore
index 46c41a7..32c53c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,6 +27,7 @@
 /ibus-xkb-1.5.0.tar.gz
 /ibus-xkb-1.5.0.20140114.tar.gz
 /ibus-po-1.5.9-20141001.tar.gz
+/ibus-po-1.5.10-20150402.tar.gz
 ibus-1.3.6.tar.gz
 /ibus-1.3.7.tar.gz
 /ibus-1.3.8.tar.gz

diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 8b13789..557b917 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -1 +1,1485 @@
+From 49ee54f83471542447e1121be15c27ff5d86600b Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters@verbum.org>
+Date: Fri, 27 Feb 2015 11:32:41 +0900
+Subject: [PATCH] dconf: Work around using dbus development builds and
+ /etc/machine-id
+
+Recent DBus changed the way it reads /etc/machine-id to be more
+strict, and it turns out that this breaks the use of dbus-launch here.
+
+The *correct* fix is to use `dbus-run-session`, but not everyone has
+that yet.  This is a quick hack that keeps the build going.
+
+BUG=https://github.com/ibus/ibus/pull/16
+TEST=data/dconf/00-upstream-settings
+
+Review URL: https://codereview.appspot.com/209810043
+Patch from Colin Walters <walters@verbum.org>.
+---
+ data/dconf/make-dconf-override-db.sh | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/data/dconf/make-dconf-override-db.sh b/data/dconf/make-dconf-override-db.sh
+index 49a6df9..9c650e9 100755
+--- a/data/dconf/make-dconf-override-db.sh
++++ b/data/dconf/make-dconf-override-db.sh
+@@ -2,6 +2,10 @@
+ 
+ set -e
+ 
++# gnome-continuous doesn't have a machine-id set, which
++# breaks dbus-launch.  There's dbus-run-session which is
++# better, but not everyone has it yet.
++export DBUS_FATAL_WARNINGS=0
+ export TMPDIR=$(mktemp -d --tmpdir="$PWD")
+ export XDG_CONFIG_HOME="$TMPDIR/config"
+ export XDG_CACHE_HOME="$TMPDIR/cache"
+-- 
+2.1.0
+
+From 0ba6452740ec6e76344afaa2a9887566d0b62a4d Mon Sep 17 00:00:00 2001
+From: Peng Wu <alexepico@gmail.com>
+Date: Mon, 9 Mar 2015 13:36:58 +0900
+Subject: [PATCH] Add ibus_keyval_convert_case and
+ ibus_keyval_to_upper/lower methods
+
+In some input method setup dialog, customization of shortcut keys are supported. But in python Gtk+, when grab the shortcut key, the gdk_keyval_to_lower method will be used.
+
+This patch adds ibus_keyval_convert_case and ibus_keyval_to_upper/lower methods, so ibus-libpinyin can drop the Gdk 3.x C++ dependency.
+
+BUG=https://code.google.com/p/ibus/issues/detail?id=1766
+TEST=
+
+Review URL: https://codereview.appspot.com/213760043
+Patch from Peng Wu <alexepico@gmail.com>.
+---
+ src/ibuskeynames.c | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/ibuskeys.h     |  33 ++++++++++++
+ 2 files changed, 180 insertions(+)
+
+diff --git a/src/ibuskeynames.c b/src/ibuskeynames.c
+index 2935bcb..fe7836e 100644
+--- a/src/ibuskeynames.c
++++ b/src/ibuskeynames.c
+@@ -31,6 +31,7 @@
+ #include <string.h>
+ #include "ibuskeysyms.h"
+ #include "keyname-table.h"
++#include "ibuskeys.h"
+ 
+ #define IBUS_NUM_KEYS G_N_ELEMENTS (gdk_keys_by_keyval)
+ 
+@@ -196,3 +197,149 @@ _out:
+     return retval;
+ }
+ 
++guint
++ibus_keyval_to_upper (guint keyval)
++{
++  guint result;
++
++  ibus_keyval_convert_case (keyval, NULL, &result);
++
++  return result;
++}
++
++guint
++ibus_keyval_to_lower (guint keyval)
++{
++  guint result;
++
++  ibus_keyval_convert_case (keyval, &result, NULL);
++
++  return result;
++}
++
++void
++ibus_keyval_convert_case (guint symbol,
++                         guint *lower,
++                         guint *upper)
++{
++  guint xlower, xupper;
++
++  xlower = symbol;
++  xupper = symbol;
++
++  /* Check for directly encoded 24-bit UCS characters: */
++  if ((symbol & 0xff000000) == 0x01000000)
++    {
++      if (lower)
++        *lower = ibus_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
++      if (upper)
++        *upper = ibus_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
++      return;
++    }
++
++  switch (symbol >> 8)
++    {
++    case 0: /* Latin 1 */
++      if ((symbol >= IBUS_KEY_A) && (symbol <= IBUS_KEY_Z))
++        xlower += (IBUS_KEY_a - IBUS_KEY_A);
++      else if ((symbol >= IBUS_KEY_a) && (symbol <= IBUS_KEY_z))
++        xupper -= (IBUS_KEY_a - IBUS_KEY_A);
++      else if ((symbol >= IBUS_KEY_Agrave) && (symbol <= IBUS_KEY_Odiaeresis))
++        xlower += (IBUS_KEY_agrave - IBUS_KEY_Agrave);
++      else if ((symbol >= IBUS_KEY_agrave) && (symbol <= IBUS_KEY_odiaeresis))
++        xupper -= (IBUS_KEY_agrave - IBUS_KEY_Agrave);
++      else if ((symbol >= IBUS_KEY_Ooblique) && (symbol <= IBUS_KEY_Thorn))
++        xlower += (IBUS_KEY_oslash - IBUS_KEY_Ooblique);
++      else if ((symbol >= IBUS_KEY_oslash) && (symbol <= IBUS_KEY_thorn))
++        xupper -= (IBUS_KEY_oslash - IBUS_KEY_Ooblique);
++      break;
++
++    case 1: /* Latin 2 */
++      /* Assume the KeySym is a legal value (ignore discontinuities) */
++      if (symbol == IBUS_KEY_Aogonek)
++        xlower = IBUS_KEY_aogonek;
++      else if (symbol >= IBUS_KEY_Lstroke && symbol <= IBUS_KEY_Sacute)
++        xlower += (IBUS_KEY_lstroke - IBUS_KEY_Lstroke);
++      else if (symbol >= IBUS_KEY_Scaron && symbol <= IBUS_KEY_Zacute)
++        xlower += (IBUS_KEY_scaron - IBUS_KEY_Scaron);
++      else if (symbol >= IBUS_KEY_Zcaron && symbol <= IBUS_KEY_Zabovedot)
++        xlower += (IBUS_KEY_zcaron - IBUS_KEY_Zcaron);
++      else if (symbol == IBUS_KEY_aogonek)
++        xupper = IBUS_KEY_Aogonek;
++      else if (symbol >= IBUS_KEY_lstroke && symbol <= IBUS_KEY_sacute)
++        xupper -= (IBUS_KEY_lstroke - IBUS_KEY_Lstroke);
++      else if (symbol >= IBUS_KEY_scaron && symbol <= IBUS_KEY_zacute)
++        xupper -= (IBUS_KEY_scaron - IBUS_KEY_Scaron);
++      else if (symbol >= IBUS_KEY_zcaron && symbol <= IBUS_KEY_zabovedot)
++        xupper -= (IBUS_KEY_zcaron - IBUS_KEY_Zcaron);
++      else if (symbol >= IBUS_KEY_Racute && symbol <= IBUS_KEY_Tcedilla)
++        xlower += (IBUS_KEY_racute - IBUS_KEY_Racute);
++      else if (symbol >= IBUS_KEY_racute && symbol <= IBUS_KEY_tcedilla)
++        xupper -= (IBUS_KEY_racute - IBUS_KEY_Racute);
++      break;
++
++    case 2: /* Latin 3 */
++      /* Assume the KeySym is a legal value (ignore discontinuities) */
++      if (symbol >= IBUS_KEY_Hstroke && symbol <= IBUS_KEY_Hcircumflex)
++        xlower += (IBUS_KEY_hstroke - IBUS_KEY_Hstroke);
++      else if (symbol >= IBUS_KEY_Gbreve && symbol <= IBUS_KEY_Jcircumflex)
++        xlower += (IBUS_KEY_gbreve - IBUS_KEY_Gbreve);
++      else if (symbol >= IBUS_KEY_hstroke && symbol <= IBUS_KEY_hcircumflex)
++        xupper -= (IBUS_KEY_hstroke - IBUS_KEY_Hstroke);
++      else if (symbol >= IBUS_KEY_gbreve && symbol <= IBUS_KEY_jcircumflex)
++        xupper -= (IBUS_KEY_gbreve - IBUS_KEY_Gbreve);
++      else if (symbol >= IBUS_KEY_Cabovedot && symbol <= IBUS_KEY_Scircumflex)
++        xlower += (IBUS_KEY_cabovedot - IBUS_KEY_Cabovedot);
++      else if (symbol >= IBUS_KEY_cabovedot && symbol <= IBUS_KEY_scircumflex)
++        xupper -= (IBUS_KEY_cabovedot - IBUS_KEY_Cabovedot);
++      break;
++
++    case 3: /* Latin 4 */
++      /* Assume the KeySym is a legal value (ignore discontinuities) */
++      if (symbol >= IBUS_KEY_Rcedilla && symbol <= IBUS_KEY_Tslash)
++        xlower += (IBUS_KEY_rcedilla - IBUS_KEY_Rcedilla);
++      else if (symbol >= IBUS_KEY_rcedilla && symbol <= IBUS_KEY_tslash)
++        xupper -= (IBUS_KEY_rcedilla - IBUS_KEY_Rcedilla);
++      else if (symbol == IBUS_KEY_ENG)
++        xlower = IBUS_KEY_eng;
++      else if (symbol == IBUS_KEY_eng)
++        xupper = IBUS_KEY_ENG;
++      else if (symbol >= IBUS_KEY_Amacron && symbol <= IBUS_KEY_Umacron)
++        xlower += (IBUS_KEY_amacron - IBUS_KEY_Amacron);
++      else if (symbol >= IBUS_KEY_amacron && symbol <= IBUS_KEY_umacron)
++        xupper -= (IBUS_KEY_amacron - IBUS_KEY_Amacron);
++      break;
++
++    case 6: /* Cyrillic */
++      /* Assume the KeySym is a legal value (ignore discontinuities) */
++      if (symbol >= IBUS_KEY_Serbian_DJE && symbol <= IBUS_KEY_Serbian_DZE)
++        xlower -= (IBUS_KEY_Serbian_DJE - IBUS_KEY_Serbian_dje);
++      else if (symbol >= IBUS_KEY_Serbian_dje && symbol <= IBUS_KEY_Serbian_dze)
++        xupper += (IBUS_KEY_Serbian_DJE - IBUS_KEY_Serbian_dje);
++      else if (symbol >= IBUS_KEY_Cyrillic_YU && symbol <= IBUS_KEY_Cyrillic_HARDSIGN)
++        xlower -= (IBUS_KEY_Cyrillic_YU - IBUS_KEY_Cyrillic_yu);
++      else if (symbol >= IBUS_KEY_Cyrillic_yu && symbol <= IBUS_KEY_Cyrillic_hardsign)
++        xupper += (IBUS_KEY_Cyrillic_YU - IBUS_KEY_Cyrillic_yu);
++      break;
++
++    case 7: /* Greek */
++      /* Assume the KeySym is a legal value (ignore discontinuities) */
++      if (symbol >= IBUS_KEY_Greek_ALPHAaccent && symbol <= IBUS_KEY_Greek_OMEGAaccent)
++        xlower += (IBUS_KEY_Greek_alphaaccent - IBUS_KEY_Greek_ALPHAaccent);
++      else if (symbol >= IBUS_KEY_Greek_alphaaccent && symbol <= IBUS_KEY_Greek_omegaaccent &&
++               symbol != IBUS_KEY_Greek_iotaaccentdieresis &&
++               symbol != IBUS_KEY_Greek_upsilonaccentdieresis)
++        xupper -= (IBUS_KEY_Greek_alphaaccent - IBUS_KEY_Greek_ALPHAaccent);
++      else if (symbol >= IBUS_KEY_Greek_ALPHA && symbol <= IBUS_KEY_Greek_OMEGA)
++        xlower += (IBUS_KEY_Greek_alpha - IBUS_KEY_Greek_ALPHA);
++      else if (symbol >= IBUS_KEY_Greek_alpha && symbol <= IBUS_KEY_Greek_omega &&
++               symbol != IBUS_KEY_Greek_finalsmallsigma)
++        xupper -= (IBUS_KEY_Greek_alpha - IBUS_KEY_Greek_ALPHA);
++      break;
++    }
++
++  if (lower)
++    *lower = xlower;
++  if (upper)
++    *upper = xupper;
++}
+diff --git a/src/ibuskeys.h b/src/ibuskeys.h
+index 7969929..6ad0a90 100644
+--- a/src/ibuskeys.h
++++ b/src/ibuskeys.h
+@@ -74,5 +74,38 @@ guint            ibus_unicode_to_keyval (gunichar        wc);
+  **/
+ gunichar         ibus_keyval_to_unicode (guint           keyval);
+ 
++/**
++ * ibus_keyval_to_upper:
++ * @keyval: a key value.
++ *
++ * Converts a key value to upper case, if applicable.
++ *
++ * Returns: the upper case form of @keyval, or @keyval itself if it is already
++ *   in upper case or it is not subject to case conversion.
++ */
++guint            ibus_keyval_to_upper (guint keyval);
++
++/**
++ * ibus_keyval_to_lower:
++ * @keyval: a key value.
++ *
++ * Converts a key value to lower case, if applicable.
++ *
++ * Returns: the lower case form of @keyval, or @keyval itself if it is already
++ *  in lower case or it is not subject to case conversion.
++ */
++guint            ibus_keyval_to_lower (guint keyval);
++
++/**
++ * ibus_keyval_convert_case:
++ * @symbol: a keyval
++ * @lower: (out): return location for lowercase version of @symbol
++ * @upper: (out): return location for uppercase version of @symbol
++ *
++ * Obtains the upper- and lower-case versions of the keyval @symbol.
++ * Examples of keyvals are #IBUS_KEY_a, #IBUS_KEY_Enter, #IBUS_KEY_F1, etc.
++ */
++void ibus_keyval_convert_case (guint symbol, guint *lower, guint *upper);
++
+ G_END_DECLS
+ #endif // __IBUS_KEYS_H_
+-- 
+2.1.0
+
+From f32e98fdacf50af70fe1e3198463fc75d9ead727 Mon Sep 17 00:00:00 2001
+From: Albert Veli <albert.veli@gmail.com>
+Date: Thu, 12 Mar 2015 12:12:22 +0900
+Subject: [PATCH] Add Swedish svdvorak in simple.xml
+
+TEST=engine/simple.xml
+
+Review URL: https://codereview.appspot.com/215730043
+Patch from Albert Veli <albert.veli@gmail.com>.
+---
+ engine/simple.xml.in | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/engine/simple.xml.in b/engine/simple.xml.in
+index c16f86a..93de14a 100644
+--- a/engine/simple.xml.in
++++ b/engine/simple.xml.in
+@@ -625,6 +625,18 @@
+                         <icon>ibus-keyboard</icon>
+ 			<rank>99</rank>
+ 		</engine>
++                <engine>
++                        <name>xkb:se:svdvorak:swe</name>
++                        <language>swe</language>
++                        <license>GPL</license>
++                        <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
++                        <layout>se</layout>
++                        <layout_variant>svdvorak</layout_variant>
++                        <longname>Swedish (Svdvorak)</longname>
++                        <description>Swedish (Svdvorak)</description>
++                        <icon>ibus-keyboard</icon>
++                        <rank>99</rank>
++                </engine>
+ 		<engine>
+ 			<name>xkb:ch::ger</name>
+ 			<language>ger</language>
+-- 
+2.1.0
+
+From 4a4bd5fd0cac63b73464039896df123efd372d4a Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Wed, 18 Mar 2015 13:47:07 +0900
+Subject: [PATCH] Change ranks for minor keymaps in simple.xml
+
+TEST=engine/simple.xml
+
+Review URL: https://codereview.appspot.com/217900043
+---
+ engine/simple.xml.in | 50 +++++++++++++++++++++++++-------------------------
+ 1 file changed, 25 insertions(+), 25 deletions(-)
+
+diff --git a/engine/simple.xml.in b/engine/simple.xml.in
+index 93de14a..5f04f8b 100644
+--- a/engine/simple.xml.in
++++ b/engine/simple.xml.in
+@@ -30,7 +30,7 @@
+ 			<longname>English (US, international with dead keys)</longname>
+ 			<description>English (US, international with dead keys)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:us:colemak:eng</name>
+@@ -42,7 +42,7 @@
+ 			<longname>English (Colemak)</longname>
+ 			<description>English (Colemak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:us:dvorak:eng</name>
+@@ -54,7 +54,7 @@
+ 			<longname>English (Dvorak)</longname>
+ 			<description>English (Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:us:altgr-intl:eng</name>
+@@ -66,7 +66,7 @@
+ 			<longname>English (international AltGr dead keys)</longname>
+ 			<description>English (international AltGr dead keys)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:ara::ara</name>
+@@ -88,7 +88,7 @@
+ 			<longname>Belgian</longname>
+ 			<description>Belgian</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:be::nld</name>
+@@ -110,7 +110,7 @@
+ 			<longname>Belgian</longname>
+ 			<description>Belgian</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:br::por</name>
+@@ -133,7 +133,7 @@
+ 			<longname>Portuguese (Brazil, Dvorak)</longname>
+ 			<description>Portuguese (Brazil, Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:bg::bul</name>
+@@ -167,7 +167,7 @@
+ 			<longname>French (Canada)</longname>
+ 			<description>French (Canada)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:ca:eng:eng</name>
+@@ -179,7 +179,7 @@
+ 			<longname>English (Canada)</longname>
+ 			<description>English (Canada)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:hr::scr</name>
+@@ -269,7 +269,7 @@
+                         <longname>French (alternative)</longname>
+                         <description>French (alternative)</description>
+                         <icon>ibus-keyboard</icon>
+-                        <rank>99</rank>
++                        <rank>1</rank>
+                 </engine>
+                 <engine>
+                         <name>xkb:fr:bepo:fra</name>
+@@ -281,7 +281,7 @@
+                         <longname>French (Bepo, ergonomic, Dvorak way)</longname>
+                         <description>French (Bepo, ergonomic, Dvorak way)</description>
+                         <icon>ibus-keyboard</icon>
+-                        <rank>99</rank>
++                        <rank>1</rank>
+                 </engine>
+                 <engine>
+                         <name>xkb:fr:dvorak:fra</name>
+@@ -316,7 +316,7 @@
+ 			<longname>German (Dvorak)</longname>
+ 			<description>German (Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:de:neo:ger</name>
+@@ -328,7 +328,7 @@
+ 			<longname>German (Neo 2)</longname>
+ 			<description>German (Neo 2)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+                 <engine>
+                         <name>xkb:de:nodeadkeys:ger</name>
+@@ -340,7 +340,7 @@
+                         <longname>German (eliminate dead keys)</longname>
+                         <description>German (eliminate dead keys)</description>
+                         <icon>ibus-keyboard</icon>
+-                        <rank>99</rank>
++                        <rank>1</rank>
+                 </engine>
+ 		<engine>
+ 			<name>xkb:gr::gre</name>
+@@ -395,7 +395,7 @@
+ 			<longname>Japanese</longname>
+ 			<description>Japanese</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:latam::spa</name>
+@@ -406,7 +406,7 @@
+ 			<longname>Spanish (Latin American)</longname>
+ 			<description>Spanish (Latin American)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:lt::lit</name>
+@@ -452,7 +452,7 @@
+ 			<longname>Norwegian (Dvorak)</longname>
+ 			<description>Norwegian (Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:pl::pol</name>
+@@ -475,7 +475,7 @@
+ 			<longname>Polish (Dvorak)</longname>
+ 			<description>Polish (Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+                 <engine>
+                         <name>xkb:pl:qwertz:pol</name>
+@@ -532,7 +532,7 @@
+ 			<longname>Russian (phonetic)</longname>
+ 			<description>Russian (phonetic)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:rs::srp</name>
+@@ -623,7 +623,7 @@
+ 			<longname>Swedish (Dvorak)</longname>
+ 			<description>Swedish (Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+                 <engine>
+                         <name>xkb:se:svdvorak:swe</name>
+@@ -635,7 +635,7 @@
+                         <longname>Swedish (Svdvorak)</longname>
+                         <description>Swedish (Svdvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-                        <rank>99</rank>
++                        <rank>1</rank>
+                 </engine>
+ 		<engine>
+ 			<name>xkb:ch::ger</name>
+@@ -646,7 +646,7 @@
+ 			<longname>German (Switzerland)</longname>
+ 			<description>German (Switzerland)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:ch:fr:fra</name>
+@@ -658,7 +658,7 @@
+ 			<longname>French (Switzerland)</longname>
+ 			<description>French (Switzerland)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:tr::tur</name>
+@@ -692,7 +692,7 @@
+ 			<longname>English (UK, extended WinKeys)</longname>
+ 			<description>English (UK, extended WinKeys)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 		<engine>
+ 			<name>xkb:gb:dvorak:eng</name>
+@@ -704,7 +704,7 @@
+ 			<longname>English (UK, Dvorak)</longname>
+ 			<description>English (UK, Dvorak)</description>
+                         <icon>ibus-keyboard</icon>
+-			<rank>99</rank>
++			<rank>1</rank>
+ 		</engine>
+ 	</engines>
+ </component>
+-- 
+2.1.0
+
+From 8b187598215e3af0481e0f9415fe6a21db682e6b Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Wed, 25 Mar 2015 13:55:50 +0900
+Subject: [PATCH] I18N for engine longnames on ibus-setup
+
+New API ibus_get_untranslated_language_name().
+Call bindtextdomain() for each textdomains.
+
+TEST=setup
+
+Review URL: https://codereview.appspot.com/218760043
+---
+ setup/enginedialog.py   | 41 +++++++++++++++++++----------------------
+ setup/enginetreeview.py | 16 +++++++++++-----
+ setup/main.py           | 10 ++++++----
+ src/ibusutil.c          | 47 ++++++++++++++++++++++++++++-------------------
+ src/ibusutil.h          | 16 ++++++++++++----
+ ui/gtk2/i18n.py         | 38 +++++++++++++++++++++++++++++---------
+ ui/gtk2/main.py         |  8 ++++----
+ 7 files changed, 109 insertions(+), 67 deletions(-)
+
+diff --git a/setup/enginedialog.py b/setup/enginedialog.py
+index 2b179ad..2c472de 100644
+--- a/setup/enginedialog.py
++++ b/setup/enginedialog.py
+@@ -3,9 +3,9 @@
+ #
+ # ibus - The Input Bus
+ #
+-# Copyright (c) 2014 Peng Huang <shawn.p.huang@gmail.com>
+-# Copyright (c) 2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
+-# Copyright (c) 2013-2014 Red Hat, Inc.
++# Copyright (c) 2015 Peng Huang <shawn.p.huang@gmail.com>
++# Copyright (c) 2015 Takao Fujiwara <takao.fujiwara1@gmail.com>
++# Copyright (c) 2013-2015 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
+@@ -29,6 +29,7 @@ from gi.repository import IBus
+ 
+ import functools
+ import gettext
++import i18n
+ import locale
+ 
+ from icon import load_icon
+@@ -227,10 +228,13 @@ class EngineDialog(Gtk.Dialog):
+ 
+ 
+     def __engine_row_new(self, engine):
+-        row = self.__list_box_row_new(engine.get_longname())
+-        row.set_tooltip_text(engine.get_description())
++        longname = i18n.gettext_engine_longname(engine)
++        description = i18n.gettext_engine_description(engine)
++        row = self.__list_box_row_new(longname)
++        row.untrans = engine.get_longname()
++        row.set_tooltip_text(description)
+         row.engine = engine
+-        widget = self.__padded_label_new(engine.get_longname(),
++        widget = self.__padded_label_new(longname,
+                                          engine.get_icon(),
+                                          Gtk.Align.START,
+                                          ROW_TRAVEL_DIRECTION_NONE)
+@@ -257,7 +261,9 @@ class EngineDialog(Gtk.Dialog):
+ 
+         def cmp_engine(a, b):
+             if a.get_rank() == b.get_rank():
+-                return locale.strcoll(a.get_longname(), b.get_longname())
++                a_longname = i18n.gettext_engine_longname(a)
++                b_longname = i18n.gettext_engine_longname(b)
++                return locale.strcoll(a_longname, b_longname)
+             return int(b.get_rank() - a.get_rank())
+ 
+         self.__engines_for_lang[lang].sort(
+@@ -294,6 +300,7 @@ class EngineDialog(Gtk.Dialog):
+         self.__list.add(row)
+         self.__add_engine_rows_for_lang(row)
+         self.__list.show_all()
++        self.__adjustment.set_value(self.__adjustment.get_lower())
+ 
+ 
+     def __do_filter(self):
+@@ -321,24 +328,14 @@ class EngineDialog(Gtk.Dialog):
+                 l = ''
+             if l not in self.__engines_for_lang:
+                 self.__engines_for_lang[l] = []
++            i18n.init_textdomain(e.get_textdomain())
+             self.__engines_for_lang[l].append(e)
+ 
+             # Retrieve Untranslated language names.
+-            backup_locale = locale.setlocale(locale.LC_ALL, None)
+-            def __set_untrans_with_locale(en_locale):
+-                locale.setlocale(locale.LC_ALL, en_locale)
+-                untrans = IBus.get_language_name(e.get_language())
+-                if untrans == None:
+-                    untrans = ''
+-                self.__untrans_for_lang[l] = untrans
+-            try:
+-                __set_untrans_with_locale('en_US.UTF-8')
+-            except locale.Error:
+-                try:
+-                    __set_untrans_with_locale('C')
+-                except locale.Error:
+-                    pass
+-            locale.setlocale(locale.LC_ALL, backup_locale)
++            untrans = IBus.get_untranslated_language_name(e.get_language())
++            if untrans == None:
++                untrans = ''
++            self.__untrans_for_lang[l] = untrans
+ 
+         keys = list(self.__engines_for_lang.keys())
+         keys.sort(key=functools.cmp_to_key(locale.strcoll))
+diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py
+index 75ff04b..4de4a51 100644
+--- a/setup/enginetreeview.py
++++ b/setup/enginetreeview.py
+@@ -2,8 +2,8 @@
+ #
+ # ibus - The Input Bus
+ #
+-# Copyright (c) 2007-2014 Peng Huang <shawn.p.huang@gmail.com>
+-# Copyright (c) 2007-2014 Red Hat, Inc.
++# Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
++# Copyright (c) 2007-2015 Red Hat, Inc.
+ #
+ # This library is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU Lesser General Public
+@@ -26,6 +26,8 @@ from gi.repository import Gtk
+ from gi.repository import IBus
+ from gi.repository import Pango
+ 
++import i18n
++
+ from icon import load_icon
+ from i18n import _, N_
+ 
+@@ -106,8 +108,10 @@ class EngineTreeView(Gtk.TreeView):
+         engine_b = model[b][0]
+         language_a = IBus.get_language_name(engine_a.get_language())
+         language_b = IBus.get_language_name(engine_b.get_language())
+-        label_a = "%s - %s" % (language_a, engine_a.get_longname())
+-        label_b = "%s - %s" % (language_b, engine_b.get_longname())
++        longname_a = i18n.gettext_engine_longname(engine_a)
++        longname_b = i18n.gettext_engine_longname(engine_b)
++        label_a = "%s - %s" % (language_a, longname_a)
++        label_b = "%s - %s" % (language_b, longname_b)
+         # http://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons
+         return (label_a > label_b) - (label_a < label_b)
+ 
+@@ -149,8 +153,9 @@ class EngineTreeView(Gtk.TreeView):
+ 
+         renderer.set_property("sensitive", True)
+         language = IBus.get_language_name(engine.get_language())
++        longname = i18n.gettext_engine_longname(engine)
+         renderer.set_property("text",
+-                "%s - %s" % (language, engine.get_longname()))
++                "%s - %s" % (language, longname))
+         renderer.set_property("weight", Pango.Weight.NORMAL)
+ 
+     def __layout_cell_data_cb(self, celllayout, renderer, model, it, data):
+@@ -196,6 +201,7 @@ class EngineTreeView(Gtk.TreeView):
+             if e in self.__engines:
+                 continue
+             it = self.__model.append(None)
++            i18n.init_textdomain(e.get_textdomain())
+             self.__model.set(it, 0, e)
+             self.__engines.append(e)
+         self.__emit_changed()
+diff --git a/setup/main.py b/setup/main.py
+index c1d5c55..22b6dc7 100644
+--- a/setup/main.py
++++ b/setup/main.py
+@@ -2,8 +2,8 @@
+ #
+ # ibus - The Input Bus
+ #
+-# Copyright (c) 2007-2014 Peng Huang <shawn.p.huang@gmail.com>
+-# Copyright (c) 2007-2014 Red Hat, Inc.
++# Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
++# Copyright (c) 2007-2015 Red Hat, Inc.
+ #
+ # This library is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU Lesser General Public
+@@ -39,13 +39,14 @@ from gi.repository import Gtk
+ from gi.repository import IBus
+ from os import path
+ 
++import i18n
+ import keyboardshortcut
+ import locale
+ from enginecombobox import EngineComboBox
+ from enginedialog import EngineDialog
+ from enginetreeview import EngineTreeView
+ from engineabout import EngineAbout
+-from i18n import DOMAINNAME, _, N_, init as i18n_init
++from i18n import DOMAINNAME, _, N_
+ 
+ (
+     COLUMN_NAME,
+@@ -543,6 +544,7 @@ if __name__ == "__main__":
+         print("Using the fallback 'C' locale", file=sys.stderr)
+         locale.setlocale(locale.LC_ALL, 'C')
+ 
+-    i18n_init()
++    i18n.init_textdomain(DOMAINNAME)
++    i18n.init_textdomain('xkeyboard-config')
+     setup = Setup()
+     setup.run()
+diff --git a/src/ibusutil.c b/src/ibusutil.c
+index 3eddc99..b9f3fdd 100644
+--- a/src/ibusutil.c
++++ b/src/ibusutil.c
+@@ -1,9 +1,9 @@
+ /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+ /* vim:set et sts=4: */
+ /* bus - The Input Bus
+- * Copyright (C) 2008-2011 Peng Huang <shawn.p.huang@gmail.com>
+- * Copyright (C) 2010-2011 Takao Fujiwara <takao.fujiwara1@gmail.com>
+- * Copyright (C) 2008-2011 Red Hat, Inc.
++ * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
++ * Copyright (C) 2010-2015 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * Copyright (C) 2008-2015 Red Hat, Inc.
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -98,6 +98,11 @@ _load_lang()
+     XMLNode *node;
+     struct stat buf;
+ 
++#ifdef ENABLE_NLS
++    bindtextdomain ("iso_639", GLIB_LOCALE_DIR);
++    bind_textdomain_codeset ("iso_639", "UTF-8");
++#endif
++
+     __languages_dict = g_hash_table_new_full (g_str_hash,
+             g_str_equal, g_free, g_free);
+     filename = g_build_filename (ISOCODES_PREFIX,
+@@ -121,37 +126,41 @@ _load_lang()
+ }
+ 
+ const gchar *
+-ibus_get_language_name(const gchar *_locale) {
++ibus_get_untranslated_language_name (const gchar *_locale)
++{
+     const gchar *retval;
+     gchar *p = NULL;
+     gchar *lang = NULL;
+ 
+-    if (__languages_dict == NULL ) {
++    if (__languages_dict == NULL )
+         _load_lang();
+-    }
+-    if ((p = strchr (_locale, '_')) !=  NULL) {
++    if ((p = strchr (_locale, '_')) !=  NULL)
+         p = g_strndup (_locale, p - _locale);
+-    } else {
++    else
+         p = g_strdup (_locale);
+-    }
+     lang = g_ascii_strdown (p, -1);
+     g_free (p);
+     retval = (const gchar *) g_hash_table_lookup (__languages_dict, lang);
+     g_free (lang);
+-    if (retval != NULL) {
+-#ifdef ENABLE_NLS
+-        return dgettext("iso_639", retval);
+-#else
++    if (retval != NULL)
+         return retval;
+-#endif
+-    }
+-    else {
++    else
++        return "Other";
++}
++
++const gchar *
++ibus_get_language_name (const gchar *_locale)
++{
++    const gchar *retval = ibus_get_untranslated_language_name (_locale);
++
+ #ifdef ENABLE_NLS
+-        return dgettext(GETTEXT_PACKAGE, N_("Other"));
++    if (g_strcmp0 (retval, "Other") == 0)
++        return dgettext (GETTEXT_PACKAGE, N_("Other"));
++    else
++        return dgettext ("iso_639", retval);
+ #else
+-        return N_("Other");
++    return retval;
+ #endif
+-    }
+ }
+ 
+ void
+diff --git a/src/ibusutil.h b/src/ibusutil.h
+index d5d593f..b9b6415 100644
+--- a/src/ibusutil.h
++++ b/src/ibusutil.h
+@@ -1,9 +1,9 @@
+ /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+ /* vim:set et sts=4: */
+ /* bus - The Input Bus
+- * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
+- * Copyright (C) 2010-2013 Takao Fujiwara <takao.fujiwara1@gmail.com>
+- * Copyright (C) 2008-2013 Red Hat, Inc.
++ * Copyright (C) 2008-2015 Peng Huang <shawn.p.huang@gmail.com>
++ * Copyright (C) 2010-2015 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * Copyright (C) 2008-2015 Red Hat, Inc.
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -37,9 +37,17 @@
+  */
+ 
+ /**
++ * ibus_get_untranslated_language_name:
++ * @_locale: A const locale name.
++ * @returns: untranslated language name
++ */
++const gchar *    ibus_get_untranslated_language_name
++                                                (const gchar    *_locale);
++
++/**
+  * ibus_get_language_name:
+  * @_locale: A const locale name.
+- * @returns: language name
++ * @returns: translated language name
+  */
+ const gchar *    ibus_get_language_name         (const gchar    *_locale);
+ 
+diff --git a/setup/i18n.py b/setup/i18n.py
+index 5a73eee..976d1ae 100644
+--- a/setup/i18n.py
++++ b/setup/i18n.py
+@@ -2,8 +2,8 @@
+ #
+ # ibus - The Input Bus
+ #
+-# Copyright(c) 2007-2010 Peng Huang <shawn.p.huang@gmail.com>
+-# Copyright(c) 2007-2010 Google, Inc.
++# Copyright(c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
++# Copyright(c) 2007-2015 Google, Inc.
+ #
+ # This library is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU Lesser General Public
+@@ -29,15 +29,35 @@ DOMAINNAME = "ibus10"
+ _ = lambda a: gettext.dgettext(DOMAINNAME, a)
+ N_ = lambda a: a
+ 
+-def init():
+-    localedir = os.getenv("IBUS_LOCALEDIR")
++LOCALEDIR = os.getenv("IBUS_LOCALEDIR")
++
++def init_textdomain(domainname):
++    if domainname == '':
++        return
+     # Python's locale module doesn't provide all methods on some
+     # operating systems like FreeBSD
+     try:
+-        # for non-standard localedir
+-        locale.bindtextdomain(DOMAINNAME, localedir)
+-        locale.bind_textdomain_codeset(DOMAINNAME, "UTF-8")
++        locale.bindtextdomain(domainname, LOCALEDIR)
++        locale.bind_textdomain_codeset(domainname, 'UTF-8')
+     except AttributeError:
+         pass
+-    gettext.bindtextdomain(DOMAINNAME, localedir)
+-    gettext.bind_textdomain_codeset(DOMAINNAME, "UTF-8")
++    gettext.bindtextdomain(domainname, LOCALEDIR)
++    gettext.bind_textdomain_codeset(domainname, 'UTF-8')
++
++def gettext_engine_longname(engine):
++    name = engine.get_name()
++    if (name.startswith('xkb:')):
++        return gettext.dgettext('xkeyboard-config', engine.get_longname())
++    textdomain = engine.get_textdomain()
++    if textdomain == '':
++        return engine.get_longname()
++    return gettext.dgettext(textdomain, engine.get_longname())
++
++def gettext_engine_description(engine):
++    name = engine.get_name()
++    if (name.startswith('xkb:')):
++        return gettext.dgettext('xkeyboard-config', engine.get_description())
++    textdomain = engine.get_textdomain()
++    if textdomain == '':
++        return engine.get_description()
++    return gettext.dgettext(textdomain, engine.get_description())
+-- 
+2.1.0
+
+From 02156038217e41ebd90e3d1ed4bb88b912a15a06 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Mon, 30 Mar 2015 11:07:42 +0900
+Subject: [PATCH] I18N for IBus engine about dialog in ibus-setup
+
+TEST=setup
+
+Review URL: https://codereview.appspot.com/219400043
+---
+ setup/engineabout.py | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/setup/engineabout.py b/setup/engineabout.py
+index 09e9b5c..4e6a5ef 100644
+--- a/setup/engineabout.py
++++ b/setup/engineabout.py
+@@ -2,8 +2,8 @@
+ #
+ # ibus - The Input Bus
+ #
+-# Copyright (c) 2007-2014 Peng Huang <shawn.p.huang@gmail.com>
+-# Copyright (c) 2007-2014 Red Hat, Inc.
++# Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
++# Copyright (c) 2007-2015 Red Hat, Inc.
+ #
+ # This library is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU Lesser General Public
+@@ -26,6 +26,8 @@ from gi.repository import GdkPixbuf
+ from gi.repository import Gtk
+ from gi.repository import Pango
+ 
++import i18n
++
+ from i18n import _, N_
+ 
+ class EngineAbout(Gtk.Dialog):
+@@ -64,7 +66,7 @@ class EngineAbout(Gtk.Dialog):
+         text_buffer.insert_pixbuf(iter,
+                 self.__load_icon(self.__engine_desc.get_icon()))
+         text_buffer.insert_with_tags_by_name(iter,
+-                "\n%s\n" % self.__engine_desc.get_longname(),
++                "\n%s\n" % i18n.gettext_engine_longname(self.__engine_desc),
+                 "heading", "left_margin_16")
+         text_buffer.insert_with_tags_by_name(iter,
+                 _("Language: %s\n") % IBus.get_language_name(self.__engine_desc.get_language()),
+@@ -78,7 +80,7 @@ class EngineAbout(Gtk.Dialog):
+         text_buffer.insert_with_tags_by_name(iter,
+                 _("Description:\n"), "small", "bold", "left_margin_16")
+         text_buffer.insert_with_tags_by_name(iter,
+-                self.__engine_desc.get_description(),
++                i18n.gettext_engine_description(self.__engine_desc),
+                 "wrap_text", "left_margin_32")
+ 
+ 
+-- 
+2.1.0
+
+From eb4ffa1d9aeccf31318afd1d24cbcbbefa79337b Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Tue, 31 Mar 2015 11:56:05 +0900
+Subject: [PATCH] Put PropertyPanel at bottom right when desktop is KDE
+
+Monitor _NET_WORKAREA atom because PropertyPanel runs
+before KDE5 panel runs.
+Allocate button sizes on PropertyPanel correctly for KDE5.
+
+TEST=ui/gtk3/ibus-ui-gtk3
+
+Review URL: https://codereview.appspot.com/220500043
+---
+ ui/gtk3/propertypanel.vala | 168 ++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 121 insertions(+), 47 deletions(-)
+
+diff --git a/ui/gtk3/propertypanel.vala b/ui/gtk3/propertypanel.vala
+index 6c023bf..12e85b0 100644
+--- a/ui/gtk3/propertypanel.vala
++++ b/ui/gtk3/propertypanel.vala
+@@ -2,9 +2,9 @@
+  *
+  * ibus - The Input Bus
+  *
+- * Copyright(c) 2013-2014 Red Hat, Inc.
+- * Copyright(c) 2013-2014 Peng Huang <shawn.p.huang@gmail.com>
+- * Copyright(c) 2013-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ * Copyright(c) 2013-2015 Red Hat, Inc.
++ * Copyright(c) 2013-2015 Peng Huang <shawn.p.huang@gmail.com>
++ * Copyright(c) 2013-2015 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
+@@ -29,6 +29,8 @@ enum PanelShow {
+ }
+ 
+ public class PropertyPanel : Gtk.Box {
++    private unowned Gdk.Window m_root_window;
++    private unowned X.Display m_xdisplay;
+     private Gtk.Window m_toplevel;
+     private IBus.PropList m_props;
+     private IPropToolItem[] m_items;
+@@ -38,6 +40,7 @@ public class PropertyPanel : Gtk.Box {
+     private uint m_auto_hide_timeout = 10000;
+     private uint m_auto_hide_timeout_id = 0;
+     private bool m_follow_input_cursor_when_always_shown = false;
++    private const uint MONITOR_NET_WORKAREA_TIMEOUT = 60000;
+ 
+     public PropertyPanel() {
+         /* Chain up base class constructor */
+@@ -46,6 +49,14 @@ public class PropertyPanel : Gtk.Box {
+ 
+         set_visible(true);
+ 
++        m_root_window = Gdk.get_default_root_window();
++        unowned Gdk.Display display = m_root_window.get_display();
++#if VALA_0_24
++        m_xdisplay = (display as Gdk.X11.Display).get_xdisplay();
++#else
++        m_xdisplay = Gdk.X11Display.get_xdisplay(display);
++#endif
++
+         m_toplevel = new Gtk.Window(Gtk.WindowType.POPUP);
+         m_toplevel.add_events(Gdk.EventMask.BUTTON_PRESS_MASK);
+ 
+@@ -64,6 +75,10 @@ public class PropertyPanel : Gtk.Box {
+                 m_cursor_location.y = 0;
+             }
+         });
++
++        // PropertyPanel runs before KDE5 panel runs and
++        // monitor the desktop size.
++        monitor_net_workarea_atom();
+     }
+ 
+     public void set_properties(IBus.PropList props) {
+@@ -294,9 +309,8 @@ public class PropertyPanel : Gtk.Box {
+             cursor_right_bottom.y + allocation.height
+         };
+ 
+-        Gdk.Window root = Gdk.get_default_root_window();
+-        int root_width = root.get_width();
+-        int root_height = root.get_height();
++        int root_width = m_root_window.get_width();
++        int root_height = m_root_window.get_height();
+ 
+         int x, y;
+         if (window_right_bottom.x > root_width)
+@@ -312,73 +326,125 @@ public class PropertyPanel : Gtk.Box {
+         move(x, y);
+     }
+ 
++    private bool is_bottom_panel() {
++        string desktop = Environment.get_variable("XDG_CURRENT_DESKTOP");
++        // LXDE has not implemented DesktopNames yet.
++        if (desktop == null)
++            desktop = Environment.get_variable("XDG_SESSION_DESKTOP");
++        switch (desktop) {
++            case "KDE":         return true;
++            case "LXDE":        return true;
++            default:            return false;
++        }
++    }
++
+     private void set_default_location() {
+         Gtk.Allocation allocation;
+         m_toplevel.get_allocation(out allocation);
+ 
+-        unowned Gdk.Window root = Gdk.get_default_root_window();
+-        int root_width = root.get_width();
++        int root_width = m_root_window.get_width();
++        int root_height = m_root_window.get_height();
+         int root_x = 0;
+         int root_y = 0;
+         int ws_num = 0;
+ 
+-        unowned Gdk.Display display = root.get_display();
+ #if VALA_0_24
+-        unowned X.Display xdisplay =
+-                (display as Gdk.X11.Display).get_xdisplay();
+-        X.Window xwindow = (root as Gdk.X11.Window).get_xid();
++        X.Window xwindow = (m_root_window as Gdk.X11.Window).get_xid();
+ #else
+-        unowned X.Display xdisplay = Gdk.X11Display.get_xdisplay(display);
+-        X.Window xwindow = Gdk.X11Window.get_xid(root);
++        X.Window xwindow = Gdk.X11Window.get_xid(m_root_window);
+ #endif
+         X.Atom _net_current_desktop =
+-                xdisplay.intern_atom("_NET_CURRENT_DESKTOP", false);
++                m_xdisplay.intern_atom("_NET_CURRENT_DESKTOP", false);
+         X.Atom type = X.None;
+         int format;
+         ulong nitems = 0;
+         ulong bytes_after;
+         void *prop;
+-        xdisplay.get_window_property(xwindow,
+-                                     _net_current_desktop,
+-                                     0, 32, false, X.XA_CARDINAL,
+-                                     out type, out format,
+-                                     out nitems, out bytes_after,
+-                                     out prop);
++        m_xdisplay.get_window_property(xwindow,
++                                      _net_current_desktop,
++                                      0, 32, false, X.XA_CARDINAL,
++                                      out type, out format,
++                                      out nitems, out bytes_after,
++                                      out prop);
+ 
+         if (type != X.None && nitems >= 1)
+             ws_num = (int) ((ulong *)prop)[0];
+ 
+         X.Atom _net_workarea =
+-                xdisplay.intern_atom("_NET_WORKAREA", false);
++                m_xdisplay.intern_atom("_NET_WORKAREA", false);
+         type = X.None;
+         nitems = 0;
+ 
+-        xdisplay.get_window_property(xwindow,
+-                                     _net_workarea,
+-                                     0, 32, false, X.XA_CARDINAL,
+-                                     out type, out format,
+-                                     out nitems, out bytes_after,
+-                                     out prop);
+-
+-        if (type != X.None && nitems >= 2) {
+-            root_x = (int) ((ulong *)prop)[ws_num * 4];
+-            root_y = (int) ((ulong *)prop)[ws_num * 4 + 1];
++        m_xdisplay.get_window_property(xwindow,
++                                      _net_workarea,
++                                      0, 32, false, X.XA_CARDINAL,
++                                      out type, out format,
++                                      out nitems, out bytes_after,
++                                      out prop);
++
++        if (type != X.None) {
++            if (nitems >= 2) {
++                root_x = (int) ((ulong *)prop)[ws_num * 4];
++                root_y = (int) ((ulong *)prop)[ws_num * 4 + 1];
++            }
++            if (nitems >= 4) {
++                root_width = (int) ((ulong *)prop)[ws_num * 4 + 2];
++                root_height = (int) ((ulong *)prop)[ws_num * 4 + 3];
++            }
+         }
+ 
+         int x, y;
+-        /* Translators: If your locale is RTL, the msgstr is "default:RTL".
+-         * Otherwise the msgstr is "default:LTR". */
+-        if (_("default:LTR") != "default:RTL") {
+-            x = root_width - allocation.width;
+-            y = root_y;
++        if (is_bottom_panel()) {
++            /* Translators: If your locale is RTL, the msgstr is "default:RTL".
++             * Otherwise the msgstr is "default:LTR". */
++            if (_("default:LTR") != "default:RTL") {
++                x = root_width - allocation.width;
++                y = root_height - allocation.height;
++            } else {
++                x = root_x;
++                y = root_height - allocation.height;
++            }
+         } else {
+-            x = root_x;
+-            y = root_y;
++            if (_("default:LTR") != "default:RTL") {
++                x = root_width - allocation.width;
++                y = root_y;
++            } else {
++                x = root_x;
++                y = root_y;
++            }
+         }
+ 
+         move(x, y);
+     }
+ 
++    private Gdk.FilterReturn root_window_filter(Gdk.XEvent gdkxevent,
++                                                Gdk.Event  event) {
++        X.Event *xevent = (X.Event*) gdkxevent;
++        if (xevent.type == X.EventType.PropertyNotify) {
++            string aname = m_xdisplay.get_atom_name(xevent.xproperty.atom);
++            if (aname == "_NET_WORKAREA" && xevent.xproperty.state == 0) {
++                set_default_location();
++                return Gdk.FilterReturn.CONTINUE;
++            }
++        }
++        return Gdk.FilterReturn.CONTINUE;
++    }
++
++    private void monitor_net_workarea_atom() {
++        Gdk.EventMask events = m_root_window.get_events();
++        if ((events & Gdk.EventMask.PROPERTY_CHANGE_MASK) == 0)
++            m_root_window.set_events (events |
++                                      Gdk.EventMask.PROPERTY_CHANGE_MASK);
++
++        m_root_window.add_filter(root_window_filter);
++
++        GLib.Timeout.add(MONITOR_NET_WORKAREA_TIMEOUT, () => {
++            m_root_window.remove_filter(root_window_filter);
++            return false;
++        },
++        GLib.Priority.DEFAULT_IDLE);
++    }
++
+     private void show_with_auto_hide_timer() {
+         if (m_items.length == 0) {
+             /* Do not blink the panel with focus-in in case the panel
+@@ -568,10 +634,12 @@ public class PropToolButton : Gtk.ToolButton, IPropToolItem {
+     private IBus.Property m_prop = null;
+ 
+     public PropToolButton(IBus.Property prop) {
+-        string label = prop.get_symbol().get_text();
+-
+-        /* Chain up base class constructor */
+-        GLib.Object(label: label);
++        /* Chain up base class constructor
++         *
++         * If the constructor sets "label" property, "halign" property
++         * does not work in KDE5 so use sync() for the label.
++         */
++        GLib.Object(halign: Gtk.Align.START);
+ 
+         m_prop = prop;
+ 
+@@ -627,8 +695,11 @@ public class PropToggleToolButton : Gtk.ToggleToolButton, IPropToolItem {
+     private IBus.Property m_prop = null;
+ 
+     public PropToggleToolButton(IBus.Property prop) {
+-        /* Chain up base class constructor */
+-        GLib.Object();
++        /* Chain up base class constructor
++         *
++         * Need to set halign for KDE5
++         */
++        GLib.Object(halign: Gtk.Align.START);
+ 
+         m_prop = prop;
+ 
+@@ -706,8 +777,11 @@ public class PropMenuToolButton : PropToggleToolButton, IPropToolItem {
+     private PropMenu m_menu = null;
+ 
+     public PropMenuToolButton(IBus.Property prop) {
+-        /* Chain up base class constructor */
+-        GLib.Object();
++        /* Chain up base class constructor
++         *
++         * Need to set halign for KDE5
++         */
++        GLib.Object(halign: Gtk.Align.START);
+ 
+         m_menu = new PropMenu(prop);
+         m_menu.deactivate.connect((m) =>
+-- 
+2.1.0
+
+From 020bd45eda9e3a3a2836122fbe0437cafb71f163 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Wed, 1 Apr 2015 11:42:34 +0900
+Subject: [PATCH] ibus-ui-gtk3: Draw gray color on PropertyPanel handle
+
+Users can move the position of IBus PropertyPanel with the mouse
+but currently it is too hard to find the handle on the panel.
+Now the handle is drawn by the gray color for the visibility.
+
+TEST=ui/gtk3/ibus-ui-gtk3
+
+Review URL: https://codereview.appspot.com/219520043
+---
+ ui/gtk3/handle.vala | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/ui/gtk3/handle.vala b/ui/gtk3/handle.vala
+index b9c3bbc..1edb537 100644
+--- a/ui/gtk3/handle.vala
++++ b/ui/gtk3/handle.vala
+@@ -2,7 +2,7 @@
+  *
+  * ibus - The Input Bus
+  *
+- * Copyright(c) 2011 Peng Huang <shawn.p.huang@gmail.com>
++ * Copyright(c) 2011-2015 Peng Huang <shawn.p.huang@gmail.com>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -36,6 +36,19 @@ class Handle : Gtk.EventBox {
+                              Gdk.EventMask.BUTTON1_MOTION_MASK;
+         set_events(mask);
+         m_move_begined = false;
++
++        // Currently it is too hard to notice this Handle on PropertyPanel
++        // so now this widget is drawn by the gray color for the visibility.
++        Gtk.CssProvider css_provider = new Gtk.CssProvider();
++        try {
++            css_provider.load_from_data(
++                    "GtkEventBox { background-color: gray }", -1);
++        } catch (GLib.Error error) {
++            warning("Parse error in Handle: %s", error.message);
++        }
++        Gtk.StyleContext context = get_style_context();
++        context.add_provider(css_provider,
++                             Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+     }
+ 
+     public override void realize() {
+-- 
+2.1.0
+
+From cc88075ddae038f90039d58147bb3c9d7eb08364 Mon Sep 17 00:00:00 2001
+From: Hodong Kim <hodong@cogno.org>
+Date: Thu, 2 Apr 2015 11:18:57 +0900
+Subject: [PATCH] Fix compile error in client/x11/Makefile
+
+BUG=https://github.com/ibus/ibus/pull/18
+TEST=client/x11/Makefile
+
+Review URL: https://codereview.appspot.com/217590043
+Patch from Hodong Kim <hodong@cogno.org>.
+---
+ client/x11/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/client/x11/Makefile.am b/client/x11/Makefile.am
+index 9813ceb..ba6fe8a 100644
+--- a/client/x11/Makefile.am
++++ b/client/x11/Makefile.am
+@@ -57,7 +57,7 @@ noinst_HEADERS = \
+ 	locales.h \
+ 	$(NULL)
+ 
+-$(IMdkit):
++$(libIMdkit):
+ 	(cd $(top_builddir)/util/IMdkit; make)
+ 
+ $(libibus):
+-- 
+2.1.0
+
+From 35d035bfc48e20eecb3b3b3b14712d73c5fc027b Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Thu, 2 Apr 2015 11:26:24 +0900
+Subject: [PATCH] ibus-ui-gtk3: Enable absolute path of engine icon in
+ KDE5
+
+plasma-workspace 5.2 supports the icon full path.
+Now the build checks if qtbase-devel is 5.4 or later since
+there is no way to check the version of plasma-workspace.
+
+BUG=https://github.com/ibus/ibus/pull/17
+TEST=ui/gtk3/ibus-ui-gtk3
+
+Review URL: https://codereview.appspot.com/217310044
+---
+ configure.ac        | 17 +++++++++++++++++
+ ui/gtk3/Makefile.am |  8 ++++++--
+ ui/gtk3/panel.vala  | 10 ++++++++--
+ 3 files changed, 31 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 39c9cad..8eb6168 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -270,9 +270,25 @@ else
+     enable_wayland="no (disabled, use --enable-wayland to enable)"
+ fi
+ 
++enable_appindicator_engine_icon="no"
+ if test x"$enable_appindicator" = x"yes"; then
+     enable_appindicator="yes (enabled, use --disable-appindicator to disable)"
++
++    # Need qt5-qtbase-devel package
++    # There is no way to check the version of KStatusNotifierItem and
++    # check the version of qtbase here.
++    AC_MSG_CHECKING([for KDE5 appindicator engine icon])
++    PKG_CHECK_EXISTS([Qt5Gui >= 5.4],
++        enable_appindicator_engine_icon="yes"
++    )
++    AC_MSG_RESULT([$enable_appindicator_engine_icon])
++
++fi
++if test x"$enable_appindicator_engine_icon" != x"yes" ; then
++    enable_appindicator_engine_icon="no (disabled, need qtbase-devel 5.4 or later)"
+ fi
++AM_CONDITIONAL([ENABLE_APPINDICATOR_ENGINE_ICON],
++               [test x"$enable_appindicator_engine_icon" = x"yes"])
+ 
+ # GObject introspection
+ GOBJECT_INTROSPECTION_CHECK([0.6.8])
+@@ -639,6 +655,7 @@ Build options:
+   Build XIM agent server        $enable_xim
+   Build wayland support         $enable_wayland
+   Build appindicator support    $enable_appindicator
++  Build appindicator engine icon $enable_appindicator_engine_icon
+   Build python library          $enable_python_library
+   Build gconf modules           $enable_gconf
+   Build memconf modules         $enable_memconf
+diff --git a/ui/gtk3/Makefile.am b/ui/gtk3/Makefile.am
+index 40cce11..2de227d 100644
+--- a/ui/gtk3/Makefile.am
++++ b/ui/gtk3/Makefile.am
+@@ -98,6 +98,10 @@ if ENABLE_APPINDICATOR
+ AM_VALAFLAGS += --define=INDICATOR
+ endif
+ 
++if ENABLE_APPINDICATOR_ENGINE_ICON
++AM_VALAFLAGS += --define=INDICATOR_ENGINE_ICON
++endif
++
+ libexec_PROGRAMS = ibus-ui-gtk3
+ 
+ ibus_ui_gtk3_SOURCES = \
+@@ -136,8 +140,8 @@ CLEANFILES = \
+ # References:
+ # libappindicator/src/notification-item.xml
+ # libappindicator/src/notification-watcher.xml
+-# knotifications/src/org.kde.StatusNotifierItem.xml
+-# knotifications/src/org.kde.StatusNotifierWatcher.xml
++# kdelibs/kdeui/knotifications/src/org.kde.StatusNotifierItem.xml
++# kdelibs/kdeui/knotifications/src/org.kde.StatusNotifierWatcher.xml
+ EXTRA_DIST = \
+ 	gtkpanel.xml.in \
+ 	notification-item.xml \
+diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala
+index 1379860..c77bd2f 100644
+--- a/ui/gtk3/panel.vala
++++ b/ui/gtk3/panel.vala
+@@ -1248,9 +1248,15 @@ class Panel : IBus.PanelService {
+                 m_status_icon.set_from_file(icon_name);
+             }
+             else if (m_icon_type == IconType.INDICATOR) {
+-                warning("appindicator requires an icon name in a theme " +
+-                        "path instead of the full path: %s", icon_name);
++#if INDICATOR_ENGINE_ICON
++                m_indicator.set_icon_full(icon_name, "");
++#else
++                warning("plasma-workspace 5.2 or later is required to " +
++                        "show the absolute path icon %s. Currently check " +
++                        "qtbase 5.4 since there is no way to check " +
++                        "the version of plasma-workspace.", icon_name);
+                 m_indicator.set_icon_full("ibus-engine", "");
++#endif
+             }
+         } else {
+             string language = null;
+-- 
+2.1.0
 

diff --git a/ibus.spec b/ibus.spec
index 11cf901..339bd32 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -34,7 +34,7 @@
 
 Name:           ibus
 Version:        1.5.10
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 Group:          System Environment/Libraries
@@ -42,8 +42,10 @@ URL:            http://code.google.com/p/ibus/
 Source0:        https://github.com/ibus/ibus/releases/download/%{version}/%{name}-%{version}.tar.gz
 Source1:        %{name}-xinput
 Source2:        %{name}.conf.5
+Source3:        https://fujiwara.fedorapeople.org/ibus/po/%{name}-po-1.5.10-20150402.tar.gz
 # Upstreamed patches.
 # Patch0:         %%{name}-HEAD.patch
+Patch0:         %%{name}-HEAD.patch
 
 BuildRequires:  gettext-devel
 BuildRequires:  libtool
@@ -67,6 +69,9 @@ BuildRequires:  intltool
 BuildRequires:  iso-codes-devel
 BuildRequires:  libnotify-devel
 BuildRequires:  libwayland-client-devel
+%if %with_kde5
+BuildRequires:  qt5-qtbase-devel
+%endif
 
 Requires:       %{name}-libs%{?_isa}   = %{version}-%{release}
 Requires:       %{name}-gtk2%{?_isa}   = %{version}-%{release}
@@ -225,10 +230,13 @@ The ibus-devel-docs package contains developer documentation for IBus
 %prep
 %setup -q
 # %%patch0 -p1
+%patch0 -p1
 # cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c ||
+zcat %SOURCE3 | tar xfv -
 
 %build
 #autoreconf -f -i -v
+autoreconf -f -i -v
 #make -C ui/gtk3 maintainer-clean-generic
 %configure \
     --disable-static \
@@ -319,20 +327,20 @@ dconf update || :
 %post gtk2
 if [ $1 -eq 1 ] ; then
     # For upgrades, the cache will be regenerated by the new package's %%postun
-    %{_bindir}/update-gtk-immodules %{_host} || :
+    gtk-query-immodules-2.0-%{__isa_bits} --update-cache &> /dev/null || :
 fi
 
 %postun gtk2
-%{_bindir}/update-gtk-immodules %{_host} || :
+gtk-query-immodules-2.0-%{__isa_bits} --update-cache &> /dev/null || :
 
 %post gtk3
 if [ $1 -eq 1 ] ; then
     # For upgrades, the cache will be regenerated by the new package's %%postun
-    /usr/bin/gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
+    gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
 fi
 
 %postun gtk3
-/usr/bin/gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
+gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
 
 
 # FIXME: no version number
@@ -415,6 +423,15 @@ fi
 %{_datadir}/gtk-doc/html/*
 
 %changelog
+* Thu Apr 02 2015 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.10-2
+- Updated ibus-HEAD.patch from upstream
+  Added Swedish svdvorak
+  I18N engine longnames and descriptions on ibus-setup
+  Moved PropertyPanel at bottom right in KDE5
+  Drew gray color on Handle PropertyPanel
+  Enabled ibus engine full path icon in KDE5
+  Updated translations
+
 * Wed Feb 25 2015 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.10-1
 - Bumped to 1.5.10
 

diff --git a/sources b/sources
index 7c13f54..4168bd0 100644
--- a/sources
+++ b/sources
@@ -1 +1,2 @@
 e2f1d34083602ef6865880147a409eaa  ibus-1.5.10.tar.gz
+8996d963d5333fbc6073d92181677b70  ibus-po-1.5.10-20150402.tar.gz

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream
@ 2026-05-31  2:06 Takao Fujiwara
  0 siblings, 0 replies; 6+ messages in thread
From: Takao Fujiwara @ 2026-05-31  2:06 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/ibus
            Branch : autotool
            Commit : 0cb2056cc99bfa7db2e4a19cdab1978484c6c5e2
            Author : Takao Fujiwara <tfujiwar@redhat.com>
            Date   : 2015-04-27T11:05:20+09:00
            Stats  : +78/-1 in 2 file(s)
            URL    : https://src.fedoraproject.org/rpms/ibus/c/0cb2056cc99bfa7db2e4a19cdab1978484c6c5e2?branch=autotool

            Log:
            Updated ibus-HEAD.patch from upstream

Fixed to show shortcuts on ibus-setup.
Bug 1214271 Fixed to enable IME with GTK3 applications in wayland.

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 557b917..1a865c8 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -1483,3 +1483,74 @@ index 1379860..c77bd2f 100644
 -- 
 2.1.0
 
+From 5d9109b3c56bca60be441ad286688467c67664c8 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Tue, 21 Apr 2015 11:26:04 +0900
+Subject: [PATCH] Fix to show keyboard shortcuts in ibus-setup.
+
+BUG=http://code.google.com/p/ibus/issues/detail?id=1771
+TEST=setup
+
+Review URL: https://codereview.appspot.com/233720043
+---
+ setup/keyboardshortcut.py | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/setup/keyboardshortcut.py b/setup/keyboardshortcut.py
+index 86463cb..39a6d47 100644
+--- a/setup/keyboardshortcut.py
++++ b/setup/keyboardshortcut.py
+@@ -2,8 +2,8 @@
+ #
+ # ibus - The Input Bus
+ #
+-# Copyright (c) 2007-2014 Peng Huang <shawn.p.huang@gmail.com>
+-# Copyright (c) 2007-2014 Red Hat, Inc.
++# Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com>
++# Copyright (c) 2007-2015 Red Hat, Inc.
+ #
+ # This library is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU Lesser General Public
+@@ -51,13 +51,13 @@ class KeyboardShortcutSelection(Gtk.Box):
+         # shortcuts view
+         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)
+         self.__shortcut_view.append_column(column)
+         self.__shortcut_view.connect("cursor-changed", self.__shortcut_view_cursor_changed_cb)
+         scrolledwindow = Gtk.ScrolledWindow()
+         scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
++        scrolledwindow.set_min_content_height(100)
+         scrolledwindow.add(self.__shortcut_view)
+         scrolledwindow.set_shadow_type(Gtk.ShadowType.IN)
+         self.pack_start(scrolledwindow, True, True, 4)
+@@ -265,7 +265,9 @@ class KeyboardShortcutSelection(Gtk.Box):
+                               GObject.TYPE_UINT,
+                               GObject.TYPE_UINT)
+         accel_view = Gtk.TreeView(model = model)
++        accel_view.set_headers_visible(False)
+         sw.add(accel_view)
++        sw.set_min_content_height(30)
+         column = Gtk.TreeViewColumn()
+         renderer = Gtk.CellRendererAccel(accel_mode=Gtk.CellRendererAccelMode.OTHER,
+                                          editable=True)
+-- 
+2.3.5
+
+--- ibus-1.5.10/client/gtk2/ibusimcontext.c.orig	2015-04-24 13:49:05.148023921 +0900
++++ ibus-1.5.10/client/gtk2/ibusimcontext.c	2015-04-24 13:52:58.871389692 +0900
+@@ -579,7 +579,11 @@ ibus_im_context_class_init (IBusIMContex
+ 
+     /* init bus object */
+     if (_bus == NULL) {
+-        ibus_set_display (gdk_display_get_name (gdk_display_get_default ()));
++        const gchar *dname = gdk_display_get_name (gdk_display_get_default ());
++        /* ibus-daemon uses DISPLAY variable. */
++        if (g_strcmp0 (dname, "Wayland") == 0)
++            dname = g_getenv ("DISPLAY");
++        ibus_set_display (dname);
+         _bus = ibus_bus_new_async ();
+ 
+         /* init the global fake context */

diff --git a/ibus.spec b/ibus.spec
index 339bd32..edcbd95 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -34,7 +34,7 @@
 
 Name:           ibus
 Version:        1.5.10
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 Group:          System Environment/Libraries
@@ -232,6 +232,7 @@ The ibus-devel-docs package contains developer documentation for IBus
 # %%patch0 -p1
 %patch0 -p1
 # cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c ||
+cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c ||
 zcat %SOURCE3 | tar xfv -
 
 %build
@@ -423,6 +424,11 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &> /dev/null || :
 %{_datadir}/gtk-doc/html/*
 
 %changelog
+* Fri Apr 24 2015 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.10-3
+- Updated ibus-HEAD.patch from upstream
+  Fixed to show shortcuts on ibus-setup.
+  Bug 1214271 Fixed to enable IME with GTK3 applications in wayland.
+
 * Thu Apr 02 2015 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.10-2
 - Updated ibus-HEAD.patch from upstream
   Added Swedish svdvorak

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream.
@ 2026-05-31  2:06 Takao Fujiwara
  0 siblings, 0 replies; 6+ messages in thread
From: Takao Fujiwara @ 2026-05-31  2:06 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/ibus
            Branch : autotool
            Commit : e08ec45e28946654ded1d2c6eb43d94d0fb9a885
            Author : Takao Fujiwara <tfujiwar@redhat.com>
            Date   : 2014-07-14T16:52:35+09:00
            Stats  : +464/-43 in 4 file(s)
            URL    : https://src.fedoraproject.org/rpms/ibus/c/e08ec45e28946654ded1d2c6eb43d94d0fb9a885?branch=autotool

            Log:
            Updated ibus-HEAD.patch from upstream.

Fixed ibus-setup SEGV when an engine is selected.
Fixed ibus-setup deprecated warnings with the latest python3-gobject.
Integrated the 'IBUS_SETUP_XID' environment variable for each engine setup.
Set prgname 'ibus-setup' for ibus-setup.

---
diff --git a/ibus-530711-preload-sys.patch b/ibus-530711-preload-sys.patch
index 790cbe0..d1869c4 100644
--- a/ibus-530711-preload-sys.patch
+++ b/ibus-530711-preload-sys.patch
@@ -1,6 +1,6 @@
-From a6d4b9ac9a22c5b88c362b659eaf6fd59a0cf5bd Mon Sep 17 00:00:00 2001
+From 91f6d9f3d0fc854711c2ba151c0dc5105a0a9152 Mon Sep 17 00:00:00 2001
 From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 14 Jan 2014 15:30:24 +0900
+Date: Mon, 14 Jul 2014 16:20:21 +0900
 Subject: [PATCH] Reload preload engines until users customize the list.
 
 The idea is, if users don't customize the preload_engines with ibus-setup,
@@ -18,14 +18,14 @@ IBUS_PRELOAD_ENGINE_MODE_USER and users can customize the value
 'preload-engines'.
 ---
  data/ibus.schemas.in | 24 ++++++++++++++
- setup/main.py        | 70 +++++++++++++++++++++++++++++++++++----
+ setup/main.py        | 72 ++++++++++++++++++++++++++++++++++++----
  setup/setup.ui       | 22 +++++++++++--
  src/ibustypes.h      | 10 ++++++
  ui/gtk3/panel.vala   | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 210 insertions(+), 9 deletions(-)
+ 5 files changed, 212 insertions(+), 9 deletions(-)
 
 diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
-index 8fd7e15..28d2219 100644
+index 1e4776b..9ee0b1a 100644
 --- a/data/ibus.schemas.in
 +++ b/data/ibus.schemas.in
 @@ -2,6 +2,30 @@
@@ -60,7 +60,7 @@ index 8fd7e15..28d2219 100644
        <applyto>/desktop/ibus/general/preload_engines</applyto>
        <owner>ibus</owner>
 diff --git a/setup/main.py b/setup/main.py
-index d3f4414..235ef9c 100644
+index dee7be4..a991438 100644
 --- a/setup/main.py
 +++ b/setup/main.py
 @@ -190,16 +190,30 @@ class Setup(object):
@@ -124,7 +124,7 @@ index d3f4414..235ef9c 100644
      def __treeview_notify_cb(self, treeview, prop):
          if prop.name not in ("active-engine", "engines"):
              return
-@@ -321,6 +343,43 @@ class Setup(object):
+@@ -321,6 +343,44 @@ class Setup(object):
              del self.__engine_setup_exec_list[name]
          self.__engine_setup_exec_list[name] = os.spawnl(os.P_NOWAIT, *args)
  
@@ -140,9 +140,10 @@ index d3f4414..235ef9c 100644
 +                        "cleared immediately and the list will be " \
 +                        "configured by the login language every time. " \
 +                        "Do you agree with this?")
-+            dlg = Gtk.MessageDialog(type = Gtk.MessageType.QUESTION,
++            dlg = Gtk.MessageDialog(message_type = Gtk.MessageType.QUESTION,
++                    transient_for = self.__window,
 +                    buttons = Gtk.ButtonsType.YES_NO,
-+                    message_format = message)
++                    text = message)
 +            id = dlg.run()
 +            dlg.destroy()
 +            self.__flush_gtk_events()
@@ -169,7 +170,7 @@ index d3f4414..235ef9c 100644
          self.__bus = IBus.Bus()
          if self.__bus.is_connected():
 diff --git a/setup/setup.ui b/setup/setup.ui
-index 65dcee4..a6a001b 100644
+index 5ffbe47..7c60b72 100644
 --- a/setup/setup.ui
 +++ b/setup/setup.ui
 @@ -677,7 +677,23 @@
@@ -197,7 +198,7 @@ index 65dcee4..a6a001b 100644
                          <property name="orientation">horizontal</property>
                          <property name="visible">True</property>
                          <property name="can_focus">False</property>
-@@ -868,7 +884,7 @@
+@@ -869,7 +885,7 @@
                        <packing>
                          <property name="expand">True</property>
                          <property name="fill">True</property>
@@ -206,7 +207,7 @@ index 65dcee4..a6a001b 100644
                        </packing>
                      </child>
                      <child>
-@@ -916,7 +932,7 @@
+@@ -917,7 +933,7 @@
                        <packing>
                          <property name="expand">False</property>
                          <property name="fill">True</property>
@@ -237,7 +238,7 @@ index 86fc2cc..cb9eb22 100644
   * @x: x coordinate.
   * @y: y coordinate.
 diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala
-index 1da7966..fc60fd4 100644
+index 7a15049..e6c128a 100644
 --- a/ui/gtk3/panel.vala
 +++ b/ui/gtk3/panel.vala
 @@ -141,6 +141,10 @@ class Panel : IBus.PanelService {
@@ -349,5 +350,5 @@ index 1da7966..fc60fd4 100644
  
      private void update_xkb_engines() {
 -- 
-1.8.0
+1.8.5.3
 

diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index e249604..316e140 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -212,7 +212,7 @@ index 1b617f8..c16f86a 100644
 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 1/8] Fix escape key with Ctrl+Shift+U ISO 14755.
+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
@@ -314,7 +314,7 @@ index 8c076ac..300a828 100644
 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 2/8] Update ibuscomposetable.h for pt-br.
+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
@@ -1000,7 +1000,7 @@ index 2ba3571..22aab48 100644
 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 4/8] Do not sort ibus engines when they are saved by
+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
@@ -1099,7 +1099,7 @@ index dee7be4..1d89f3d 100644
 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 5/8] Use "keycode Linux_keycode = X11_keysym" format
+Subject: [PATCH] Use "keycode Linux_keycode = X11_keysym" format
 
 Delete non-Linux keyboard compatibility.
 
@@ -1150,7 +1150,7 @@ index 2c78347..e5546fa 100644
 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 7/8] Add ibus reset-config and read-config sub-commands.
+Subject: [PATCH] Add ibus reset-config and read-config sub-commands.
 
 BUG=rhbz#530711
 TEST=tools/ibus
@@ -1243,17 +1243,20 @@ index db4fd23..ecce80a 100644
 -- 
 1.8.5.3
 
-From 4c245bbbac3edea90980a0f47ef2d5c0c070f936 Mon Sep 17 00:00:00 2001
+From 9e5a2bd2c40f9eed8d99710b63b3dab737aa9b95 Mon Sep 17 00:00:00 2001
 From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Mon, 7 Jul 2014 16:17:25 +0900
-Subject: [PATCH 8/8] Update ibus(1) for read-config and reset-config.
+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..f777f65 100644
+index ab99db4..6ac92ff 100644
 --- a/tools/ibus.1.in
 +++ b/tools/ibus.1.in
 @@ -85,6 +85,13 @@ directories, separated by ':'.
@@ -1261,7 +1264,7 @@ index ab99db4..f777f65 100644
  Show the D-Bus address of ibus-daemon.
  .TP
 +\fBread\-config\fR
-+Show the setting values in a gsettings configuration file.
++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
@@ -1273,3 +1276,414 @@ index ab99db4..f777f65 100644
 -- 
 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
+

diff --git a/ibus-xx-setup-frequent-lang.patch b/ibus-xx-setup-frequent-lang.patch
index f96430a..35600c9 100644
--- a/ibus-xx-setup-frequent-lang.patch
+++ b/ibus-xx-setup-frequent-lang.patch
@@ -1,6 +1,6 @@
-From 6c5b4f197afde5185c23ed725eecb36da43507e6 Mon Sep 17 00:00:00 2001
+From 79587f187998b6e89c478ac23c7dbcba56a91637 Mon Sep 17 00:00:00 2001
 From: fujiwarat <takao.fujiwara1@gmail.com>
-Date: Tue, 14 Jan 2014 15:30:54 +0900
+Date: Mon, 14 Jul 2014 16:21:19 +0900
 Subject: [PATCH] Enable ibus-setup to show the frequently used languages
  only in IME list.
 
@@ -10,7 +10,7 @@ Subject: [PATCH] Enable ibus-setup to show the frequently used languages
  2 files changed, 292 insertions(+), 24 deletions(-)
 
 diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in
-index 28d2219..0600133 100644
+index 9ee0b1a..c638e7d 100644
 --- a/data/ibus.schemas.in
 +++ b/data/ibus.schemas.in
 @@ -384,6 +384,174 @@ se,si,sk,sy,sy(ku),th,tj,tr,ua,uz,vn
@@ -189,7 +189,7 @@ index 28d2219..0600133 100644
        <applyto>/desktop/ibus/panel/custom_font</applyto>
        <owner>ibus</owner>
 diff --git a/setup/enginecombobox.py b/setup/enginecombobox.py
-index b45ad56..830f0e8 100644
+index 2a2a677..a203b25 100644
 --- a/setup/enginecombobox.py
 +++ b/setup/enginecombobox.py
 @@ -24,6 +24,7 @@ import locale
@@ -207,7 +207,7 @@ index b45ad56..830f0e8 100644
 +        self.__all_model = None
 +        self.__show_sub_lang = False
 +        self.__settings_xkblayoutconfig = Gio.Settings(
-+                "org.freedesktop.ibus.general.xkblayoutconfig");
++                schema = "org.freedesktop.ibus.general.xkblayoutconfig");
  
          renderer = Gtk.CellRendererPixbuf()
          renderer.set_property("xalign", 0)
@@ -217,17 +217,6 @@ index b45ad56..830f0e8 100644
  
 -    def set_engines(self, engines):
 -        self.__model = Gtk.TreeStore(object)
--
--        iter1 = self.__model.append(None)
--        self.__model.set(iter1, 0, 0)
--        langs = {}
--        for e in engines:
--            l = IBus.get_language_name(e.get_language())
--            if l == None:
--                l = ""
--            if l not in langs:
--                langs[l] = []
--            langs[l].append(e)
 +    def __gconf_get_lang_list_from_locale(self):
 +        common_list = ['en', 'Other']
 +        loc = None
@@ -256,7 +245,17 @@ index b45ad56..830f0e8 100644
 +        if lang_list == None:
 +            return [loc] + common_list
 +        return lang_list + common_list
-+
+ 
+-        iter1 = self.__model.append(None)
+-        self.__model.set(iter1, 0, 0)
+-        langs = {}
+-        for e in engines:
+-            l = IBus.get_language_name(e.get_language())
+-            if l == None:
+-                l = ""
+-            if l not in langs:
+-                langs[l] = []
+-            langs[l].append(e)
 +    def __has_engine_in_lang_list(self, engine, lang_list):
 +        retval = False
 +        for lang in lang_list:
@@ -410,5 +409,5 @@ index b45ad56..830f0e8 100644
              raise AttributeError('unknown property %s' % property.name)
  
 -- 
-1.8.0
+1.8.5.3
 

diff --git a/ibus.spec b/ibus.spec
index c7f74c9..ffc99f6 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -36,7 +36,7 @@
 
 Name:           ibus
 Version:        1.5.7
-Release:        5%{?dist}
+Release:        6%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 Group:          System Environment/Libraries
@@ -466,6 +466,13 @@ fi
 %{_datadir}/gtk-doc/html/*
 
 %changelog
+* Mon Jul 14 2014 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.7-6
+- Updated ibus-HEAD.patch from upstream.
+  Fixed ibus-setup SEGV when an engine is selected.
+  Fixed ibus-setup deprecated warnings with the latest python3-gobject.
+  Integrated the 'IBUS_SETUP_XID' environment variable for each engine setup.
+  Set prgname 'ibus-setup' for ibus-setup.
+
 * Mon Jul 07 2014 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.7-5
 - Updated ibus-HEAD.patch from upstream.
   Added pl(qwertz).

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream.
@ 2026-05-31  2:06 Takao Fujiwara
  0 siblings, 0 replies; 6+ messages in thread
From: Takao Fujiwara @ 2026-05-31  2:06 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/ibus
            Branch : autotool
            Commit : 6f58b8fb0de45d67ee39149bc12b0c83c7af91bd
            Author : Takao Fujiwara <tfujiwar@redhat.com>
            Date   : 2014-07-07T17:32:53+09:00
            Stats  : +1137/-1 in 2 file(s)
            URL    : https://src.fedoraproject.org/rpms/ibus/c/6f58b8fb0de45d67ee39149bc12b0c83c7af91bd?branch=autotool

            Log:
            Updated ibus-HEAD.patch from upstream.

Added pl(qwertz).
Fixed escape key with Ctrl-Shift-U.
Updated pt-br compose table from the latest xorg.
Do not sort ibus engines when they are saved by ibus-setup.
Updated jp IBusKeymap.
Added ibus reset-config and read-config sub-commands.
Update ibus(1) for read-config and reset-config.

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index cd26824..e249604 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -147,3 +147,1129 @@ index e22135b..db2d5aa 100644
 -- 
 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 1/8] 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 2/8] 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 4/8] 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 5/8] 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 7/8] 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 4c245bbbac3edea90980a0f47ef2d5c0c070f936 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Mon, 7 Jul 2014 16:17:25 +0900
+Subject: [PATCH 8/8] Update ibus(1) for read-config and reset-config.
+
+---
+ tools/ibus.1.in | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/tools/ibus.1.in b/tools/ibus.1.in
+index ab99db4..f777f65 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
++Show 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
+

diff --git a/ibus.spec b/ibus.spec
index 9b55d9d..c7f74c9 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -36,7 +36,7 @@
 
 Name:           ibus
 Version:        1.5.7
-Release:        4%{?dist}
+Release:        5%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 Group:          System Environment/Libraries
@@ -466,6 +466,16 @@ fi
 %{_datadir}/gtk-doc/html/*
 
 %changelog
+* Mon Jul 07 2014 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.7-5
+- Updated ibus-HEAD.patch from upstream.
+  Added pl(qwertz).
+  Fixed escape key with Ctrl-Shift-U.
+  Updated pt-br compose table from the latest xorg.
+  Do not sort ibus engines when they are saved by ibus-setup.
+  Updated jp IBusKeymap.
+  Added ibus reset-config and read-config sub-commands.
+  Update ibus(1) for read-config and reset-config.
+
 * Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5.7-4
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
 

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream.
@ 2026-05-31  2:05 Takao Fujiwara
  0 siblings, 0 replies; 6+ messages in thread
From: Takao Fujiwara @ 2026-05-31  2:05 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/ibus
Branch : autotool
Commit : 9168980a4ff29af8aaeac720c650acce1aea292f
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date   : 2011-07-05T16:08:07+09:00
Stats  : +74/-0 in 1 file(s)
URL    : https://src.fedoraproject.org/rpms/ibus/c/9168980a4ff29af8aaeac720c650acce1aea292f?branch=autotool

Log:
Updated ibus-HEAD.patch from upstream.

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index a492a1a..fab6c88 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -992,3 +992,77 @@ index 95e9e0b..a49d6fd 100644
 -- 
 1.7.5.4
 
+From 83d4b3ac538320bfb8e872dd9282ca5bbedf4652 Mon Sep 17 00:00:00 2001
+From: Peng Huang <shawn.p.huang@gmail.com>
+Date: Mon, 4 Jul 2011 03:27:23 +0800
+Subject: [PATCH] Fix BusEngineProxy instance leak.
+
+BUG=none
+TEST=manually with / without global-engine setting
+
+Review URL: http://codereview.appspot.com/4662043
+---
+ bus/engineproxy.c  |    9 ---------
+ bus/inputcontext.c |    5 +----
+ 2 files changed, 1 insertions(+), 13 deletions(-)
+
+diff --git a/bus/engineproxy.c b/bus/engineproxy.c
+index f74af12..95e9e0b 100644
+--- a/bus/engineproxy.c
++++ b/bus/engineproxy.c
+@@ -397,15 +397,6 @@ bus_engine_proxy_real_destroy (IBusProxy *proxy)
+ {
+     BusEngineProxy *engine = (BusEngineProxy *)proxy;
+ 
+-    g_dbus_proxy_call ((GDBusProxy *)proxy,
+-                       "org.freedesktop.IBus.Service.Destroy",
+-                       NULL,
+-                       G_DBUS_CALL_FLAGS_NONE,
+-                       -1,
+-                       NULL,
+-                       NULL,
+-                       NULL);
+-
+     if (engine->desc) {
+         g_object_unref (engine->desc);
+         engine->desc = NULL;
+diff --git a/bus/inputcontext.c b/bus/inputcontext.c
+index 1567c5f..2164e7c 100644
+--- a/bus/inputcontext.c
++++ b/bus/inputcontext.c
+@@ -1020,8 +1020,6 @@ _ic_set_engine (BusInputContext       *context,
+                             NULL,
+                             (GAsyncReadyCallback)_ic_set_engine_done,
+                             invocation);
+-
+-    g_object_unref (desc);
+ }
+ 
+ /**
+@@ -2091,7 +2089,6 @@ bus_input_context_enable (BusInputContext *context)
+                             NULL, /* we do not cancel the call. */
+                             NULL, /* use the default callback function. */
+                             NULL);
+-            g_object_unref (desc);
+         }
+     }
+ 
+@@ -2192,7 +2189,6 @@ bus_input_context_unset_engine (BusInputContext *context)
+         for (i = 0; engine_signals[i].name != NULL; i++) {
+             g_signal_handlers_disconnect_by_func (context->engine, engine_signals[i].callback, context);
+         }
+-        /* Do not destroy the engine anymore, because of global engine feature */
+         g_object_unref (context->engine);
+         context->engine = NULL;
+     }
+@@ -2291,6 +2287,7 @@ new_engine_cb (GObject             *obj,
+         }
+         else {
+             bus_input_context_set_engine (data->context, engine);
++            g_object_unref (engine);
+             bus_input_context_enable (data->context);
+             g_simple_async_result_set_op_res_gboolean (data->simple, TRUE);
+         }
+-- 
+1.7.5.4
+

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream.
@ 2026-05-31  2:04 Takao Fujiwara
  0 siblings, 0 replies; 6+ messages in thread
From: Takao Fujiwara @ 2026-05-31  2:04 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/ibus
Branch : autotool
Commit : fc455bbff0455c4923c157e09fd0b86796115cf1
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date   : 2010-12-28T14:36:20+09:00
Stats  : +88/-9 in 3 file(s)
URL    : https://src.fedoraproject.org/rpms/ibus/c/fc455bbff0455c4923c157e09fd0b86796115cf1?branch=autotool

Log:
Updated ibus-HEAD.patch from upstream.

---
diff --git a/ibus-435880-surrounding-text.patch b/ibus-435880-surrounding-text.patch
index e88c2d1..fb5df0c 100644
--- a/ibus-435880-surrounding-text.patch
+++ b/ibus-435880-surrounding-text.patch
@@ -30,7 +30,7 @@ resets the current surrounding-text.
  ibus/engine.py                  |    6 ++
  ibus/interface/iengine.py       |    3 +
  ibus/interface/iinputcontext.py |    3 +
- src/ibusengine.c                |  134 +++++++++++++++++++++++++++++++++++++++
+ src/ibusengine.c                |  138 +++++++++++++++++++++++++++++++++++++++++
  src/ibusengine.h                |   21 ++++++-
  src/ibusinputcontext.c          |   61 ++++++++++++++++++
  src/ibusinputcontext.h          |   11 +++
@@ -628,7 +628,18 @@ index ae07393..777d404 100644
  static void      ibus_engine_emit_signal     (IBusEngine         *engine,
                                                const gchar        *signal_name,
                                                GVariant           *parameters);
-@@ -245,6 +255,7 @@ ibus_engine_class_init (IBusEngineClass *class)
+@@ -180,6 +190,10 @@ static const gchar introspection_xml[] =
+     "    <method name='PageDown' />"
+     "    <method name='CursorUp' />"
+     "    <method name='CursorDown' />"
++    "    <method name='SetSurroundingText'>"
++    "      <arg direction='in'  type='v' name='text' />"
++    "      <arg direction='in'  type='u' name='cursor_pos' />"
++    "    </method>"
+     /* FIXME signals */
+     "    <signal name='CommitText'>"
+     "      <arg type='v' name='text' />"
+@@ -245,6 +259,7 @@ ibus_engine_class_init (IBusEngineClass *class)
      class->property_hide        = ibus_engine_property_hide;
      class->set_cursor_location  = ibus_engine_set_cursor_location;
      class->set_capabilities     = ibus_engine_set_capabilities;
@@ -636,7 +647,7 @@ index ae07393..777d404 100644
  
      /* install properties */
      /**
-@@ -611,12 +622,39 @@ ibus_engine_class_init (IBusEngineClass *class)
+@@ -611,12 +626,39 @@ ibus_engine_class_init (IBusEngineClass *class)
              G_TYPE_STRING);
  
      g_type_class_add_private (class, sizeof (IBusEnginePrivate));
@@ -676,7 +687,7 @@ index ae07393..777d404 100644
  }
  
  static void
-@@ -625,6 +663,11 @@ ibus_engine_destroy (IBusEngine *engine)
+@@ -625,6 +667,11 @@ ibus_engine_destroy (IBusEngine *engine)
      g_free (engine->priv->engine_name);
      engine->priv->engine_name = NULL;
  
@@ -688,7 +699,7 @@ index ae07393..777d404 100644
      IBUS_OBJECT_CLASS(ibus_engine_parent_class)->destroy (IBUS_OBJECT (engine));
  }
  
-@@ -796,6 +839,25 @@ ibus_engine_service_method_call (IBusService           *service,
+@@ -796,6 +843,25 @@ ibus_engine_service_method_call (IBusService           *service,
          return;
      }
  
@@ -714,7 +725,7 @@ index ae07393..777d404 100644
      /* should not be reached */
      g_return_if_reached ();
  }
-@@ -950,6 +1012,26 @@ ibus_engine_property_hide (IBusEngine *engine, const gchar *prop_name)
+@@ -950,6 +1016,26 @@ ibus_engine_property_hide (IBusEngine *engine, const gchar *prop_name)
  }
  
  static void
@@ -741,7 +752,7 @@ index ae07393..777d404 100644
  ibus_engine_emit_signal (IBusEngine  *engine,
                           const gchar *signal_name,
                           GVariant    *parameters)
-@@ -1133,14 +1215,66 @@ void ibus_engine_delete_surrounding_text (IBusEngine      *engine,
+@@ -1133,14 +1219,66 @@ void ibus_engine_delete_surrounding_text (IBusEngine      *engine,
                                            gint             offset_from_cursor,
                                            guint            nchars)
  {

diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index 7221d5d..54fcce5 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -45,3 +45,70 @@ index 2e288f5..fb56b76 100644
 -- 
 1.7.3.2
 
+--- a/src/ibusinputcontext.c
++++ b/src/ibusinputcontext.c
+@@ -732,7 +732,7 @@ ibus_input_context_get_input_context (co
+                                       GDBusConnection     *connection)
+ {
+     IBusInputContext *context;
+-    GError *error;
++    GError *error = NULL;
+ 
+     context = ibus_input_context_new (path, connection, NULL, &error);
+     if (!context) {
+@@ -904,7 +904,7 @@ ibus_input_context_is_enabled (IBusInput
+ {
+     g_assert (IBUS_IS_INPUT_CONTEXT (context));
+     GVariant *result;
+-    GError *error;
++    GError *error = NULL;
+     result = g_dbus_proxy_call_sync ((GDBusProxy *) context,
+                                      "IsEnabled",               /* method_name */
+                                      NULL,                      /* parameters */
+@@ -932,7 +932,7 @@ ibus_input_context_get_engine (IBusInput
+ {
+     g_assert (IBUS_IS_INPUT_CONTEXT (context));
+     GVariant *result;
+-    GError *error;
++    GError *error = NULL;
+     result = g_dbus_proxy_call_sync ((GDBusProxy *) context,
+                                      "GetEngine",               /* method_name */
+                                      NULL,                      /* parameters */
+From 017077ceb9ec2f26a8c524f3794a832164f21768 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno@unixuser.org>
+Date: Tue, 28 Dec 2010 12:46:25 +0900
+Subject: [PATCH] Fix g_variant_get() call in DeleteSurroundingText signal handler.
+
+BUG=none
+TEST=manual
+
+Review URL: http://codereview.appspot.com/3820042
+---
+ src/ibusinputcontext.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
+index 88afc22..7bbf8a2 100644
+--- a/src/ibusinputcontext.c
++++ b/src/ibusinputcontext.c
+@@ -578,7 +578,7 @@ ibus_input_context_g_signal (GDBusProxy  *proxy,
+         guint32 keycode;
+         guint32 state;
+ 
+-        g_variant_get (parameters, 0, "(uuu)", &keyval, &keycode, &state);
++        g_variant_get (parameters, "(uuu)", &keyval, &keycode, &state);
+ 
+         /* Forward key event back with IBUS_FORWARD_MASK. And process_key_event will
+          * not process key event with IBUS_FORWARD_MASK again. */
+@@ -595,7 +595,7 @@ ibus_input_context_g_signal (GDBusProxy  *proxy,
+         gint offset_from_cursor;
+         guint nchars;
+ 
+-        g_variant_get (parameters, 0, "(iu)", &offset_from_cursor, &nchars);
++        g_variant_get (parameters, "(iu)", &offset_from_cursor, &nchars);
+ 
+         g_signal_emit (context,
+                        context_signals[DELETE_SURROUNDING_TEXT],
+-- 
+1.7.3.2
+

diff --git a/ibus.spec b/ibus.spec
index 16af68f..a8ddf2d 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -12,7 +12,7 @@
 
 Name:       ibus
 Version:    1.3.99.20101202
-Release:    2%{?dist}
+Release:    3%{?dist}
 Summary:    Intelligent Input Bus for Linux OS
 License:    LGPLv2+
 Group:      System Environment/Libraries
@@ -294,9 +294,10 @@ fi
 %{_datadir}/gtk-doc/html/*
 
 %changelog
-* Wed Dec 22 2010 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20101202-2
+* Wed Dec 22 2010 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20101202-3
 - Updated ibus-435880-surrounding-text.patch to support the xml setting.
 - Updated ibus-530711-preload-sys.patch to set the default lang base.
+- Updated ibus-HEAD.patch from upstream.
 
 * Thu Dec 09 2010 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20101202-1
 - Updated to 1.3.99.20101202

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-05-31  2:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-31  2:06 [rpms/ibus] autotool: Updated ibus-HEAD.patch from upstream Takao Fujiwara
  -- strict thread matches above, loose matches on Subject: below --
2026-05-31  2:06 Takao Fujiwara
2026-05-31  2:06 Takao Fujiwara
2026-05-31  2:06 Takao Fujiwara
2026-05-31  2:05 Takao Fujiwara
2026-05-31  2:04 Takao Fujiwara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox