[Fedora-i18n-bugs] [Bug 714563] New: [te_IN] Text cut on left hand side for some composite characters [5]
by Red Hat Bugzilla
Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.
Summary: [te_IN] Text cut on left hand side for some composite characters [5]
https://bugzilla.redhat.com/show_bug.cgi?id=714563
Summary: [te_IN] Text cut on left hand side for some composite
characters [5]
Product: Fedora
Version: 15
Platform: All
OS/Version: Linux
Status: NEW
Keywords: i18n
Severity: medium
Priority: low
Component: lohit-telugu-fonts
AssignedTo: psatpute(a)redhat.com
ReportedBy: aalam(a)redhat.com
QAContact: extras-qa(a)fedoraproject.org
CC: aalam(a)redhat.com, kkrothap(a)redhat.com,
fonts-bugs(a)lists.fedoraproject.org,
psatpute(a)redhat.com, i18n-bugs(a)lists.fedoraproject.org
Depends on: 640607
Classification: Fedora
Story Points: ---
Clone Of: 640607
THIS BUG IS CLONED FOR FOLLOWING ISSUE:
--
ప్టు (ptu)
---
+++ This bug was initially created as a clone of Bug #640607 +++
Created attachment 451886
File contains the characters list for which problem exist
Description of problem:
Some part on Left hand side missing for these combinations. Please go through
the attachment.
Version-Release number of selected component (if applicable):
lohit-telugu-fonts-2.4.5-5.fc14.noarch
How reproducible:
Every time.
Steps to Reproduce:
1. Open gedit and input the combinations mentioned in the attachment using
input method.
2. Or else open the attachment in gedit.
3. Observe the left hand side of every combination which is not appearing
properly.
Actual results:
Text does not appear completely.
Expected results:
Text should appear completely.
Additional info:
Please go through the attachment.
--- Additional comment from psatpute(a)redhat.com on 2010-10-07 10:37:51 IST ---
in attached gedit file it looks proper, please attach application image where
characters are cutting, its version etc
--- Additional comment from kkrothap(a)redhat.com on 2010-10-12 12:19:44 IST ---
Hi,
Please follow the version number, the problem still exist. And when we open the
attached file in gedit we can identify the problem.
--- Additional comment from psatpute(a)redhat.com on 2010-10-22 13:02:42 IST ---
yeah, saw it, glyphs are cutting from left sides
as per we discussed last time we should reduce below based shape, so that they
can accommodate properly below the base shape.
need to change many shape, will work on it
--- Additional comment from arjunaraoc(a)googlemail.com on 2010-12-23 14:55:25
IST ---
Created attachment 470391
Overlapping glyphs issue
Many of these combinations mentioned in this bug, do not usually occur as
first character on aline. Hence the problem may not be that severe. I show
below a test case, where I have noticed somewhat critical overlapping of
glyphs, which can be looked into first.
Overlapping Glyphs for Telugu Font Needing Correction
1. ర్యక్ర (ryakra)
2. ప్టు (ptu)
Pl. see the attached image.
--- Additional comment from kkrothap(a)redhat.com on 2010-12-23 17:57:07 IST ---
(In reply to comment #4)
> Created attachment 470391 [details]
> Overlapping glyphs issue
>
> Many of these combinations mentioned in this bug, do not usually occur as
> first character on aline. Hence the problem may not be that severe. I show
> below a test case, where I have noticed somewhat critical overlapping of
> glyphs, which can be looked into first.
> Overlapping Glyphs for Telugu Font Needing Correction
> 1. ర్యక్ర (ryakra)
> 2. ప్టు (ptu)
>
> Pl. see the attached image.
some more problems need attention:
స్టైల్ = problem in స్టై (sty)
స్మైల్ = problem in స్మై (smy)
వక్తృత్వము = problem in క్తృ (kthru)
భ్రాహ్మణ = problem in భ్రా (bhrA)
Thanks,
krishna.
--- Additional comment from psatpute(a)redhat.com on 2010-12-27 10:18:06 IST ---
Arjun, yes thanks for point the must one
i will try to resolve those soon
--- Additional comment from kkrothap(a)redhat.com on 2011-02-14 15:25:28 IST ---
(In reply to comment #6)
> Arjun, yes thanks for point the must one
> i will try to resolve those soon
Hi Pravin,
>some more problems need attention:
>స్టైల్ = problem in స్టై (sty)
>స్మైల్ = problem in స్మై (smy)
>వక్తృత్వము = problem in క్తృ (kthru)
>భ్రాహ్మణ = problem in భ్రా (bhrA)
In the above examples, if we consider the fourth one it has half 'ra' as below
base. When ever we use this half 'ra' with vowel sign 'aA' on any consonant it
has some problem, the below base half 'ra' moving towards right side which
should stay exactly below the consonant. Since this usage is more in locale
'te_IN' we should fix this soon.
As a whole, these issues need to be fixed because most of them are frequent in
te_IN usage.
Thanks,
Krishna.
--- Additional comment from psatpute(a)redhat.com on 2011-06-20 00:11:59 IST ---
Hi Krishna,
presently this looks very generic bug i.e. "improve telugu fonts" and so many
different kinds of bugs are mentioned regarding Lohit Telugu in this bug.
It will be nice if we can make this as a tracker bug and report new bugs for
each type of combination problems
i.e.
1) >స్టైల్ = problem in స్టై (sty) :- This is problem regarding below base
matra merging with below base half form of consonant. There are so many other
such combination please mentioned few more like these.
2) >స్మైల్ = problem in స్మై (smy) :-
>వక్తృత్వము = problem in క్తృ (kthru)
In this matra is merging with next part of half form of consonant
3) >భ్రాహ్మణ = problem in భ్రా (bhrA):- This is different kind of problem and
there are so many combination affecting this.
4) 1. ర్యక్ర (ryakra) :- This is as well
5) ప్టు (ptu) : This as well
Fixing all together is big change, i think better if we can fix single category
of bugs test it and then move for next bug.
--
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
12 years, 8 months
[Fedora-i18n-bugs] [Bug 714560] New: [te_IN] Text cut on left hand side for some composite characters [2]
by Red Hat Bugzilla
Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.
Summary: [te_IN] Text cut on left hand side for some composite characters [2]
https://bugzilla.redhat.com/show_bug.cgi?id=714560
Summary: [te_IN] Text cut on left hand side for some composite
characters [2]
Product: Fedora
Version: 15
Platform: All
OS/Version: Linux
Status: NEW
Keywords: i18n
Severity: medium
Priority: low
Component: lohit-telugu-fonts
AssignedTo: psatpute(a)redhat.com
ReportedBy: aalam(a)redhat.com
QAContact: extras-qa(a)fedoraproject.org
CC: aalam(a)redhat.com, kkrothap(a)redhat.com,
fonts-bugs(a)lists.fedoraproject.org,
psatpute(a)redhat.com, i18n-bugs(a)lists.fedoraproject.org
Depends on: 640607
Classification: Fedora
Story Points: ---
Clone Of: 640607
THIS BUG IS CLONED FOR FOLLOWING ISSUE
----
2) >స్మైల్ = problem in స్మై (smy) :-
>వక్తృత్వము = problem in క్తృ (kthru)
In this matra is merging with next part of half form of consonant
----
+++ This bug was initially created as a clone of Bug #640607 +++
Created attachment 451886
File contains the characters list for which problem exist
Description of problem:
Some part on Left hand side missing for these combinations. Please go through
the attachment.
Version-Release number of selected component (if applicable):
lohit-telugu-fonts-2.4.5-5.fc14.noarch
How reproducible:
Every time.
Steps to Reproduce:
1. Open gedit and input the combinations mentioned in the attachment using
input method.
2. Or else open the attachment in gedit.
3. Observe the left hand side of every combination which is not appearing
properly.
Actual results:
Text does not appear completely.
Expected results:
Text should appear completely.
Additional info:
Please go through the attachment.
--- Additional comment from psatpute(a)redhat.com on 2010-10-07 10:37:51 IST ---
in attached gedit file it looks proper, please attach application image where
characters are cutting, its version etc
--- Additional comment from kkrothap(a)redhat.com on 2010-10-12 12:19:44 IST ---
Hi,
Please follow the version number, the problem still exist. And when we open the
attached file in gedit we can identify the problem.
--- Additional comment from psatpute(a)redhat.com on 2010-10-22 13:02:42 IST ---
yeah, saw it, glyphs are cutting from left sides
as per we discussed last time we should reduce below based shape, so that they
can accommodate properly below the base shape.
need to change many shape, will work on it
--- Additional comment from arjunaraoc(a)googlemail.com on 2010-12-23 14:55:25
IST ---
Created attachment 470391
Overlapping glyphs issue
Many of these combinations mentioned in this bug, do not usually occur as
first character on aline. Hence the problem may not be that severe. I show
below a test case, where I have noticed somewhat critical overlapping of
glyphs, which can be looked into first.
Overlapping Glyphs for Telugu Font Needing Correction
1. ర్యక్ర (ryakra)
2. ప్టు (ptu)
Pl. see the attached image.
--- Additional comment from kkrothap(a)redhat.com on 2010-12-23 17:57:07 IST ---
(In reply to comment #4)
> Created attachment 470391 [details]
> Overlapping glyphs issue
>
> Many of these combinations mentioned in this bug, do not usually occur as
> first character on aline. Hence the problem may not be that severe. I show
> below a test case, where I have noticed somewhat critical overlapping of
> glyphs, which can be looked into first.
> Overlapping Glyphs for Telugu Font Needing Correction
> 1. ర్యక్ర (ryakra)
> 2. ప్టు (ptu)
>
> Pl. see the attached image.
some more problems need attention:
స్టైల్ = problem in స్టై (sty)
స్మైల్ = problem in స్మై (smy)
వక్తృత్వము = problem in క్తృ (kthru)
భ్రాహ్మణ = problem in భ్రా (bhrA)
Thanks,
krishna.
--- Additional comment from psatpute(a)redhat.com on 2010-12-27 10:18:06 IST ---
Arjun, yes thanks for point the must one
i will try to resolve those soon
--- Additional comment from kkrothap(a)redhat.com on 2011-02-14 15:25:28 IST ---
(In reply to comment #6)
> Arjun, yes thanks for point the must one
> i will try to resolve those soon
Hi Pravin,
>some more problems need attention:
>స్టైల్ = problem in స్టై (sty)
>స్మైల్ = problem in స్మై (smy)
>వక్తృత్వము = problem in క్తృ (kthru)
>భ్రాహ్మణ = problem in భ్రా (bhrA)
In the above examples, if we consider the fourth one it has half 'ra' as below
base. When ever we use this half 'ra' with vowel sign 'aA' on any consonant it
has some problem, the below base half 'ra' moving towards right side which
should stay exactly below the consonant. Since this usage is more in locale
'te_IN' we should fix this soon.
As a whole, these issues need to be fixed because most of them are frequent in
te_IN usage.
Thanks,
Krishna.
--- Additional comment from psatpute(a)redhat.com on 2011-06-20 00:11:59 IST ---
Hi Krishna,
presently this looks very generic bug i.e. "improve telugu fonts" and so many
different kinds of bugs are mentioned regarding Lohit Telugu in this bug.
It will be nice if we can make this as a tracker bug and report new bugs for
each type of combination problems
i.e.
1) >స్టైల్ = problem in స్టై (sty) :- This is problem regarding below base
matra merging with below base half form of consonant. There are so many other
such combination please mentioned few more like these.
2) >స్మైల్ = problem in స్మై (smy) :-
>వక్తృత్వము = problem in క్తృ (kthru)
In this matra is merging with next part of half form of consonant
3) >భ్రాహ్మణ = problem in భ్రా (bhrA):- This is different kind of problem and
there are so many combination affecting this.
4) 1. ర్యక్ర (ryakra) :- This is as well
5) ప్టు (ptu) : This as well
Fixing all together is big change, i think better if we can fix single category
of bugs test it and then move for next bug.
--
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
12 years, 8 months
[Fedora-i18n-bugs] [Bug 714557] New: [te_IN] Text cut on left hand side for some composite characters [1]
by Red Hat Bugzilla
Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.
Summary: [te_IN] Text cut on left hand side for some composite characters [1]
https://bugzilla.redhat.com/show_bug.cgi?id=714557
Summary: [te_IN] Text cut on left hand side for some composite
characters [1]
Product: Fedora
Version: 15
Platform: All
OS/Version: Linux
Status: NEW
Keywords: i18n
Severity: medium
Priority: low
Component: lohit-telugu-fonts
AssignedTo: psatpute(a)redhat.com
ReportedBy: aalam(a)redhat.com
QAContact: extras-qa(a)fedoraproject.org
CC: aalam(a)redhat.com, kkrothap(a)redhat.com,
fonts-bugs(a)lists.fedoraproject.org,
psatpute(a)redhat.com, i18n-bugs(a)lists.fedoraproject.org
Depends on: 640607
Classification: Fedora
Story Points: ---
Clone Of: 640607
THIS BUG IS CLONED FOR FOLLOWING ISSUE:
--
1) >స్టైల్ = problem in స్టై (sty) :- This is problem regarding below base
matra merging with below base half form of consonant. There are so many other
such combination please mentioned few more like these
---
+++ This bug was initially created as a clone of Bug #640607 +++
Created attachment 451886
File contains the characters list for which problem exist
Description of problem:
Some part on Left hand side missing for these combinations. Please go through
the attachment.
Version-Release number of selected component (if applicable):
lohit-telugu-fonts-2.4.5-5.fc14.noarch
How reproducible:
Every time.
Steps to Reproduce:
1. Open gedit and input the combinations mentioned in the attachment using
input method.
2. Or else open the attachment in gedit.
3. Observe the left hand side of every combination which is not appearing
properly.
Actual results:
Text does not appear completely.
Expected results:
Text should appear completely.
Additional info:
Please go through the attachment.
--- Additional comment from psatpute(a)redhat.com on 2010-10-07 10:37:51 IST ---
in attached gedit file it looks proper, please attach application image where
characters are cutting, its version etc
--- Additional comment from kkrothap(a)redhat.com on 2010-10-12 12:19:44 IST ---
Hi,
Please follow the version number, the problem still exist. And when we open the
attached file in gedit we can identify the problem.
--- Additional comment from psatpute(a)redhat.com on 2010-10-22 13:02:42 IST ---
yeah, saw it, glyphs are cutting from left sides
as per we discussed last time we should reduce below based shape, so that they
can accommodate properly below the base shape.
need to change many shape, will work on it
--- Additional comment from arjunaraoc(a)googlemail.com on 2010-12-23 14:55:25
IST ---
Created attachment 470391
Overlapping glyphs issue
Many of these combinations mentioned in this bug, do not usually occur as
first character on aline. Hence the problem may not be that severe. I show
below a test case, where I have noticed somewhat critical overlapping of
glyphs, which can be looked into first.
Overlapping Glyphs for Telugu Font Needing Correction
1. ర్యక్ర (ryakra)
2. ప్టు (ptu)
Pl. see the attached image.
--- Additional comment from kkrothap(a)redhat.com on 2010-12-23 17:57:07 IST ---
(In reply to comment #4)
> Created attachment 470391 [details]
> Overlapping glyphs issue
>
> Many of these combinations mentioned in this bug, do not usually occur as
> first character on aline. Hence the problem may not be that severe. I show
> below a test case, where I have noticed somewhat critical overlapping of
> glyphs, which can be looked into first.
> Overlapping Glyphs for Telugu Font Needing Correction
> 1. ర్యక్ర (ryakra)
> 2. ప్టు (ptu)
>
> Pl. see the attached image.
some more problems need attention:
స్టైల్ = problem in స్టై (sty)
స్మైల్ = problem in స్మై (smy)
వక్తృత్వము = problem in క్తృ (kthru)
భ్రాహ్మణ = problem in భ్రా (bhrA)
Thanks,
krishna.
--- Additional comment from psatpute(a)redhat.com on 2010-12-27 10:18:06 IST ---
Arjun, yes thanks for point the must one
i will try to resolve those soon
--- Additional comment from kkrothap(a)redhat.com on 2011-02-14 15:25:28 IST ---
(In reply to comment #6)
> Arjun, yes thanks for point the must one
> i will try to resolve those soon
Hi Pravin,
>some more problems need attention:
>స్టైల్ = problem in స్టై (sty)
>స్మైల్ = problem in స్మై (smy)
>వక్తృత్వము = problem in క్తృ (kthru)
>భ్రాహ్మణ = problem in భ్రా (bhrA)
In the above examples, if we consider the fourth one it has half 'ra' as below
base. When ever we use this half 'ra' with vowel sign 'aA' on any consonant it
has some problem, the below base half 'ra' moving towards right side which
should stay exactly below the consonant. Since this usage is more in locale
'te_IN' we should fix this soon.
As a whole, these issues need to be fixed because most of them are frequent in
te_IN usage.
Thanks,
Krishna.
--- Additional comment from psatpute(a)redhat.com on 2011-06-20 00:11:59 IST ---
Hi Krishna,
presently this looks very generic bug i.e. "improve telugu fonts" and so many
different kinds of bugs are mentioned regarding Lohit Telugu in this bug.
It will be nice if we can make this as a tracker bug and report new bugs for
each type of combination problems
i.e.
1) >స్టైల్ = problem in స్టై (sty) :- This is problem regarding below base
matra merging with below base half form of consonant. There are so many other
such combination please mentioned few more like these.
2) >స్మైల్ = problem in స్మై (smy) :-
>వక్తృత్వము = problem in క్తృ (kthru)
In this matra is merging with next part of half form of consonant
3) >భ్రాహ్మణ = problem in భ్రా (bhrA):- This is different kind of problem and
there are so many combination affecting this.
4) 1. ర్యక్ర (ryakra) :- This is as well
5) ప్టు (ptu) : This as well
Fixing all together is big change, i think better if we can fix single category
of bugs test it and then move for next bug.
--
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
12 years, 8 months
[Fedora-i18n-bugs] [Bug 722382] New: [hi_IN][Devanagari] showing long form of unicode 093F with glyph ञ्जि
by Red Hat Bugzilla
Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.
Summary: [hi_IN][Devanagari] showing long form of unicode 093F with glyph ञ्जि
https://bugzilla.redhat.com/show_bug.cgi?id=722382
Summary: [hi_IN][Devanagari] showing long form of unicode 093F
with glyph ञ्जि
Product: Fedora
Version: 15
Platform: Unspecified
OS/Version: Unspecified
Status: NEW
Keywords: i18n
Severity: unspecified
Priority: unspecified
Component: lohit-devanagari-fonts
AssignedTo: psatpute(a)redhat.com
ReportedBy: aalam(a)redhat.com
QAContact: extras-qa(a)fedoraproject.org
CC: fonts-bugs(a)lists.fedoraproject.org,
psatpute(a)redhat.com, i18n-bugs(a)lists.fedoraproject.org
Classification: Fedora
Story Points: ---
Created attachment 513330
--> https://bugzilla.redhat.com/attachment.cgi?id=513330
Image for Problematic shape
Description of problem:
ordinary left-hand glyph of ि (093F) is being substituted by the extra long
glyph with ञ्ज character.
Version-Release number of selected component (if applicable):
lohit-devanagari-fonts-2.4.5-3.fc15.noarch
How reproducible:
Steps to Reproduce:
1. copy paste Character (ञ्जि) in gedit
2.
3.
Actual results:
Shape of glyph is wrong with long form of 093F
Expected results:
it should be on upto end of character.
Additional info:
Users's Mail:
https://www.redhat.com/archives/lohit-devel-list/2011-July/msg00000.html
--
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
12 years, 8 months
[Fedora-i18n-bugs] [eekboard/f14] Add gtk2-devel to BR.
by Daiki Ueno
commit fba60a261c585fea03887b271b40441cbd18e5c5
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 13:49:26 2011 +0900
Add gtk2-devel to BR.
eekboard.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/eekboard.spec b/eekboard.spec
index 9e2087a..ccf5361 100644
--- a/eekboard.spec
+++ b/eekboard.spec
@@ -12,7 +12,7 @@ BuildRequires: libfakekey-devel
BuildRequires: libXtst-devel
# clutter build is currently disabled
# BuildRequires: clutter-gtk-devel
-BuildRequires: gtk3-devel
+BuildRequires: gtk2-devel
BuildRequires: libxklavier-devel
#BuildRequires: at-spi2-core-devel
# at-spi2-core-devel has missing BR: dbus-glib-devel
12 years, 8 months
[Fedora-i18n-bugs] [eekboard/f14] Disable AT-SPI and use GTK2 for F14.
by Daiki Ueno
commit 0fdab018cb520b5a615856af872e0f19f7bb49fa
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 13:01:41 2011 +0900
Disable AT-SPI and use GTK2 for F14.
eekboard.spec | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/eekboard.spec b/eekboard.spec
index 8c676ee..9e2087a 100644
--- a/eekboard.spec
+++ b/eekboard.spec
@@ -14,7 +14,7 @@ BuildRequires: libXtst-devel
# BuildRequires: clutter-gtk-devel
BuildRequires: gtk3-devel
BuildRequires: libxklavier-devel
-BuildRequires: at-spi2-core-devel
+#BuildRequires: at-spi2-core-devel
# at-spi2-core-devel has missing BR: dbus-glib-devel
BuildRequires: dbus-glib-devel
%if (0%{?fedora} <= 13)
@@ -67,7 +67,7 @@ This package contains the Python language binding of eekboard client library.
%build
-%configure --disable-static --with-gtk=3.0 --enable-atspi
+%configure --disable-static --with-gtk=2.0 --disable-atspi
make %{?_smp_mflags}
@@ -148,6 +148,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.3-1
- new upstream release
+- disable AT-SPI and use GTK2 for F14
* Fri Aug 26 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.2-3
- install eekboard-autostart.desktop under %%doc/examples instead of
12 years, 8 months
[Fedora-i18n-bugs] [eekboard/f14] Update to 1.0.3-1.
by Daiki Ueno
commit 9f1c3d7b2ef1dbb11e070e13edfee7841888389a
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 12:54:58 2011 +0900
Update to 1.0.3-1.
.gitignore | 1 +
eekboard.desktop | 9 -----
eekboard.spec | 106 ++++++++++++++++++++++++++++++++++++++++++++----------
sources | 2 +-
4 files changed, 89 insertions(+), 29 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index fa7fc46..6fd25ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ eekboard-0.0.5.tar.gz
/eekboard-0.90.2.tar.gz
/eekboard-0.90.3.tar.gz
/eekboard-0.90.4.tar.gz
+/eekboard-1.0.3.tar.gz
diff --git a/eekboard.spec b/eekboard.spec
index 6092171..8c676ee 100644
--- a/eekboard.spec
+++ b/eekboard.spec
@@ -1,29 +1,34 @@
Name: eekboard
-Version: 0.90.4
+Version: 1.0.3
Release: 1%{?dist}
Summary: An Easy-to-use Virtual Keyboard Toolkit
Group: Applications/System
License: GPLv3+
-URL: http://ueno.github.com/eekboard/
+URL: http://fedorahosted.org/eekboard/
Source0: http://github.com/downloads/ueno/eekboard/eekboard-%{version}.tar.gz
-Source1: %{name}.desktop
BuildRequires: libfakekey-devel
+# older libfakekey-devel has missing BR: libXtst-devel (#680878)
BuildRequires: libXtst-devel
-#BuildRequires: clutter-gtk-devel
-BuildRequires: gtk2-devel
+# clutter build is currently disabled
+# BuildRequires: clutter-gtk-devel
+BuildRequires: gtk3-devel
BuildRequires: libxklavier-devel
-BuildRequires: GConf2-devel
-BuildRequires: at-spi-devel
+BuildRequires: at-spi2-core-devel
+# at-spi2-core-devel has missing BR: dbus-glib-devel
+BuildRequires: dbus-glib-devel
%if (0%{?fedora} <= 13)
BuildRequires: gir-repository-devel
%endif
BuildRequires: intltool desktop-file-utils
-BuildRequires: gobject-introspection-devel
-BuildRequires: python2-devel
-BuildRequires: libcroco-devel
+BuildRequires: gobject-introspection-devel
+BuildRequires: python2-devel
+BuildRequires: libcroco-devel
+BuildRequires: ibus-devel
+BuildRequires: vala-tools
-Requires: eekboard-libs = %{version}-%{release}
+# eekboard-python is required for eekxml tool.
+Requires: eekboard-python = %{version}-%{release}
%description
eekboard is a virtual keyboard software package, including a set of
@@ -44,7 +49,6 @@ License: LGPLv2+ and GFDL
Requires: vala
Requires: %{name}-libs = %{version}-%{release}
-Requires: gtk-doc
%description devel
This package contains the development tools for eekboard.
@@ -63,16 +67,24 @@ This package contains the Python language binding of eekboard client library.
%build
-%configure --disable-static --with-gtk=2.0
+%configure --disable-static --with-gtk=3.0 --enable-atspi
make %{?_smp_mflags}
%install
-rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
rm -rf $RPM_BUILD_ROOT%{_libdir}/*.la
-desktop-file-install --dir=${RPM_BUILD_ROOT}%{_datadir}/applications \
-%{SOURCE1}
+
+# We don't install autostart file to avoid conflict with other OSK.
+# Instead, install it under doc.
+mkdir -p base-installed/examples
+mv $RPM_BUILD_ROOT%{_sysconfdir}/xdg/autostart/%{name}-autostart.desktop base-installed/examples
+
+# Install Python examples under doc.
+mkdir -p python-installed/examples
+cp examples/simple-client/simple-client python-installed/examples
+
+desktop-file-validate ${RPM_BUILD_ROOT}%{_datadir}/applications/%{name}.desktop
%find_lang %{name}
@@ -84,9 +96,13 @@ if [ $1 -eq 0 ] ; then
touch --no-create %{_datadir}/icons/hicolor &>/dev/null
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
fi
+if [ $1 -eq 0 ] ; then
+ /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
+fi
%posttrans
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+/usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
@@ -94,15 +110,16 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%files -f %{name}.lang
%defattr(-,root,root,-)
+%doc base-installed/examples
%{_bindir}/eekboard-server
-%{_bindir}/eekboard-desktop-client
-%{_bindir}/eekboard-client
-%{_bindir}/eekboard-xml
+%{_bindir}/eekboard
+%{_bindir}/eekxml
%{_datadir}/dbus-1/services/eekboard-server.service
%{_datadir}/applications/%{name}.desktop
%{_datadir}/icons/hicolor/*/apps/eekboard.png
%{_datadir}/icons/hicolor/scalable/apps/eekboard.svg
%{_datadir}/eekboard/
+%{_datadir}/glib-2.0/schemas/*
%files libs
%defattr(-,root,root,-)
@@ -124,10 +141,61 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%files python
%defattr(-,root,root,-)
+%doc python-installed/examples
%{python_sitelib}/eekboard/
%changelog
+* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.3-1
+- new upstream release
+
+* Fri Aug 26 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.2-3
+- install eekboard-autostart.desktop under %%doc/examples instead of
+ the autostart dir to avoid conflict with other at-spi based OSK
+- install simple-client under %%doc/examples
+- remove unnecessary dependency on python-virtkey
+- add eekboard-python-binding-fix.patch
+
+* Thu Aug 25 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.2-1
+- new upstream release
+
+* Mon Aug 15 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.1-2
+- add eekboard-key-repeat.patch
+
+* Mon Aug 15 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.1-1
+- new upstream release
+
+* Fri Aug 12 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.0-1
+- new upstream release
+
+* Thu May 26 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.7-2
+- remove runtime dependency on gtk-doc (#707551)
+- let the base package depend on eekboard-python instead of
+ eekboard-libs, for eekboard-inscript
+
+* Fri Apr 22 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.7-1
+- new upstream release
+- link against at-spi2-core
+- install eekboard-autostart.desktop
+
+* Tue Apr 19 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.6-3
+- don't link against CSPI-1.0 (fixes #697546)
+
+* Fri Apr 15 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.6-2
+- apply a patch to fix Exec in desktop file
+
+* Fri Mar 11 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.6-1
+- new upstream release
+
+* Fri Mar 11 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.5-2
+- apply a patch to support newer pygobject2
+
+* Fri Mar 11 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.5-1
+- new upstream release
+
+* Tue Mar 8 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.4-2
+- add eekboard-annotation.patch needed by newer pygobject2
+
* Tue Mar 8 2011 Daiki Ueno <dueno(a)redhat.com> - 0.90.4-1
- new upstream release
diff --git a/sources b/sources
index d46594f..5eab388 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-5755f4efd4c726a415db47ea2ac41868 eekboard-0.90.4.tar.gz
+313cf7f1ae633656503b9f86c2f7a431 eekboard-1.0.3.tar.gz
12 years, 8 months
[Fedora-i18n-bugs] [eekboard/f15] Update to 1.0.3-1.
by Daiki Ueno
commit 15b536e9985a2db54c192a5ca735fbaf8f64b778
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 12:41:46 2011 +0900
Update to 1.0.3-1.
.gitignore | 1 +
eekboard-python-binding-fix.patch | 39 -------------------------------------
eekboard.spec | 9 ++++---
sources | 2 +-
4 files changed, 7 insertions(+), 44 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 63794d5..53bf03d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ eekboard-0.0.5.tar.gz
/eekboard-0.90.6.tar.gz
/eekboard-0.90.7.tar.gz
/eekboard-1.0.2.tar.gz
+/eekboard-1.0.3.tar.gz
diff --git a/eekboard.spec b/eekboard.spec
index cf7b5cd..8c676ee 100644
--- a/eekboard.spec
+++ b/eekboard.spec
@@ -1,13 +1,12 @@
Name: eekboard
-Version: 1.0.2
-Release: 3%{?dist}
+Version: 1.0.3
+Release: 1%{?dist}
Summary: An Easy-to-use Virtual Keyboard Toolkit
Group: Applications/System
License: GPLv3+
URL: http://fedorahosted.org/eekboard/
Source0: http://github.com/downloads/ueno/eekboard/eekboard-%{version}.tar.gz
-Patch0: eekboard-python-binding-fix.patch
BuildRequires: libfakekey-devel
# older libfakekey-devel has missing BR: libXtst-devel (#680878)
BuildRequires: libXtst-devel
@@ -65,7 +64,6 @@ This package contains the Python language binding of eekboard client library.
%prep
%setup -q
-%patch0 -p1 -b .python-binding-fix
%build
@@ -148,6 +146,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
+* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.3-1
+- new upstream release
+
* Fri Aug 26 2011 Daiki Ueno <dueno(a)redhat.com> - 1.0.2-3
- install eekboard-autostart.desktop under %%doc/examples instead of
the autostart dir to avoid conflict with other at-spi based OSK
diff --git a/sources b/sources
index 13b9b82..5eab388 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-a6a9d08f478e0cea99e51c8c899bf25c eekboard-1.0.2.tar.gz
+313cf7f1ae633656503b9f86c2f7a431 eekboard-1.0.3.tar.gz
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n/f16] Update to 1.3.3-2.
by Daiki Ueno
commit a56967a0b130465ab4c1affea7cbf635290548de
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 12:14:00 2011 +0900
Update to 1.3.3-2.
.gitignore | 1 +
ibus-m17n-HEAD.patch | 281 -----------
ibus-m17n-default-xml-override.patch | 621 +++++++++++++++++++++++++
ibus-m17n-iok.patch | 62 ++--
ibus-m17n-setup-refactor.patch | 843 +++++++++++++++++++++++++++++++++
ibus-m17n-virtkbd.patch | 849 ++++++++++++++++++++++++++++++++++
ibus-m17n-xkb-options.patch | 186 +++-----
ibus-m17n-xx-icon-symbol.patch | 495 ++++++---------------
ibus-m17n.spec | 46 ++-
sources | 2 +-
10 files changed, 2575 insertions(+), 811 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index f71607a..59fba23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ ibus-m17n-1.3.0.tar.gz
/ibus-m17n-1.3.0.tar.gz
/ibus-m17n-1.3.1.tar.gz
/ibus-m17n-1.3.2.tar.gz
+/ibus-m17n-1.3.3.tar.gz
diff --git a/ibus-m17n-default-xml-override.patch b/ibus-m17n-default-xml-override.patch
new file mode 100644
index 0000000..21f2be2
--- /dev/null
+++ b/ibus-m17n-default-xml-override.patch
@@ -0,0 +1,621 @@
+From e37bcc53f1d145e10974fb0bb91802d735921fcd Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Wed, 31 Aug 2011 11:44:46 +0900
+Subject: [PATCH 1/6] Update the format of default.xml to allow override.
+
+This patch allows value inheritance from the previous matches.
+With the new format:
+
+<engines>
+ <engine>
+ <name>*</name>
+ <rank>0</rank>
+ <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:ja:*</name>
+ <rank>2</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:ja:anthy</name>
+ <rank>1</rank>
+ </engine>
+</engines>
+
+We will get preedit-highlight == TRUE and rank == 1 for m17n:ja:anthy.
+---
+ src/Makefile.am | 3 +-
+ src/default.xml.in.in | 221 +++++++++++++++++++------------------------------
+ src/engine.c | 2 +
+ src/m17nutil.c | 68 +++++++---------
+ src/m17nutil.h | 1 +
+ src/test.c | 66 +++++++++++++++
+ 6 files changed, 186 insertions(+), 175 deletions(-)
+ create mode 100644 src/test.c
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 282128a..e354149 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -40,11 +40,10 @@ TESTS = \
+
+
+ test_m17n_SOURCES = \
+- m17nutil.c \
++ test.c \
+ $(NULL)
+ test_m17n_CFLAGS = \
+ $(AM_CFLAGS) \
+- -DDEBUG \
+ $(NULL)
+ test_m17n_LDADD = \
+ libm17ncommon.a \
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index 5c5d67d..dc93fd3 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -1,246 +1,197 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <engines>
+ <!-- This file defines the default config value for each
+- engine. The "engine" elements below are checked in
+- first-to-last order and a "name" element in an "engine"
+- element allows wildcard patterns. Please keep more
+- specific entries to appear first. -->
+- <!-- Indic engines which represent languages. -->
++ engine. A "name" element in an "engine" element allows
++ wildcard patterns. "engine" elements are evaluated in
++ first-to-last order and the latter match may override the
++ existing default. -->
++ <!-- Default for other engines. -->
++ <engine>
++ <name>m17n:*</name>
++ <rank>0</rank>
++ <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <!-- Indic engines should be selected by default:
++ https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
++ <engine>
++ <name>m17n:as:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:bn:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:gu:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:hi:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:kn:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:ks:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:mai:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:ml:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:mr:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:ne:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:or:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:pa:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:sa:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:sd:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:si:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:ta:*</name>
++ <rank>1</rank>
++ </engine>
++ <engine>
++ <name>m17n:te:*</name>
++ <rank>1</rank>
++ </engine>
++ <!-- Assign higher rank to Indic engines which represent each
++ language. -->
+ <engine>
+ <name>m17n:as:phonetic</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:bn:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:gu:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:hi:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:kn:kgp</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:ks:kbd</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:mai:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:ml:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:mr:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:ne:rom</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:or:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:pa:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:sa:harvard-kyoto</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:sd:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:si:wijesekera</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:ta:tamil99</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:te:inscript</name>
+ <rank>2</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+ </engine>
+- <!-- Samanala should have lower rank than other Sinhala
+- engines since it is the only non-keyboard input method in
+- Sinhala. -->
++ <!-- Assign lower rank to Sinhala Samanala since it is a
++ non-keyboard input method in Sinhala. -->
+ <engine>
+ <name>m17n:si:samanala</name>
+ <rank>0</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <!-- Chinese and Japanese engines which require preedit decoration. -->
+- <engine>
+- <name>m17n:ja:anthy</name>
+- <rank>0</rank>
+- <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
++ <!-- Some CJK engines use preedit. -->
+ <engine>
+ <name>m17n:zh:cangjie</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:py-b5</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:py-gb</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:py</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:quick</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:tonepy-b5</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:tonepy-gb</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+ <name>m17n:zh:tonepy</name>
+- <rank>0</rank>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+ <engine>
+- <name>m17n:zh:util</name>
+- <rank>0</rank>
++ <name>m17n:ja:anthy</name>
+ <preedit-highlight>TRUE</preedit-highlight>
+ </engine>
+- <!-- Other Indic engines should be selected by default:
+- https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
+- <engine>
+- <name>m17n:as:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:bn:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:gu:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:hi:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:kn:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:ks:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:mai:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:ml:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:mr:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:ne:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:or:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:pa:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:sa:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:sd:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:si:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:ta:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <engine>
+- <name>m17n:te:*</name>
+- <rank>1</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+- <!-- Default for other engines. -->
+- <engine>
+- <name>m17n:*</name>
+- <rank>0</rank>
+- <preedit-highlight>FALSE</preedit-highlight>
+- </engine>
+ </engines>
+diff --git a/src/engine.c b/src/engine.c
+index cfb853c..dcff0c7 100644
+--- a/src/engine.c
++++ b/src/engine.c
+@@ -290,6 +290,8 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+ &klass->lookup_table_orientation))
+ klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
+
++ ibus_m17n_engine_config_free (engine_config);
++
+ g_signal_connect (config, "value-changed",
+ G_CALLBACK(ibus_m17n_config_value_changed),
+ klass);
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 42aa8f6..b06f71d 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -13,12 +13,18 @@ static MConverter *utf8_converter = NULL;
+
+ #define DEFAULT_XML (SETUPDIR "/default.xml")
+
+-struct _IBusM17NEngineConfigNode {
++typedef enum {
++ ENGINE_CONFIG_RANK_MASK = 1 << 0,
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 1
++} EngineConfigMask;
++
++struct _EngineConfigNode {
+ gchar *name;
++ EngineConfigMask mask;
+ IBusM17NEngineConfig config;
+ };
+
+-typedef struct _IBusM17NEngineConfigNode IBusM17NEngineConfigNode;
++typedef struct _EngineConfigNode EngineConfigNode;
+
+ static GSList *config_list = NULL;
+
+@@ -257,20 +263,31 @@ ibus_m17n_list_engines (void)
+ IBusM17NEngineConfig *
+ ibus_m17n_get_engine_config (const gchar *engine_name)
+ {
++ IBusM17NEngineConfig *config = g_slice_new0 (IBusM17NEngineConfig);
+ GSList *p;
+
+ for (p = config_list; p != NULL; p = p->next) {
+- IBusM17NEngineConfigNode *cnode = p->data;
++ EngineConfigNode *cnode = p->data;
+
+- if (g_pattern_match_simple (cnode->name, engine_name))
+- return &cnode->config;
++ if (g_pattern_match_simple (cnode->name, engine_name)) {
++ if (cnode->mask & ENGINE_CONFIG_RANK_MASK)
++ config->rank = cnode->config.rank;
++ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
++ config->preedit_highlight = cnode->config.preedit_highlight;
++ }
+ }
+- g_return_val_if_reached (NULL);
++ return config;
++}
++
++void
++ibus_m17n_engine_config_free (IBusM17NEngineConfig *config)
++{
++ g_slice_free (IBusM17NEngineConfig, config);
+ }
+
+ static gboolean
+-ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
+- XMLNode *node)
++ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
++ XMLNode *node)
+ {
+ GList *p;
+
+@@ -284,6 +301,7 @@ ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
+ }
+ if (g_strcmp0 (sub_node->name , "rank") == 0) {
+ cnode->config.rank = atoi (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_RANK_MASK;
+ continue;
+ }
+ if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
+@@ -292,6 +310,7 @@ ibus_m17n_engine_config_parse_xml_node (IBusM17NEngineConfigNode *cnode,
+ else if (g_ascii_strcasecmp ("FALSE", sub_node->text) != 0)
+ g_warning ("<%s> element contains invalid boolean value %s",
+ sub_node->name, sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK;
+ continue;
+ }
+ g_warning ("<engine> element contains invalid element <%s>",
+@@ -320,7 +339,7 @@ ibus_m17n_get_component (void)
+ if (node && g_strcmp0 (node->name, "engines") == 0) {
+ for (p = node->sub_nodes; p != NULL; p = p->next) {
+ XMLNode *sub_node = p->data;
+- IBusM17NEngineConfigNode *cnode;
++ EngineConfigNode *cnode;
+
+ if (g_strcmp0 (sub_node->name, "engine") != 0) {
+ g_warning ("<engines> element contains invalid element <%s>",
+@@ -328,9 +347,9 @@ ibus_m17n_get_component (void)
+ continue;
+ }
+
+- cnode = g_slice_new0 (IBusM17NEngineConfigNode);
++ cnode = g_slice_new0 (EngineConfigNode);
+ if (!ibus_m17n_engine_config_parse_xml_node (cnode, sub_node)) {
+- g_slice_free (IBusM17NEngineConfigNode, cnode);
++ g_slice_free (EngineConfigNode, cnode);
+ continue;
+ }
+ config_list = g_slist_prepend (config_list, cnode);
+@@ -448,30 +467,3 @@ ibus_m17n_config_get_int (IBusConfig *config,
+ return FALSE;
+ #endif /* !IBUS_CHECK_VERSION(1,3,99) */
+ }
+-
+-#ifdef DEBUG
+-#include <locale.h>
+-
+-int main ()
+-{
+- IBusComponent *component;
+- GString *output;
+-
+- setlocale (LC_ALL, "");
+- ibus_init ();
+- ibus_m17n_init_common ();
+-
+- component = ibus_m17n_get_component ();
+-
+- output = g_string_new ("");
+-
+- ibus_component_output (component, output, 1);
+-
+- g_debug ("\n%s", output->str);
+-
+- g_string_free (output, TRUE);
+- g_object_unref (component);
+-
+- return 0;
+-}
+-#endif
+diff --git a/src/m17nutil.h b/src/m17nutil.h
+index f083194..313e7bc 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
+@@ -30,6 +30,7 @@ gunichar *ibus_m17n_mtext_to_ucs4 (MText *text,
+ guint ibus_m17n_parse_color (const gchar *hex);
+ IBusM17NEngineConfig
+ *ibus_m17n_get_engine_config (const gchar *engine_name);
++void ibus_m17n_engine_config_free (IBusM17NEngineConfig *config);
+ void ibus_m17n_config_set_string (IBusConfig *config,
+ const gchar *section,
+ const gchar *name,
+diff --git a/src/test.c b/src/test.c
+new file mode 100644
+index 0000000..0908818
+--- /dev/null
++++ b/src/test.c
+@@ -0,0 +1,66 @@
++/* vim:set et sts=4: */
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <ibus.h>
++#include <locale.h>
++#include "m17nutil.h"
++
++static void
++test_output_component (void)
++{
++ IBusComponent *component;
++ GString *output;
++
++ component = ibus_m17n_get_component ();
++
++ output = g_string_new ("");
++
++ ibus_component_output (component, output, 1);
++
++ g_debug ("\n%s", output->str);
++
++ g_string_free (output, TRUE);
++ g_object_unref (component);
++}
++
++static void
++test_engine_config (void)
++{
++ IBusM17NEngineConfig *config;
++
++ config = ibus_m17n_get_engine_config ("m17n:non:exsistent");
++ g_assert_cmpint (config->rank, ==, 0);
++ g_assert_cmpint (config->preedit_highlight, ==, 0);
++ ibus_m17n_engine_config_free (config);
++
++ config = ibus_m17n_get_engine_config ("m17n:si:wijesekera");
++ g_assert_cmpint (config->rank, ==, 2);
++ g_assert_cmpint (config->preedit_highlight, ==, 0);
++ ibus_m17n_engine_config_free (config);
++
++ config = ibus_m17n_get_engine_config ("m17n:si:phonetic-dynamic");
++ g_assert_cmpint (config->rank, ==, 1);
++ g_assert_cmpint (config->preedit_highlight, ==, 0);
++ ibus_m17n_engine_config_free (config);
++
++ config = ibus_m17n_get_engine_config ("m17n:si:samanala");
++ g_assert_cmpint (config->rank, ==, 0);
++ g_assert_cmpint (config->preedit_highlight, ==, 0);
++ ibus_m17n_engine_config_free (config);
++}
++
++int main (int argc, char **argv)
++{
++ setlocale (LC_ALL, "");
++ ibus_init ();
++ ibus_m17n_init_common ();
++
++ g_test_init (&argc, &argv, NULL);
++
++ g_test_add_func ("/test-m17n/output-component", test_output_component);
++ g_test_add_func ("/test-m17n/engine-config", test_engine_config);
++
++ return g_test_run ();
++}
+--
+1.7.6.1
+
diff --git a/ibus-m17n-iok.patch b/ibus-m17n-iok.patch
index e73124f..b885aae 100644
--- a/ibus-m17n-iok.patch
+++ b/ibus-m17n-iok.patch
@@ -1,25 +1,33 @@
-Patch to support iok (Indic Onscreen Keyboard).
-Index: ibus-m17n-1.3.2/src/engine.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/engine.c
-+++ ibus-m17n-1.3.2/src/engine.c
-@@ -23,6 +23,7 @@ struct _IBusM17NEngine {
+From 240931f8433ffa9de0c78a862e0d5e0aad93953d Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Fri, 2 Sep 2011 11:27:02 +0900
+Subject: [PATCH 6/6] Apply iok patch from fedora.
+
+---
+ src/engine.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 44 insertions(+), 0 deletions(-)
+
+diff --git a/src/engine.c b/src/engine.c
+index 1e6bd1b..f23d982 100644
+--- a/src/engine.c
++++ b/src/engine.c
+@@ -26,6 +26,7 @@ struct _IBusM17NEngine {
IBusProperty *setup_prop;
#endif /* HAVE_SETUP */
- IBusPropList *prop_list;
+ IBusProperty *virtkbd_prop;
+ IBusProperty *show_iok_prop;
+ IBusPropList *prop_list;
};
- struct _IBusM17NEngineClass {
-@@ -34,6 +35,7 @@ struct _IBusM17NEngineClass {
- guint preedit_background;
- gint preedit_underline;
+@@ -40,6 +41,7 @@ struct _IBusM17NEngineClass {
gint lookup_table_orientation;
+ gchar *virtual_keyboard;
+ gboolean virtual_keyboard_enabled;
+ gboolean use_iok;
MInputMethod *im;
};
-@@ -248,6 +250,9 @@ ibus_m17n_engine_class_init (IBusM17NEng
+@@ -254,6 +256,9 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
}
engine_name = g_strdup_printf ("m17n:%s:%s", lang, name);
klass->config_section = g_strdup_printf ("engine/M17N/%s/%s", lang, name);
@@ -29,17 +37,9 @@ Index: ibus-m17n-1.3.2/src/engine.c
g_free (lang);
g_free (name);
-@@ -344,6 +349,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m
- {
- IBusText* label;
- IBusText* tooltip;
-+ IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
-
- m17n->prop_list = ibus_prop_list_new ();
- g_object_ref_sink (m17n->prop_list);
-@@ -376,6 +382,23 @@ ibus_m17n_engine_init (IBusM17NEngine *m
- ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
- #endif /* HAVE_SETUP */
+@@ -412,6 +417,22 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ klass->virtual_keyboard != NULL)
+ ibus_property_set_visible (m17n->virtkbd_prop, TRUE);
+ label = ibus_text_new_from_string ("iok");
+ m17n->show_iok_prop = ibus_property_new ("iok",
@@ -52,18 +52,17 @@ Index: ibus-m17n-1.3.2/src/engine.c
+ 0,
+ NULL);
+ g_object_ref_sink (m17n->show_iok_prop);
++ ibus_prop_list_append (m17n->prop_list, m17n->show_iok_prop);
+
-+ if (klass->use_iok)
++ if (klass->use_iok && !klass->virtual_keyboard_enabled)
+ ibus_property_set_visible (m17n->show_iok_prop, TRUE);
+
-+ ibus_prop_list_append (m17n->prop_list, m17n->show_iok_prop);
-+
m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
g_object_ref_sink (m17n->table);
m17n->context = NULL;
-@@ -461,6 +484,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine
+@@ -502,6 +523,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ m17n->virtkbd_prop = NULL;
}
- #endif /* HAVE_SETUP */
+ if (m17n->show_iok_prop) {
+ g_object_unref (m17n->show_iok_prop);
@@ -73,9 +72,9 @@ Index: ibus-m17n-1.3.2/src/engine.c
if (m17n->table) {
g_object_unref (m17n->table);
m17n->table = NULL;
-@@ -778,6 +806,24 @@ ibus_m17n_engine_property_activate (IBus
+@@ -842,6 +868,24 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
}
- #endif /* HAVE_SETUP */
+ #endif /* HAVE_EEKBOARD */
+ if (g_strcmp0 (prop_name, "iok") == 0) {
+ const gchar *engine_name;
@@ -98,3 +97,6 @@ Index: ibus-m17n-1.3.2/src/engine.c
parent_class->property_activate (engine, prop_name, prop_state);
}
+--
+1.7.6.1
+
diff --git a/ibus-m17n-setup-refactor.patch b/ibus-m17n-setup-refactor.patch
new file mode 100644
index 0000000..ccd1346
--- /dev/null
+++ b/ibus-m17n-setup-refactor.patch
@@ -0,0 +1,843 @@
+From bd48b1f5c71ab849e1d2c78fd069a92d37426dc3 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Thu, 1 Sep 2011 18:48:41 +0900
+Subject: [PATCH 2/6] Refactor setup.c.
+
+---
+ src/ibus-m17n-preferences.ui | 3 +-
+ src/setup.c | 663 +++++++++++++++++++++++-------------------
+ 2 files changed, 362 insertions(+), 304 deletions(-)
+
+diff --git a/src/ibus-m17n-preferences.ui b/src/ibus-m17n-preferences.ui
+index 6f6ace7..a46ab49 100644
+--- a/src/ibus-m17n-preferences.ui
++++ b/src/ibus-m17n-preferences.ui
+@@ -263,9 +263,10 @@
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+- <object class="GtkTreeView" id="treeviewMimConfig">
++ <object class="GtkTreeView" id="treeview_mim_config">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
++ <property name="has_tooltip">True</property>
+ <property name="enable_grid_lines">both</property>
+ </object>
+ </child>
+diff --git a/src/setup.c b/src/setup.c
+index aba0e92..30386df 100644
+--- a/src/setup.c
++++ b/src/setup.c
+@@ -17,19 +17,24 @@ enum {
+ NUM_COLS
+ };
+
+-struct _ConfigContext {
+- IBusConfig *config;
+- MSymbol language;
+- MSymbol name;
+- GtkListStore *store;
+- gchar *section;
++struct _SetupDialog {
++ GtkWidget *dialog;
++ GtkWidget *combobox_underline;
++ GtkWidget *combobox_orientation;
++ GtkWidget *checkbutton_foreground;
+ GtkWidget *colorbutton_foreground;
++ GtkWidget *checkbutton_background;
+ GtkWidget *colorbutton_background;
++ GtkWidget *treeview;
++ GtkListStore *store;
+
+-};
+-typedef struct _ConfigContext ConfigContext;
++ gchar *lang;
++ gchar *name;
+
+-static IBusConfig *config = NULL;
++ IBusConfig *config;
++ gchar *section;
++};
++typedef struct _SetupDialog SetupDialog;
+
+ static gchar *opt_name = NULL;
+ static const GOptionEntry options[] = {
+@@ -38,17 +43,8 @@ static const GOptionEntry options[] = {
+ {NULL}
+ };
+
+-void
+-ibus_m17n_init (IBusBus *bus)
+-{
+- config = ibus_bus_get_config (bus);
+- if (config)
+- g_object_ref_sink (config);
+- ibus_m17n_init_common ();
+-}
+-
+ static gchar *
+-format_value (MPlist *plist)
++format_m17n_value (MPlist *plist)
+ {
+ if (mplist_key (plist) == Msymbol)
+ return g_strdup (msymbol_name ((MSymbol) mplist_value (plist)));
+@@ -64,7 +60,7 @@ format_value (MPlist *plist)
+ }
+
+ static MPlist *
+-parse_value (MPlist *plist, gchar *text)
++parse_m17n_value (MPlist *plist, gchar *text)
+ {
+ MPlist *value;
+
+@@ -100,7 +96,7 @@ parse_value (MPlist *plist, gchar *text)
+ }
+
+ static void
+-insert_items (GtkListStore *store, MSymbol language, MSymbol name)
++insert_m17n_items (GtkListStore *store, MSymbol language, MSymbol name)
+ {
+ MPlist *plist;
+
+@@ -109,8 +105,8 @@ insert_items (GtkListStore *store, MSymbol language, MSymbol name)
+ for (; plist && mplist_key (plist) == Mplist; plist = mplist_next (plist)) {
+ GtkTreeIter iter;
+ MSymbol key;
+- MPlist *p, *value;
+- gchar *description;
++ MPlist *p, *mvalue;
++ gchar *description, *value;
+
+ p = mplist_value (plist);
+ key = mplist_value (p); /* name */
+@@ -118,15 +114,17 @@ insert_items (GtkListStore *store, MSymbol language, MSymbol name)
+ p = mplist_next (p); /* description */
+ description = ibus_m17n_mtext_to_utf8 ((MText *) mplist_value (p));
+ p = mplist_next (p); /* status */
+- value = mplist_next (p);
++ mvalue = mplist_next (p);
++ value = format_m17n_value (mvalue);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_KEY, msymbol_name (key),
+ COLUMN_DESCRIPTION, description,
+- COLUMN_VALUE, format_value (value),
++ COLUMN_VALUE, value,
+ -1);
+ g_free (description);
++ g_free (value);
+ }
+ }
+
+@@ -163,95 +161,238 @@ on_edited (GtkCellRendererText *cell,
+ gchar *new_text,
+ gpointer data)
+ {
+- ConfigContext *context = data;
+- GtkTreeModel *model = GTK_TREE_MODEL (context->store);
++ SetupDialog *dialog = data;
++ GtkTreeModel *model = GTK_TREE_MODEL (dialog->store);
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
+- MPlist *plist, *p, *value;
+- gchar *key;
+
+ gtk_tree_model_get_iter (model, &iter, path);
+- gtk_tree_model_get (model, &iter, COLUMN_KEY, &key, -1);
+
+- plist = minput_get_variable (context->language, context->name,
+- msymbol (key));
+- if (!plist)
+- goto fail;
++ gtk_list_store_set (dialog->store, &iter,
++ COLUMN_VALUE, new_text,
++ -1);
++ gtk_tree_path_free (path);
++}
+
+- p = mplist_next (mplist_next (mplist_next (mplist_value (plist))));
+- if (!p)
+- goto fail;
++static void
++toggle_colorbutton_sensitive (GtkToggleButton *togglebutton,
++ GtkWidget *colorbutton)
++{
++ if (gtk_toggle_button_get_active (togglebutton))
++ gtk_widget_set_sensitive (colorbutton, TRUE);
++ else
++ gtk_widget_set_sensitive (colorbutton, FALSE);
++}
+
+- value = parse_value (p, new_text);
+- if (!value)
+- goto fail;
++static void
++on_foreground_toggled (GtkToggleButton *togglebutton,
++ gpointer user_data)
++{
++ SetupDialog *dialog = user_data;
++ toggle_colorbutton_sensitive (togglebutton, dialog->colorbutton_foreground);
++}
+
+- if (minput_config_variable (context->language, context->name,
+- msymbol (key), value) != 0)
+- goto fail;
++static void
++on_background_toggled (GtkToggleButton *togglebutton,
++ gpointer user_data)
++{
++ SetupDialog *dialog = user_data;
++ toggle_colorbutton_sensitive (togglebutton, dialog->colorbutton_background);
++}
+
+- if (minput_save_config () != 1)
+- goto fail;
++static gint
++get_combo_box_index_by_value (GtkComboBox *combobox, gint value)
++{
++ GtkTreeModel *model;
++ GtkTreeIter iter;
++ gint index;
+
+- gtk_list_store_set (context->store, &iter,
+- COLUMN_VALUE, new_text,
+- -1);
++ index = 0;
++ model = gtk_combo_box_get_model (combobox);
++ if (!gtk_tree_model_get_iter_first (model, &iter))
++ return -1;
+
+- fail:
+- gtk_tree_path_free (path);
++ do {
++ gint _value;
++ gtk_tree_model_get (model, &iter, COLUMN_VALUE, &_value, -1);
++ if (_value == value)
++ return index;
++ index++;
++ } while (gtk_tree_model_iter_next (model, &iter));
++ return -1;
+ }
+
+ static void
+-color_to_gdk (guint color, GdkColor *color_gdk)
++_gdk_color_from_uint (guint color, GdkColor *color_gdk)
+ {
+- memset (color_gdk, 0, sizeof *color_gdk);
++ color_gdk->pixel = 0;
+ color_gdk->red = (color >> 8) & 0xFF00;
+ color_gdk->green = color & 0xFF00;
+ color_gdk->blue = (color & 0xFF) << 8;
+ }
+
+ static void
+-set_color (ConfigContext *context, const gchar *name, GdkColor *color)
++setup_dialog_load_config (SetupDialog *dialog)
+ {
+- gchar buf[8];
++ gchar *color;
++ gboolean bvalue;
++ gint ivalue;
++ GdkColor cvalue;
++ GtkCellRenderer *renderer;
++ gint index;
+
+- if (color)
+- sprintf (buf, "#%02X%02X%02X",
+- (color->red & 0xFF00) >> 8,
+- (color->green & 0xFF00) >> 8,
+- (color->blue & 0xFF00) >> 8);
+- else
+- strcpy (buf, "none");
+- ibus_m17n_config_set_string (config, context->section, name, buf);
++ /* General -> Pre-edit Appearance */
++ /* foreground color of pre-edit buffer */
++ bvalue = FALSE;
++ _gdk_color_from_uint (PREEDIT_FOREGROUND, &cvalue);
++ if (ibus_m17n_config_get_string (dialog->config,
++ dialog->section,
++ "preedit_foreground",
++ &color)) {
++ if (g_strcmp0 (color, "none") != 0 && gdk_color_parse (color, &cvalue))
++ bvalue = TRUE;
++ g_free (color);
++ }
++
++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->checkbutton_foreground),
++ bvalue);
++ g_signal_connect (dialog->checkbutton_foreground, "toggled",
++ G_CALLBACK(on_foreground_toggled),
++ dialog);
++ gtk_widget_set_sensitive (dialog->colorbutton_foreground,
++ bvalue);
++ gtk_color_button_set_color (GTK_COLOR_BUTTON(dialog->colorbutton_foreground),
++ &cvalue);
++
++ /* background color of pre-edit buffer */
++ bvalue = FALSE;
++ _gdk_color_from_uint (PREEDIT_BACKGROUND, &cvalue);
++ if (ibus_m17n_config_get_string (dialog->config,
++ dialog->section,
++ "preedit_background",
++ &color)) {
++ if (g_strcmp0 (color, "none") != 0 && gdk_color_parse (color, &cvalue))
++ bvalue = TRUE;
++ g_free (color);
++ }
++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->checkbutton_background),
++ bvalue);
++ g_signal_connect (dialog->checkbutton_background, "toggled",
++ G_CALLBACK(on_background_toggled),
++ dialog);
++ gtk_widget_set_sensitive (dialog->colorbutton_background,
++ bvalue);
++ gtk_color_button_set_color (GTK_COLOR_BUTTON(dialog->colorbutton_background),
++ &cvalue);
++
++ /* underline of pre-edit buffer */
++ renderer = gtk_cell_renderer_text_new ();
++ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(dialog->combobox_underline),
++ renderer, TRUE);
++ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(dialog->combobox_underline),
++ renderer, "text", 0, NULL);
++ if (!ibus_m17n_config_get_int (dialog->config,
++ dialog->section,
++ "preedit_underline",
++ &ivalue))
++ ivalue = IBUS_ATTR_UNDERLINE_NONE;
++
++ index = get_combo_box_index_by_value
++ (GTK_COMBO_BOX(dialog->combobox_underline),
++ ivalue);
++ gtk_combo_box_set_active (GTK_COMBO_BOX(dialog->combobox_underline),
++ index);
++
++ /* General -> Other */
++ renderer = gtk_cell_renderer_text_new ();
++ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(dialog->combobox_orientation),
++ renderer, TRUE);
++ gtk_cell_layout_set_attributes
++ (GTK_CELL_LAYOUT(dialog->combobox_orientation),
++ renderer, "text", 0, NULL);
++ if (!ibus_m17n_config_get_int (dialog->config,
++ dialog->section,
++ "lookup_table_orientation",
++ &ivalue))
++ ivalue = IBUS_ORIENTATION_SYSTEM;
++
++ index = get_combo_box_index_by_value
++ (GTK_COMBO_BOX(dialog->combobox_orientation),
++ ivalue);
++ gtk_combo_box_set_active (GTK_COMBO_BOX(dialog->combobox_orientation),
++ index);
++
++ /* Advanced -> m17n-lib configuration */
++ dialog->store = gtk_list_store_new (NUM_COLS,
++ G_TYPE_STRING,
++ G_TYPE_STRING,
++ G_TYPE_STRING);
++ insert_m17n_items (dialog->store,
++ msymbol (dialog->lang),
++ msymbol (dialog->name));
++
++ gtk_tree_view_set_model (GTK_TREE_VIEW(dialog->treeview),
++ GTK_TREE_MODEL (dialog->store));
++
++ renderer = gtk_cell_renderer_text_new ();
++ gtk_tree_view_insert_column_with_attributes
++ (GTK_TREE_VIEW (dialog->treeview), -1,
++ "Key",
++ renderer,
++ "text", COLUMN_KEY,
++ NULL);
++ renderer = gtk_cell_renderer_text_new ();
++ gtk_tree_view_insert_column_with_attributes
++ (GTK_TREE_VIEW (dialog->treeview), -1,
++ "Value",
++ renderer,
++ "text", COLUMN_VALUE,
++ NULL);
++ g_object_set (renderer, "editable", TRUE, NULL);
++ g_signal_connect (renderer, "edited", G_CALLBACK(on_edited), dialog);
++
++ g_signal_connect (dialog->treeview, "query-tooltip",
++ G_CALLBACK(on_query_tooltip), NULL);
+ }
+
+-static void
+-on_foreground_color_set (GtkColorButton *widget,
+- gpointer user_data)
++static gchar *
++_gdk_color_to_string (GdkColor *color)
+ {
+- ConfigContext *context = user_data;
+- GdkColor color;
+-
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(widget), &color);
+- set_color (context, "preedit_foreground", &color);
++ g_strdup_printf ("#%02X%02X%02X",
++ (color->red & 0xFF00) >> 8,
++ (color->green & 0xFF00) >> 8,
++ (color->blue & 0xFF00) >> 8);
+ }
+
+ static void
+-on_background_color_set (GtkColorButton *widget,
+- gpointer user_data)
++save_color (SetupDialog *dialog,
++ GtkToggleButton *togglebutton,
++ GtkColorButton *colorbutton,
++ const gchar *name)
+ {
+- ConfigContext *context = user_data;
+- GdkColor color;
+-
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(widget), &color);
+- set_color (context, "preedit_background", &color);
++ if (gtk_toggle_button_get_active (togglebutton)) {
++ GdkColor color;
++ gchar *svalue;
++
++ gtk_color_button_get_color (colorbutton, &color);
++ svalue = _gdk_color_to_string (&color);
++ ibus_m17n_config_set_string (dialog->config,
++ dialog->section,
++ name,
++ svalue);
++ g_free (svalue);
++ } else
++ ibus_m17n_config_set_string (dialog->config,
++ dialog->section,
++ name,
++ "none");
+ }
+
+ static void
+-on_underline_changed (GtkComboBox *combo,
+- gpointer user_data)
++save_choice (SetupDialog *dialog,
++ GtkComboBox *combo,
++ const gchar *name)
+ {
+- ConfigContext *context = user_data;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint active;
+@@ -260,123 +401,164 @@ on_underline_changed (GtkComboBox *combo,
+ gtk_combo_box_get_active_iter (combo, &iter);
+ gtk_tree_model_get (model, &iter, COLUMN_VALUE, &active, -1);
+
+- ibus_m17n_config_set_int (config,
+- context->section,
+- "preedit_underline",
+- active);
++ ibus_m17n_config_set_int (dialog->config, dialog->section, name, active);
+ }
+
+-static void
+-on_orientation_changed (GtkComboBox *combo,
+- gpointer user_data)
++static gboolean
++save_m17n_options (SetupDialog *dialog)
+ {
+- ConfigContext *context = user_data;
+- GtkTreeModel *model;
++ GtkTreeModel *model = GTK_TREE_MODEL (dialog->store);
+ GtkTreeIter iter;
+- gint active;
++ MPlist *plist, *p, *mvalue = NULL;
++ MSymbol lang, name;
++ gchar *key = NULL, *value = NULL;
++ gboolean retval = TRUE;
+
+- model = gtk_combo_box_get_model (combo);
+- gtk_combo_box_get_active_iter (combo, &iter);
+- gtk_tree_model_get (model, &iter, COLUMN_VALUE, &active, -1);
++ if (!gtk_tree_model_get_iter_first (model, &iter))
++ return;
+
+- ibus_m17n_config_set_int (config,
+- context->section,
+- "lookup_table_orientation",
+- active);
+-}
++ lang = msymbol (dialog->lang);
++ name = msymbol (dialog->name);
+
+-static void
+-toggle_color (ConfigContext *context,
+- GtkToggleButton *togglebutton,
+- GtkWidget *colorbutton,
+- const gchar *name)
+-{
+- GdkColor color;
++ do {
++ gtk_tree_model_get (model, &iter,
++ COLUMN_KEY, &key,
++ COLUMN_VALUE, &value,
++ -1);
+
+- if (gtk_toggle_button_get_active (togglebutton)) {
+- gtk_widget_set_sensitive (colorbutton, TRUE);
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(colorbutton), &color);
+- set_color (context, name, &color);
+- } else {
+- gtk_widget_set_sensitive (colorbutton, FALSE);
+- gtk_color_button_get_color (GTK_COLOR_BUTTON(colorbutton), &color);
+- set_color (context, name, NULL);
+- }
++ plist = minput_get_variable (lang, name, msymbol (key));
++ if (!plist) {
++ retval = FALSE;
++ break;
++ }
++
++ p = mplist_next (mplist_next (mplist_next (mplist_value (plist))));
++ if (!p) {
++ retval = FALSE;
++ break;
++ }
++
++ mvalue = parse_m17n_value (p, value);
++ if (!mvalue) {
++ retval = FALSE;
++ break;
++ }
++
++ if (minput_config_variable (lang, name, msymbol (key), mvalue) != 0) {
++ retval = FALSE;
++ break;
++ }
++
++ if (mvalue)
++ m17n_object_unref (mvalue);
++ g_free (key);
++ g_free (value);
++ mvalue = NULL;
++ key = NULL;
++ value = NULL;
++ } while (gtk_tree_model_iter_next (model, &iter));
++
++ if (retval && minput_save_config () != 1)
++ retval = FALSE;
++
++ if (mvalue)
++ m17n_object_unref (mvalue);
++ g_free (key);
++ g_free (value);
++
++ return retval;
+ }
+
+ static void
+-on_foreground_toggled (GtkToggleButton *togglebutton,
+- gpointer user_data)
++setup_dialog_save_config (SetupDialog *dialog)
+ {
+- ConfigContext *context = user_data;
+-
+- toggle_color (context,
+- togglebutton,
+- context->colorbutton_foreground,
+- "preedit_foreground");
++ save_color (dialog,
++ GTK_TOGGLE_BUTTON(dialog->checkbutton_foreground),
++ GTK_COLOR_BUTTON(dialog->colorbutton_foreground),
++ "preedit_foreground");
++ save_color (dialog,
++ GTK_TOGGLE_BUTTON(dialog->checkbutton_background),
++ GTK_COLOR_BUTTON(dialog->colorbutton_background),
++ "preedit_background");
++ save_choice (dialog,
++ GTK_COMBO_BOX(dialog->combobox_underline),
++ "preedit_underline");
++ save_choice (dialog,
++ GTK_COMBO_BOX(dialog->combobox_orientation),
++ "lookup_table_orientation");
++ save_m17n_options (dialog);
+ }
+
+-static void
+-on_background_toggled (GtkToggleButton *togglebutton,
+- gpointer user_data)
++static SetupDialog *
++setup_dialog_new (IBusConfig *config,
++ const gchar *lang,
++ const gchar *name)
+ {
+- ConfigContext *context = user_data;
++ GtkBuilder *builder;
++ SetupDialog *dialog;
++ GObject *object;
++ GError *error;
++
++ dialog = g_slice_new0 (SetupDialog);
++ dialog->config = g_object_ref_sink (config);
++ dialog->lang = g_strdup (lang);
++ dialog->name = g_strdup (name);
++ dialog->section = g_strdup_printf ("engine/M17N/%s/%s", lang, name);
++
++ builder = gtk_builder_new ();
++ gtk_builder_set_translation_domain (builder, "ibus-m17n");
++
++ error = NULL;
++ gtk_builder_add_from_file (builder,
++ SETUPDIR "/ibus-m17n-preferences.ui",
++ &error);
++ g_assert_no_error (error);
++
++ object = gtk_builder_get_object (builder, "dialog");
++ dialog->dialog = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "checkbutton_foreground");
++ dialog->checkbutton_foreground = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "colorbutton_foreground");
++ dialog->colorbutton_foreground = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "checkbutton_background");
++ dialog->checkbutton_background = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "colorbutton_background");
++ dialog->colorbutton_background = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "combobox_underline");
++ dialog->combobox_underline = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "combobox_orientation");
++ dialog->combobox_orientation = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "treeview_mim_config");
++ dialog->treeview = GTK_WIDGET(object);
+
+- toggle_color (context,
+- togglebutton,
+- context->colorbutton_background,
+- "preedit_background");
++ return dialog;
+ }
+
+-static gint
+-get_combo_box_index_by_value (GtkComboBox *combobox, gint value)
++static void
++setup_dialog_free (SetupDialog *dialog)
+ {
+- GtkTreeModel *model;
+- GtkTreeIter iter;
+- gint index;
++ gtk_widget_destroy (dialog->dialog);
+
+- index = 0;
+- model = gtk_combo_box_get_model (combobox);
+- if (!gtk_tree_model_get_iter_first (model, &iter))
+- return -1;
++ g_free (dialog->lang);
++ g_free (dialog->name);
+
+- do {
+- gint _value;
+- gtk_tree_model_get (model, &iter, COLUMN_VALUE, &_value, -1);
+- if (_value == value)
+- return index;
+- index++;
+- } while (gtk_tree_model_iter_next (model, &iter));
+- return -1;
++ g_free (dialog->section);
++ g_object_unref (dialog->store);
++ g_slice_free (SetupDialog, dialog);
+ }
+
+ static void
+ start (const gchar *engine_name)
+ {
+ IBusBus *bus;
+- gchar **strv, *lang, *name;
+- GtkBuilder *builder;
+- GtkWidget *dialog;
+- GtkWidget *combobox_underline, *combobox_orientation;
+- GtkWidget *checkbutton_foreground, *checkbutton_background;
+- GtkWidget *treeview;
+- GtkListStore *store;
++ IBusConfig *config;
++ gchar **strv, *lang, *name, *section;
++ SetupDialog *dialog;
+ GObject *object;
+ GError *error = NULL;
+- GtkCellRenderer *renderer;
+- ConfigContext context;
+- gchar *color;
+- gboolean is_foreground_set, is_background_set;
+- GdkColor foreground, background;
+- gint underline;
+- gint orientation;
+- gint index;
+
+ ibus_init ();
+-
+- bus = ibus_bus_new ();
+- //g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
+- ibus_m17n_init (bus);
++ ibus_m17n_init_common ();
+
+ strv = g_strsplit (engine_name, ":", 3);
+
+@@ -386,150 +568,25 @@ start (const gchar *engine_name)
+ lang = strv[1];
+ name = strv[2];
+
+- config = ibus_bus_get_config (bus);
+- context.section = g_strdup_printf ("engine/M17N/%s/%s", lang, name);
+-
+- builder = gtk_builder_new ();
+- gtk_builder_set_translation_domain (builder, "ibus-m17n");
+- gtk_builder_add_from_file (builder,
+- SETUPDIR "/ibus-m17n-preferences.ui",
+- &error);
+- object = gtk_builder_get_object (builder, "dialog");
+- dialog = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "checkbutton_foreground");
+- checkbutton_foreground = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "colorbutton_foreground");
+- context.colorbutton_foreground = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "checkbutton_background");
+- checkbutton_background = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "colorbutton_background");
+- context.colorbutton_background = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "combobox_underline");
+- combobox_underline = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "combobox_orientation");
+- combobox_orientation = GTK_WIDGET(object);
+- object = gtk_builder_get_object (builder, "treeviewMimConfig");
+- treeview = GTK_WIDGET(object);
+-
+- /* General -> Pre-edit Appearance */
+- /* foreground color of pre-edit buffer */
+- is_foreground_set = FALSE;
+- color_to_gdk (PREEDIT_FOREGROUND, &foreground);
+- if (ibus_m17n_config_get_string (config,
+- context.section,
+- "preedit_foreground",
+- &color)) {
+- if (g_strcmp0 (color, "none") != 0 &&
+- gdk_color_parse (color, &foreground))
+- is_foreground_set = TRUE;
+- g_free (color);
+- }
++ bus = ibus_bus_new ();
++ //g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
+
+- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton_foreground),
+- is_foreground_set);
+- g_signal_connect (checkbutton_foreground, "toggled",
+- G_CALLBACK(on_foreground_toggled),
+- &context);
+- gtk_widget_set_sensitive (context.colorbutton_foreground,
+- is_foreground_set);
+- gtk_color_button_set_color
+- (GTK_COLOR_BUTTON(context.colorbutton_foreground),
+- &foreground);
+- g_signal_connect (context.colorbutton_foreground, "color-set",
+- G_CALLBACK(on_foreground_color_set), &context);
++ config = ibus_bus_get_config (bus);
++ dialog = setup_dialog_new (config, lang, name);
+
+-
+- /* background color of pre-edit buffer */
+- is_background_set = FALSE;
+- color_to_gdk (PREEDIT_BACKGROUND, &background);
+- if (ibus_m17n_config_get_string (config,
+- context.section,
+- "preedit_background",
+- &color)) {
+- if (g_strcmp0 (color, "none") != 0 &&
+- gdk_color_parse (color, &background))
+- is_background_set = TRUE;
+- g_debug ("preedit_background %d", is_background_set);
+- g_free (color);
+- }
+- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton_background),
+- is_background_set);
+- g_signal_connect (checkbutton_background, "toggled",
+- G_CALLBACK(on_background_toggled),
+- &context);
+- gtk_widget_set_sensitive (context.colorbutton_background,
+- is_background_set);
+- gtk_color_button_set_color
+- (GTK_COLOR_BUTTON(context.colorbutton_background),
+- &background);
+- g_signal_connect (context.colorbutton_background, "color-set",
+- G_CALLBACK(on_background_color_set), &context);
++ g_strfreev (strv);
+
+- /* underline of pre-edit buffer */
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combobox_underline),
+- renderer, TRUE);
+- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combobox_underline),
+- renderer, "text", 0, NULL);
+- if (!ibus_m17n_config_get_int (config,
+- context.section,
+- "preedit_underline",
+- &underline))
+- underline = IBUS_ATTR_UNDERLINE_NONE;
++ setup_dialog_load_config (dialog);
+
+- index = get_combo_box_index_by_value (GTK_COMBO_BOX(combobox_underline),
+- underline);
+- gtk_combo_box_set_active (GTK_COMBO_BOX(combobox_underline), index);
+- g_signal_connect (combobox_underline, "changed",
+- G_CALLBACK(on_underline_changed), &context);
++ gtk_widget_show_all (dialog->dialog);
++ gtk_dialog_run (GTK_DIALOG(dialog->dialog));
+
+- /* General -> Other */
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combobox_orientation),
+- renderer, TRUE);
+- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combobox_orientation),
+- renderer, "text", 0, NULL);
+- if (!ibus_m17n_config_get_int (config,
+- context.section,
+- "lookup_table_orientation",
+- &orientation))
+- orientation = IBUS_ORIENTATION_SYSTEM;
+-
+- index = get_combo_box_index_by_value (GTK_COMBO_BOX(combobox_orientation),
+- orientation);
+- gtk_combo_box_set_active (GTK_COMBO_BOX(combobox_orientation), index);
+- g_signal_connect (combobox_orientation, "changed",
+- G_CALLBACK(on_orientation_changed), &context);
++ setup_dialog_save_config (dialog);
++ setup_dialog_free (dialog);
+
+- /* Advanced -> m17n-lib configuration */
+- store = gtk_list_store_new (NUM_COLS,
+- G_TYPE_STRING,
+- G_TYPE_STRING,
+- G_TYPE_STRING);
+- insert_items (store, msymbol (lang), msymbol (name));
+-
+- gtk_tree_view_set_model (GTK_TREE_VIEW(treeview), GTK_TREE_MODEL (store));
+- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1,
+- "Key",
+- gtk_cell_renderer_text_new (),
+- "text", COLUMN_KEY, NULL);
+- g_object_set (treeview, "has-tooltip", TRUE, NULL);
+- g_signal_connect (treeview, "query-tooltip", G_CALLBACK(on_query_tooltip),
+- NULL);
+-
+- context.language = msymbol (lang);
+- context.name = msymbol (name);
+- context.store = store;
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1,
+- "Value",
+- renderer,
+- "text", COLUMN_VALUE, NULL);
+- g_object_set (renderer, "editable", TRUE, NULL);
+- g_signal_connect (renderer, "edited", G_CALLBACK(on_edited), &context);
++ g_object_unref (bus);
+
+- gtk_widget_show_all (dialog);
+- gtk_dialog_run (GTK_DIALOG(dialog));
++ M17N_FINI ();
+ }
+
+ int
+--
+1.7.6.1
+
diff --git a/ibus-m17n-virtkbd.patch b/ibus-m17n-virtkbd.patch
new file mode 100644
index 0000000..ad70c1c
--- /dev/null
+++ b/ibus-m17n-virtkbd.patch
@@ -0,0 +1,849 @@
+From 5ec645b395e81cd804f50e5bcd6c21e92d257fbe Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Wed, 31 Aug 2011 18:28:48 +0900
+Subject: [PATCH 5/6] Support virtual keyboard.
+
+---
+ configure.ac | 17 +++
+ src/Makefile.am | 7 ++
+ src/default.xml.in.in | 111 ++++++++++++++++++++
+ src/engine.c | 66 ++++++++++++
+ src/ibus-m17n-preferences.ui | 16 +++
+ src/m17nutil.c | 59 +++++++++++-
+ src/m17nutil.h | 11 ++
+ src/setup.c | 26 +++++
+ src/virtkbd.c | 233 ++++++++++++++++++++++++++++++++++++++++++
+ src/virtkbd.h | 31 ++++++
+ 10 files changed, 576 insertions(+), 1 deletions(-)
+ create mode 100644 src/virtkbd.c
+ create mode 100644 src/virtkbd.h
+
+diff --git a/configure.ac b/configure.ac
+index 23102c4..13e42f8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -88,6 +88,23 @@ fi
+
+ AM_CONDITIONAL([HAVE_GTK],[test x$with_gtk != xno])
+
++dnl check eekboard for virtual keyboard
++AC_MSG_CHECKING([whether you enable eekboard])
++AC_ARG_ENABLE(eekboard,
++ AS_HELP_STRING([--enable-eekboard=no/yes],
++ [Enable eekboard default=yes]),
++ enable_eekboard=$enableval,
++ enable_eekboard=yes)
++
++if test x$enable_eekboard = xyes; then
++ PKG_CHECK_MODULES([EEKBOARD], [eekboard-0.90], , enable_xtest=no)
++ if test x$enable_eekboard = xyes; then
++ AC_DEFINE([HAVE_EEKBOARD], [1], [Define if eekboard is found])
++ fi
++fi
++AM_CONDITIONAL(ENABLE_EEKBOARD, [test x$enable_eekboard = xyes])
++AC_MSG_RESULT($enable_eekboard)
++
+ # check if minput_list, which is available in m17n-lib 1.6.2+ (CVS)
+ save_CFLAGS="$CFLAGS"
+ save_LIBS="$LIBS"
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e354149..eac6629 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -64,11 +64,18 @@ ibus_engine_m17n_SOURCES = \
+ main.c \
+ engine.c \
+ engine.h \
++ virtkbd.c \
++ virtkbd.h \
++ $(NULL)
++ibus_engine_m17n_CFLAGS = \
++ @EEKBOARD_CFLAGS@ \
++ $(AM_CFLAGS) \
+ $(NULL)
+ ibus_engine_m17n_LDADD = \
+ libm17ncommon.a \
+ @IBUS_LIBS@ \
+ @M17N_LIBS@ \
++ @EEKBOARD_LIBS@ \
+ $(NULL)
+
+ if HAVE_GTK
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index 8192878..47053ae 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -12,6 +12,7 @@
+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ @IBUS_HOTKEYS_XML@
++ <virtual-keyboard>us</virtual-keyboard>
+ </engine>
+ <!-- Indic engines should be selected by default:
+ https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
+@@ -410,4 +411,114 @@
+ <name>m17n:zh:tonepy*</name>
+ <symbol>调</symbol>
+ </engine>
++
++ <!-- Virtual keyboard. -->
++ <engine>
++ <name>m17n:ar:kbd</name>
++ <virtual-keyboard>ar,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:be:kbd</name>
++ <virtual-keyboard>be,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:fa:kbd</name>
++ <virtual-keyboard>fa,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:he:kbd</name>
++ <virtual-keyboard>he,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:kk:kbd</name>
++ <virtual-keyboard>kk,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ks:kbd</name>
++ <virtual-keyboard>ks,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:my:kbd</name>
++ <virtual-keyboard>my,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ru:kbd</name>
++ <virtual-keyboard>ru,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ua:kbd</name>
++ <virtual-keyboard>ua,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ug:kbd</name>
++ <virtual-keyboard>ug,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:be:kbd</name>
++ <virtual-keyboard>be,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:th:*</name>
++ <virtual-keyboard>th,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:zh:bopomofo</name>
++ <virtual-keyboard>zh-bopomofo,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:as:inscript</name>
++ <virtual-keyboard>as-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:bn:inscript</name>
++ <virtual-keyboard>bn-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:gu:inscript</name>
++ <virtual-keyboard>gu-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:hi:inscript</name>
++ <virtual-keyboard>hi-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:kn:inscript</name>
++ <virtual-keyboard>kn-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ks:inscript</name>
++ <virtual-keyboard>kn-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:mai:inscript</name>
++ <virtual-keyboard>mai-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ml:inscript</name>
++ <virtual-keyboard>ml-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:mr:inscript</name>
++ <virtual-keyboard>mr-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:or:inscript</name>
++ <virtual-keyboard>or-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:pa:inscript</name>
++ <virtual-keyboard>pa-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:sd:inscript</name>
++ <virtual-keyboard>sd-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:ta:inscript</name>
++ <virtual-keyboard>ta-inscript,us</virtual-keyboard>
++ </engine>
++ <engine>
++ <name>m17n:te:inscript</name>
++ <virtual-keyboard>te-inscript,us</virtual-keyboard>
++ </engine>
+ </engines>
+diff --git a/src/engine.c b/src/engine.c
+index dcff0c7..1e6bd1b 100644
+--- a/src/engine.c
++++ b/src/engine.c
+@@ -7,6 +7,7 @@
+ #include <m17n.h>
+ #include <string.h>
+ #include "m17nutil.h"
++#include "virtkbd.h"
+ #include "engine.h"
+
+ typedef struct _IBusM17NEngine IBusM17NEngine;
+@@ -18,10 +19,13 @@ struct _IBusM17NEngine {
+ /* members */
+ MInputContext *context;
+ IBusLookupTable *table;
++ IBusM17NVirtualKeyboard *virtkbd;
++
+ IBusProperty *status_prop;
+ #ifdef HAVE_SETUP
+ IBusProperty *setup_prop;
+ #endif /* HAVE_SETUP */
++ IBusProperty *virtkbd_prop;
+ IBusPropList *prop_list;
+ };
+
+@@ -34,6 +38,8 @@ struct _IBusM17NEngineClass {
+ guint preedit_background;
+ gint preedit_underline;
+ gint lookup_table_orientation;
++ gchar *virtual_keyboard;
++ gboolean virtual_keyboard_enabled;
+
+ MInputMethod *im;
+ };
+@@ -256,6 +262,7 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+ klass->preedit_background = INVALID_COLOR;
+ klass->preedit_underline = IBUS_ATTR_UNDERLINE_NONE;
+ klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
++ klass->virtual_keyboard_enabled = FALSE;
+
+ engine_config = ibus_m17n_get_engine_config (engine_name);
+ g_free (engine_name);
+@@ -290,6 +297,14 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
+ &klass->lookup_table_orientation))
+ klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
+
++ if (!ibus_m17n_config_get_boolean (config,
++ klass->config_section,
++ "virtual_keyboard_enabled",
++ &klass->virtual_keyboard_enabled))
++ klass->virtual_keyboard_enabled = FALSE;
++
++ klass->virtual_keyboard = engine_config->virtual_keyboard;
++
+ ibus_m17n_engine_config_free (engine_config);
+
+ g_signal_connect (config, "value-changed",
+@@ -346,6 +361,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ {
+ IBusText* label;
+ IBusText* tooltip;
++ IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
+
+ m17n->prop_list = ibus_prop_list_new ();
+ g_object_ref_sink (m17n->prop_list);
+@@ -378,6 +394,24 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
+ ibus_prop_list_append (m17n->prop_list, m17n->setup_prop);
+ #endif /* HAVE_SETUP */
+
++ label = ibus_text_new_from_string ("On-screen Keyboard");
++ tooltip = ibus_text_new_from_string ("Show on-screen keyboard");
++ m17n->virtkbd_prop = ibus_property_new ("virtual-keyboard",
++ PROP_TYPE_NORMAL,
++ label,
++ "input-keyboard",
++ tooltip,
++ TRUE,
++ FALSE,
++ PROP_STATE_UNCHECKED,
++ NULL);
++ g_object_ref_sink (m17n->virtkbd_prop);
++ ibus_prop_list_append (m17n->prop_list, m17n->virtkbd_prop);
++
++ if (klass->virtual_keyboard_enabled &&
++ klass->virtual_keyboard != NULL)
++ ibus_property_set_visible (m17n->virtkbd_prop, TRUE);
++
+ m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
+ g_object_ref_sink (m17n->table);
+ m17n->context = NULL;
+@@ -463,6 +497,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ }
+ #endif /* HAVE_SETUP */
+
++ if (m17n->virtkbd_prop) {
++ g_object_unref (m17n->virtkbd_prop);
++ m17n->virtkbd_prop = NULL;
++ }
++
+ if (m17n->table) {
+ g_object_unref (m17n->table);
+ m17n->table = NULL;
+@@ -473,6 +512,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
+ m17n->context = NULL;
+ }
+
++ if (m17n->virtkbd) {
++ g_object_unref (m17n->virtkbd);
++ m17n->virtkbd = NULL;
++ }
++
+ IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)m17n);
+ }
+
+@@ -705,6 +749,9 @@ ibus_m17n_engine_enable (IBusEngine *engine)
+ input context that we will use surrounding-text. */
+ ibus_engine_get_surrounding_text (engine, NULL, NULL, NULL);
+ #endif /* HAVE_IBUS_ENGINE_GET_SURROUNDING_TEXT */
++
++ if (m17n->virtkbd)
++ ibus_m17n_virtual_keyboard_enable (m17n->virtkbd);
+ }
+
+ static void
+@@ -714,6 +761,9 @@ ibus_m17n_engine_disable (IBusEngine *engine)
+
+ ibus_m17n_engine_focus_out (engine);
+ parent_class->disable (engine);
++
++ if (m17n->virtkbd)
++ ibus_m17n_virtual_keyboard_disable (m17n->virtkbd);
+ }
+
+ static void
+@@ -776,6 +826,22 @@ ibus_m17n_engine_property_activate (IBusEngine *engine,
+ }
+ #endif /* HAVE_SETUP */
+
++#ifdef HAVE_EEKBOARD
++ if (g_strcmp0 (prop_name, "virtual-keyboard") == 0) {
++ /* virtual keyboard is not initialized until a user activates
++ the "virtual-keyboard" prop for the first time */
++ if (m17n->virtkbd == NULL) {
++ IBusM17NEngineClass *klass =
++ (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
++
++ m17n->virtkbd =
++ ibus_m17n_virtual_keyboard_new ((IBusEngine *)m17n,
++ klass->virtual_keyboard);
++ }
++ ibus_m17n_virtual_keyboard_toggle_display (m17n->virtkbd);
++ }
++#endif /* HAVE_EEKBOARD */
++
+ parent_class->property_activate (engine, prop_name, prop_state);
+ }
+
+diff --git a/src/ibus-m17n-preferences.ui b/src/ibus-m17n-preferences.ui
+index a46ab49..bca034d 100644
+--- a/src/ibus-m17n-preferences.ui
++++ b/src/ibus-m17n-preferences.ui
+@@ -192,6 +192,7 @@
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
++ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <child>
+ <object class="GtkLabel" id="label9">
+@@ -210,6 +211,21 @@
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
++ <child>
++ <object class="GtkCheckButton" id="checkbutton_virtkbd">
++ <property name="label" translatable="yes">Enable Virtual Keyboard</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">False</property>
++ <property name="draw_indicator">True</property>
++ </object>
++ <packing>
++ <property name="left_attach">0</property>
++ <property name="right_attach">2</property>
++ <property name="top_attach">1</property>
++ <property name="bottom_attach">2</property>
++ </packing>
++ </child>
+ </object>
+ </child>
+ </object>
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 94a6891..2143e54 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -18,7 +18,8 @@ typedef enum {
+ ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
+ ENGINE_CONFIG_HOTKEYS_MASK = 1 << 2,
+ ENGINE_CONFIG_SYMBOL_MASK = 1 << 3,
+- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 4
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 4,
++ ENGINE_CONFIG_VIRTUAL_KEYBOARD_MASK = 1 << 5
+ } EngineConfigMask;
+
+ struct _EngineConfigNode {
+@@ -285,6 +286,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+ config->symbol = cnode->config.symbol;
+ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
+ config->preedit_highlight = cnode->config.preedit_highlight;
++ if (cnode->mask & ENGINE_CONFIG_VIRTUAL_KEYBOARD_MASK)
++ config->virtual_keyboard = cnode->config.virtual_keyboard;
+ }
+ }
+ return config;
+@@ -340,6 +343,11 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK;
+ continue;
+ }
++ if (g_strcmp0 (sub_node->name , "virtual-keyboard") == 0) {
++ cnode->config.virtual_keyboard = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_VIRTUAL_KEYBOARD_MASK;
++ continue;
++ }
+ g_warning ("<engine> element contains invalid element <%s>",
+ sub_node->name);
+ }
+@@ -494,3 +502,52 @@ ibus_m17n_config_get_int (IBusConfig *config,
+ return FALSE;
+ #endif /* !IBUS_CHECK_VERSION(1,3,99) */
+ }
++
++void
++ibus_m17n_config_set_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean value)
++{
++#if IBUS_CHECK_VERSION(1,3,99)
++ ibus_config_set_value (config, section, name, g_variant_new_boolean (value));
++#else
++ GValue v = { 0 };
++
++ g_value_init (&v, G_TYPE_BOOLEAN);
++ g_value_set_boolean (&v, value);
++ ibus_config_set_value (config, section, name, &v);
++#endif /* !IBUS_CHECK_VERSION(1,3,99) */
++}
++
++gboolean
++ibus_m17n_config_get_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean *result)
++{
++#if IBUS_CHECK_VERSION(1,3,99)
++ GVariant *value = NULL;
++
++ g_return_val_if_fail (result != NULL, FALSE);
++
++ value = ibus_config_get_value (config, section, name);
++ if (value) {
++ *result = g_variant_get_boolean (value);
++ g_variant_unref (value);
++ return TRUE;
++ }
++ return FALSE;
++#else
++ GValue value = { 0 };
++
++ g_return_val_if_fail (result != NULL, FALSE);
++
++ if (ibus_config_get_value (config, section, name, &value)) {
++ *result = g_value_get_boolean (&value);
++ g_value_unset (&value);
++ return TRUE;
++ }
++ return FALSE;
++#endif /* !IBUS_CHECK_VERSION(1,3,99) */
++}
+diff --git a/src/m17nutil.h b/src/m17nutil.h
+index 21b1bb9..9c3fca8 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
+@@ -25,6 +25,9 @@ struct _IBusM17NEngineConfig {
+
+ /* whether to highlight preedit */
+ gboolean preedit_highlight;
++
++ /* virtual keyboard type */
++ gchar *virtual_keyboard;
+ };
+
+ typedef struct _IBusM17NEngineConfig IBusM17NEngineConfig;
+@@ -56,4 +59,12 @@ gboolean ibus_m17n_config_get_int (IBusConfig *config,
+ const gchar *section,
+ const gchar *name,
+ gint *result);
++void ibus_m17n_config_set_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean value);
++gboolean ibus_m17n_config_get_boolean (IBusConfig *config,
++ const gchar *section,
++ const gchar *name,
++ gboolean *result);
+ #endif
+diff --git a/src/setup.c b/src/setup.c
+index 30386df..1c534d6 100644
+--- a/src/setup.c
++++ b/src/setup.c
+@@ -25,6 +25,7 @@ struct _SetupDialog {
+ GtkWidget *colorbutton_foreground;
+ GtkWidget *checkbutton_background;
+ GtkWidget *colorbutton_background;
++ GtkWidget *checkbutton_virtkbd;
+ GtkWidget *treeview;
+ GtkListStore *store;
+
+@@ -322,6 +323,15 @@ setup_dialog_load_config (SetupDialog *dialog)
+ gtk_combo_box_set_active (GTK_COMBO_BOX(dialog->combobox_orientation),
+ index);
+
++ if (!ibus_m17n_config_get_boolean (dialog->config,
++ dialog->section,
++ "virtual_keyboard_enabled",
++ &bvalue))
++ bvalue = FALSE;
++
++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(dialog->checkbutton_virtkbd),
++ bvalue);
++
+ /* Advanced -> m17n-lib configuration */
+ dialog->store = gtk_list_store_new (NUM_COLS,
+ G_TYPE_STRING,
+@@ -404,6 +414,17 @@ save_choice (SetupDialog *dialog,
+ ibus_m17n_config_set_int (dialog->config, dialog->section, name, active);
+ }
+
++static void
++save_toggle (SetupDialog *dialog,
++ GtkToggleButton *togglebutton,
++ const gchar *name)
++{
++ ibus_m17n_config_set_boolean (dialog->config,
++ dialog->section,
++ name,
++ gtk_toggle_button_get_active (togglebutton));
++}
++
+ static gboolean
+ save_m17n_options (SetupDialog *dialog)
+ {
+@@ -486,6 +507,9 @@ setup_dialog_save_config (SetupDialog *dialog)
+ save_choice (dialog,
+ GTK_COMBO_BOX(dialog->combobox_orientation),
+ "lookup_table_orientation");
++ save_toggle (dialog,
++ GTK_TOGGLE_BUTTON(dialog->checkbutton_virtkbd),
++ "virtual_keyboard_enabled");
+ save_m17n_options (dialog);
+ }
+
+@@ -528,6 +552,8 @@ setup_dialog_new (IBusConfig *config,
+ dialog->combobox_underline = GTK_WIDGET(object);
+ object = gtk_builder_get_object (builder, "combobox_orientation");
+ dialog->combobox_orientation = GTK_WIDGET(object);
++ object = gtk_builder_get_object (builder, "checkbutton_virtkbd");
++ dialog->checkbutton_virtkbd = GTK_WIDGET(object);
+ object = gtk_builder_get_object (builder, "treeview_mim_config");
+ dialog->treeview = GTK_WIDGET(object);
+
+diff --git a/src/virtkbd.c b/src/virtkbd.c
+new file mode 100644
+index 0000000..9baf971
+--- /dev/null
++++ b/src/virtkbd.c
+@@ -0,0 +1,233 @@
++/* vim:set et sts=4: */
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#ifdef HAVE_EEKBOARD
++#include <eekboard/eekboard-client.h>
++#endif /* HAVE_EEKBOARD */
++
++#include "virtkbd.h"
++
++struct _IBusM17NVirtualKeyboard {
++ GObject parent;
++ IBusEngine *engine;
++ gchar *keyboard_type;
++ GSList *keyboards;
++
++#ifdef HAVE_EEKBOARD
++ EekboardClient *client;
++ EekboardContext *context;
++#endif /* HAVE_EEKBOARD */
++};
++
++struct _IBusM17NVirtualKeyboardClass {
++ GObjectClass parent_class;
++};
++
++typedef struct _IBusM17NVirtualKeyboardClass IBusM17NVirtualKeyboardClass;
++
++#ifdef HAVE_EEKBOARD
++#define _EEK_INIT() eek_init ()
++#else
++#define _EEK_INIT()
++#endif /* HAVE_EEKBOARD */
++
++G_DEFINE_TYPE_WITH_CODE (IBusM17NVirtualKeyboard, ibus_m17n_virtual_keyboard,
++ G_TYPE_OBJECT, _EEK_INIT());
++
++static void
++ibus_m17n_virtual_keyboard_dispose (GObject *object)
++{
++ IBusM17NVirtualKeyboard *virtkbd = IBUS_M17N_VIRTUAL_KEYBOARD (object);
++
++ if (virtkbd->engine) {
++ g_object_unref (virtkbd->engine);
++ virtkbd->engine = NULL;
++ }
++ if (virtkbd->keyboards) {
++ GSList *next = virtkbd->keyboards->next;
++ /* virtkbd->keyboards is a ring; break it before free */
++ virtkbd->keyboards->next = NULL;
++ g_slist_free (next);
++ }
++
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->context) {
++ g_object_unref (virtkbd->context);
++ virtkbd->context = NULL;
++ }
++ if (virtkbd->client) {
++ g_object_unref (virtkbd->client);
++ virtkbd->client = NULL;
++ }
++#endif /* HAVE_EEKBOARD */
++
++ G_OBJECT_CLASS (ibus_m17n_virtual_keyboard_parent_class)->dispose (object);
++}
++
++static void
++ibus_m17n_virtual_keyboard_finalize (GObject *object)
++{
++ IBusM17NVirtualKeyboard *virtkbd = IBUS_M17N_VIRTUAL_KEYBOARD (object);
++
++ g_free (virtkbd->keyboard_type);
++
++ G_OBJECT_CLASS (ibus_m17n_virtual_keyboard_parent_class)->finalize (object);
++}
++
++static void
++ibus_m17n_virtual_keyboard_class_init (IBusM17NVirtualKeyboardClass *klass)
++{
++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++ gobject_class->dispose = ibus_m17n_virtual_keyboard_dispose;
++ gobject_class->finalize = ibus_m17n_virtual_keyboard_finalize;
++}
++
++static void
++ibus_m17n_virtual_keyboard_init (IBusM17NVirtualKeyboard *self)
++{
++}
++
++#ifdef HAVE_EEKBOARD
++static void
++destroyed_cb (EekboardClient *client,
++ IBusM17NVirtualKeyboard *virtkbd)
++{
++ if (virtkbd->context) {
++ g_object_unref (virtkbd->context);
++ virtkbd->context = NULL;
++ }
++ if (virtkbd->client) {
++ g_object_unref (virtkbd->client);
++ virtkbd->client = NULL;
++ }
++}
++
++static void
++key_pressed_cb (EekboardContext *context,
++ gchar *keyname,
++ EekSymbol *symbol,
++ guint modifiers,
++ IBusM17NVirtualKeyboard *virtkbd)
++{
++ if (EEK_IS_TEXT (symbol)) {
++ const gchar *string;
++ IBusText *text;
++
++ string = eek_text_get_text (EEK_TEXT (symbol));
++ text = ibus_text_new_from_static_string (string);
++ ibus_engine_commit_text (virtkbd->engine, text);
++ } else if (EEK_IS_KEYSYM (symbol)) {
++ guint keyval = eek_keysym_get_xkeysym (EEK_KEYSYM (symbol));
++ ibus_engine_forward_key_event (virtkbd->engine,
++ keyval,
++ 0,
++ modifiers);
++ ibus_engine_forward_key_event (virtkbd->engine,
++ keyval,
++ 0,
++ modifiers | IBUS_RELEASE_MASK);
++ } else if (g_strcmp0 (eek_symbol_get_name (symbol),
++ "cycle-keyboard") == 0) {
++ virtkbd->keyboards = g_slist_next (virtkbd->keyboards);
++ eekboard_context_set_keyboard (virtkbd->context,
++ GPOINTER_TO_UINT (virtkbd->keyboards->data),
++ NULL);
++ }
++}
++
++static void
++init_client (IBusM17NVirtualKeyboard *virtkbd)
++{
++ GDBusConnection *connection;
++ GError *error;
++ gchar **strv, **p;
++
++ error = NULL;
++ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
++ if (connection == NULL) {
++ g_printerr ("Can't connect to the session bus: %s\n",
++ error->message);
++ return;
++ }
++
++ virtkbd->client = eekboard_client_new (connection, NULL);
++ g_object_unref (connection);
++ g_signal_connect (virtkbd->client, "destroyed",
++ G_CALLBACK (destroyed_cb), virtkbd);
++
++ virtkbd->context = eekboard_client_create_context (virtkbd->client,
++ "ibus-m17n",
++ NULL);
++ g_signal_connect (virtkbd->context, "key-pressed",
++ G_CALLBACK (key_pressed_cb), virtkbd);
++
++ strv = g_strsplit (virtkbd->keyboard_type, ",", -1);
++ for (p = strv; *p; p++) {
++ guint keyboard;
++
++ keyboard = eekboard_context_add_keyboard (virtkbd->context,
++ g_strstrip (*p),
++ NULL);
++ virtkbd->keyboards = g_slist_prepend (virtkbd->keyboards,
++ GUINT_TO_POINTER (keyboard));
++ }
++ virtkbd->keyboards = g_slist_reverse (virtkbd->keyboards);
++ g_strfreev (strv);
++
++ /* make a cycle */
++ g_slist_last (virtkbd->keyboards)->next = virtkbd->keyboards;
++
++ eekboard_context_set_keyboard (virtkbd->context,
++ GPOINTER_TO_UINT (virtkbd->keyboards->data),
++ NULL);
++}
++#endif /* HAVE_EEKBOARD */
++
++void
++ibus_m17n_virtual_keyboard_toggle_display (IBusM17NVirtualKeyboard *virtkbd)
++{
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->client == NULL)
++ ibus_m17n_virtual_keyboard_enable (virtkbd);
++
++ if (virtkbd->client != NULL) {
++ if (eekboard_context_is_visible (virtkbd->context))
++ eekboard_context_hide_keyboard (virtkbd->context, NULL);
++ else
++ eekboard_context_show_keyboard (virtkbd->context, NULL);
++ }
++#endif /* HAVE_EEKBOARD */
++}
++
++void
++ibus_m17n_virtual_keyboard_enable (IBusM17NVirtualKeyboard *virtkbd)
++{
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->client == NULL)
++ init_client (virtkbd);
++
++ if (virtkbd->client != NULL)
++ eekboard_client_push_context (virtkbd->client, virtkbd->context, NULL);
++#endif /* HAVE_EEKBOARD */
++}
++
++void
++ibus_m17n_virtual_keyboard_disable (IBusM17NVirtualKeyboard *virtkbd)
++{
++#ifdef HAVE_EEKBOARD
++ if (virtkbd->client != NULL)
++ eekboard_client_pop_context (virtkbd->client, NULL);
++#endif /* HAVE_EEKBOARD */
++}
++
++IBusM17NVirtualKeyboard *
++ibus_m17n_virtual_keyboard_new (IBusEngine *engine,
++ const gchar *keyboard_type)
++{
++ IBusM17NVirtualKeyboard *virtkbd = g_object_new (IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, NULL);
++ virtkbd->engine = g_object_ref (engine);
++ virtkbd->keyboard_type = g_strdup (keyboard_type);
++ return virtkbd;
++}
+diff --git a/src/virtkbd.h b/src/virtkbd.h
+new file mode 100644
+index 0000000..c28953a
+--- /dev/null
++++ b/src/virtkbd.h
+@@ -0,0 +1,31 @@
++#ifndef __VIRTKBD_H__
++#define __VIRTKBD_H__ 1
++
++#include <ibus.h>
++
++G_BEGIN_DECLS
++
++#define IBUS_M17N_TYPE_VIRTUAL_KEYBOARD (ibus_m17n_virtual_keyboard_get_type())
++#define IBUS_M17N_VIRTUAL_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, IBusM17NVirtualKeyboard))
++#define IBUS_M17N_VIRTUAL_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, IBusM17NVirtualKeyboardClass))
++#define IBUS_M17N_IS_VIRTUAL_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD))
++#define IBUS_M17N_IS_VIRTUAL_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD))
++#define IBUS_M17N_VIRTUAL_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_M17N_TYPE_VIRTUAL_KEYBOARD, IBusM17NVirtualKeyboardClass))
++
++typedef struct _IBusM17NVirtualKeyboard IBusM17NVirtualKeyboard;
++
++GType ibus_m17n_virtual_keyboard_get_type
++ (void);
++IBusM17NVirtualKeyboard *ibus_m17n_virtual_keyboard_new
++ (IBusEngine *engine,
++ const gchar *keyboard_type);
++void ibus_m17n_virtual_keyboard_toggle_display
++ (IBusM17NVirtualKeyboard *virtkbd);
++void ibus_m17n_virtual_keyboard_enable
++ (IBusM17NVirtualKeyboard *virtkbd);
++void ibus_m17n_virtual_keyboard_disable
++ (IBusM17NVirtualKeyboard *virtkbd);
++
++G_END_DECLS
++
++#endif /* __VIRTKBD_H__ */
+--
+1.7.6.1
+
diff --git a/ibus-m17n-xkb-options.patch b/ibus-m17n-xkb-options.patch
index 6c3d8b9..ab09cf0 100644
--- a/ibus-m17n-xkb-options.patch
+++ b/ibus-m17n-xkb-options.patch
@@ -1,122 +1,49 @@
-Patch to set certain XKB options when an m17n IME is set.
-Index: ibus-m17n-1.3.2/src/default.xml.in.in
-===================================================================
---- ibus-m17n-1.3.2.orig/src/default.xml.in.in
-+++ ibus-m17n-1.3.2/src/default.xml.in.in
-@@ -12,19 +12,22 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:bn:inscript</name>
-+ <name>m17n:bn:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:gu:inscript</name>
-+ <name>m17n:gu:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:hi:inscript</name>
-+ <name>m17n:hi:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:kn:kgp</name>
-@@ -37,19 +40,22 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:mai:inscript</name>
-+ <name>m17n:mai:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:ml:inscript</name>
-+ <name>m17n:ml:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:mr:inscript</name>
-+ <name>m17n:mr:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:ne:rom</name>
-@@ -57,14 +63,16 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:or:inscript</name>
-+ <name>m17n:or:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
-- <name>m17n:pa:inscript</name>
-+ <name>m17n:pa:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:sa:harvard-kyoto</name>
-@@ -72,14 +80,16 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:sd:inscript</name>
-+ <name>m17n:sd:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
+From 0cc2abaab50e6668e525da093ef12ed0277d5c21 Mon Sep 17 00:00:00 2001
+From: Daiki Ueno <ueno(a)unixuser.org>
+Date: Mon, 8 Aug 2011 09:59:28 +0900
+Subject: [PATCH 3/6] Set XKB layout option via default.xml.
+
+---
+ src/default.xml.in.in | 9 +++++++++
+ src/m17nutil.c | 13 +++++++++++--
+ src/m17nutil.h | 3 +++
+ 3 files changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index dc93fd3..785ab05 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -157,6 +157,15 @@
+ <name>m17n:si:samanala</name>
+ <rank>0</rank>
+ </engine>
++ <!-- Some Indic engines expect AltGr is automatically mapped -->
++ <engine>
++ <name>m17n:*:inscript</name>
+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:si:wijesekera</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:si:*</name>
+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:ta:tamil99</name>
-@@ -87,9 +97,10 @@
- <preedit-highlight>FALSE</preedit-highlight>
- </engine>
- <engine>
-- <name>m17n:te:inscript</name>
-+ <name>m17n:te:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <!-- Samanala should have lower rank than other Sinhala
- engines since it is the only non-keyboard input method in
-@@ -226,6 +237,7 @@
- <name>m17n:si:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <layout>default[lv3:ralt_switch]</layout>
- </engine>
- <engine>
- <name>m17n:ta:*</name>
-Index: ibus-m17n-1.3.2/src/m17nutil.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.c
-+++ ibus-m17n-1.3.2/src/m17nutil.c
-@@ -120,7 +120,7 @@ ibus_m17n_engine_new (MSymbol lang,
++ </engine>
+ <!-- Some CJK engines use preedit. -->
+ <engine>
+ <name>m17n:zh:cangjie</name>
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index b06f71d..201c8b4 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -15,7 +15,8 @@ static MConverter *utf8_converter = NULL;
+
+ typedef enum {
+ ENGINE_CONFIG_RANK_MASK = 1 << 0,
+- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 1
++ ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 2
+ } EngineConfigMask;
+
+ struct _EngineConfigNode {
+@@ -130,7 +131,7 @@ ibus_m17n_engine_new (MSymbol lang,
"language", msymbol_name (lang),
"license", "GPL",
"icon", engine_icon ? engine_icon : "",
@@ -125,22 +52,32 @@ Index: ibus-m17n-1.3.2/src/m17nutil.c
"rank", config->rank,
NULL);
#else
-@@ -282,6 +282,11 @@ ibus_m17n_engine_config_parse_xml_node (
- cnode->config.rank = atoi (sub_node->text);
+@@ -272,6 +273,8 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+ if (g_pattern_match_simple (cnode->name, engine_name)) {
+ if (cnode->mask & ENGINE_CONFIG_RANK_MASK)
+ config->rank = cnode->config.rank;
++ if (cnode->mask & ENGINE_CONFIG_LAYOUT_MASK)
++ config->layout = cnode->config.layout;
+ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
+ config->preedit_highlight = cnode->config.preedit_highlight;
+ }
+@@ -304,6 +307,12 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_RANK_MASK;
continue;
}
+ if (g_strcmp0 (sub_node->name , "layout") == 0) {
+ g_free (cnode->config.layout);
+ cnode->config.layout = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_LAYOUT_MASK;
+ continue;
+ }
if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
if (g_ascii_strcasecmp ("TRUE", sub_node->text) == 0)
cnode->config.preedit_highlight = TRUE;
-Index: ibus-m17n-1.3.2/src/m17nutil.h
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.h
-+++ ibus-m17n-1.3.2/src/m17nutil.h
+diff --git a/src/m17nutil.h b/src/m17nutil.h
+index 313e7bc..c7b283e 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
@@ -14,6 +14,9 @@ struct _IBusM17NEngineConfig {
/* engine rank */
gint rank;
@@ -151,3 +88,6 @@ Index: ibus-m17n-1.3.2/src/m17nutil.h
/* whether to highlight preedit */
gboolean preedit_highlight;
};
+--
+1.7.6.1
+
diff --git a/ibus-m17n-xx-icon-symbol.patch b/ibus-m17n-xx-icon-symbol.patch
index 1d13292..42e70fd 100644
--- a/ibus-m17n-xx-icon-symbol.patch
+++ b/ibus-m17n-xx-icon-symbol.patch
@@ -1,23 +1,23 @@
-From 432d6f93be857d2544ad19ba67caea22d5843cc5 Mon Sep 17 00:00:00 2001
+From 4cad5fe6e36be9cbfe0d50f683b489e9202c7d53 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno(a)unixuser.org>
-Date: Tue, 5 Jul 2011 16:26:49 +0900
-Subject: [PATCH] Supply hotkeys and symbol in engine desc.
+Date: Wed, 31 Aug 2011 11:44:46 +0900
+Subject: [PATCH 4/6] Supply hotkeys and symbol in engine desc.
---
configure.ac | 3 +
m4/.gitignore | 2 +
- m4/ibus.m4 | 52 +++++++++
- src/default.xml.in.in | 284 +++++++++++++++++++++++++++++++++++++++++--------
- src/m17nutil.c | 10 ++
- src/m17nutil.h | 6 +
- 6 files changed, 312 insertions(+), 45 deletions(-)
+ m4/ibus.m4 | 52 ++++++++++++
+ src/default.xml.in.in | 207 +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/m17nutil.c | 20 +++++-
+ src/m17nutil.h | 6 ++
+ 6 files changed, 289 insertions(+), 1 deletions(-)
create mode 100644 m4/ibus.m4
-Index: ibus-m17n-1.3.2/configure.ac
-===================================================================
---- ibus-m17n-1.3.2.orig/configure.ac
-+++ ibus-m17n-1.3.2/configure.ac
-@@ -114,6 +114,9 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GET
+diff --git a/configure.ac b/configure.ac
+index 927d382..23102c4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -114,6 +114,9 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define to the read-only
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION(0.16.1)
@@ -27,10 +27,19 @@ Index: ibus-m17n-1.3.2/configure.ac
# OUTPUT files
AC_CONFIG_FILES([ po/Makefile.in
-Index: ibus-m17n-1.3.2/m4/ibus.m4
-===================================================================
+diff --git a/m4/.gitignore b/m4/.gitignore
+index 0f4126c..e28d185 100644
+#--- a/m4/.gitignore
+#+++ b/m4/.gitignore
+@@ -1 +1,3 @@
+ *.m4
++!ibus.m4
++
+diff --git a/m4/ibus.m4 b/m4/ibus.m4
+new file mode 100644
+index 0000000..f8f074a
--- /dev/null
-+++ ibus-m17n-1.3.2/m4/ibus.m4
++++ b/m4/ibus.m4
@@ -0,0 +1,52 @@
+# IBUS_WITH_HOTKEYS([DEFAULT])
+AC_DEFUN([IBUS_WITH_HOTKEYS], [
@@ -84,503 +93,245 @@ Index: ibus-m17n-1.3.2/m4/ibus.m4
+ fi
+ AC_SUBST(IBUS_SYMBOL_XML)
+])
-Index: ibus-m17n-1.3.2/src/default.xml.in.in
-===================================================================
---- ibus-m17n-1.3.2.orig/src/default.xml.in.in
-+++ ibus-m17n-1.3.2/src/default.xml.in.in
-@@ -10,97 +10,114 @@
- <name>m17n:as:phonetic</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:bn:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:gu:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ક</symbol>
- </engine>
- <engine>
- <name>m17n:hi:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:kn:kgp</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>ಕ</symbol>
- </engine>
- <engine>
- <name>m17n:ks:kbd</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:mai:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ml:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ക</symbol>
- </engine>
- <engine>
- <name>m17n:mr:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ne:rom</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>ने</symbol>
- </engine>
- <engine>
- <name>m17n:or:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>କ</symbol>
- </engine>
- <engine>
- <name>m17n:pa:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>ਕ</symbol>
- </engine>
- <engine>
- <name>m17n:sa:harvard-kyoto</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:sd:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:si:wijesekera</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>සි</symbol>
- </engine>
- <engine>
- <name>m17n:ta:tamil99</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>க</symbol>
- </engine>
- <engine>
- <name>m17n:te:inscript*</name>
- <rank>2</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
-+ <symbol>క</symbol>
- </engine>
- <!-- Samanala should have lower rank than other Sinhala
- engines since it is the only non-keyboard input method in
-@@ -109,57 +126,14 @@
- <name>m17n:si:samanala</name>
+diff --git a/src/default.xml.in.in b/src/default.xml.in.in
+index 785ab05..8192878 100644
+--- a/src/default.xml.in.in
++++ b/src/default.xml.in.in
+@@ -10,6 +10,8 @@
+ <name>m17n:*</name>
<rank>0</rank>
<preedit-highlight>FALSE</preedit-highlight>
-+ <symbol>සි</symbol>
++ <symbol></symbol>
++ @IBUS_HOTKEYS_XML@
</engine>
- <!-- Chinese and Japanese engines which require preedit decoration. -->
- <engine>
+ <!-- Indic engines should be selected by default:
+ https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
+@@ -203,4 +205,209 @@
<name>m17n:ja:anthy</name>
- <rank>0</rank>
<preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:cangjie</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:py-b5</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:py-gb</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:py</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:quick</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:tonepy-b5</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:tonepy-gb</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:tonepy</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-- </engine>
-- <engine>
-- <name>m17n:zh:util</name>
-- <rank>0</rank>
-- <preedit-highlight>TRUE</preedit-highlight>
-+ <symbol>あ</symbol>
</engine>
- <!-- Other Indic engines should be selected by default:
- https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
-@@ -167,92 +141,312 @@
- <name>m17n:as:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ <!-- Set IME symbols. -->
++ <engine>
++ <name>m17n:as:*</name>
+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:bn:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:bn:*</name>
+ <symbol>ক</symbol>
- </engine>
- <engine>
- <name>m17n:gu:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:gu:*</name>
+ <symbol>ક</symbol>
- </engine>
- <engine>
- <name>m17n:hi:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:hi:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:kn:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:kn:*</name>
+ <symbol>ಕ</symbol>
- </engine>
- <engine>
- <name>m17n:ks:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ks:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:mai:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:mai:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ml:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ml:*</name>
+ <symbol>ക</symbol>
- </engine>
- <engine>
- <name>m17n:mr:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:mr:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:ne:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol></symbol>
- </engine>
- <engine>
- <name>m17n:or:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ne:*</name>
++ <symbol>ने</symbol>
++ </engine>
++ <engine>
++ <name>m17n:or:*</name>
+ <symbol>କ</symbol>
- </engine>
- <engine>
- <name>m17n:pa:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:pa:*</name>
+ <symbol>ਕ</symbol>
- </engine>
- <engine>
- <name>m17n:sa:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:sa:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:sd:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:sd:*</name>
+ <symbol>क</symbol>
- </engine>
- <engine>
- <name>m17n:si:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
- <layout>default[lv3:ralt_switch]</layout>
++ </engine>
++ <engine>
++ <name>m17n:si:*</name>
+ <symbol>සි</symbol>
- </engine>
- <engine>
- <name>m17n:ta:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:ta:*</name>
+ <symbol>க</symbol>
- </engine>
- <engine>
- <name>m17n:te:*</name>
- <rank>1</rank>
- <preedit-highlight>FALSE</preedit-highlight>
++ </engine>
++ <engine>
++ <name>m17n:te:*</name>
+ <symbol>క</symbol>
+ </engine>
-+ <!-- Tweak symbols: for most maps, their "title" properties
-+ fit in one character width. However, some of them are
-+ bit longer. -->
+ <engine>
+ <name>m17n:*:kbd</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:*:pre</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:*:post</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:am:sera</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>አ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:bo:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ཀ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:cr:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:dv:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:eo:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:fa:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ف</symbol>
+ </engine>
+ <engine>
+ <name>m17n:fr:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:ii:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:iu:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
++ <name>m17n:ja:anthy</name>
++ <symbol>あ</symbol>
++ </engine>
++ <engine>
+ <name>m17n:kk:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>قا</symbol>
+ </engine>
+ <engine>
+ <name>m17n:km:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ក</symbol>
+ </engine>
+ <engine>
+ <name>m17n:lo:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ກ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:nsk:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:oj:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:ps:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:ru:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>Я</symbol>
+ </engine>
+ <engine>
+ <name>m17n:sv:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:syrc:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:tai:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>꫞</symbol>
+ </engine>
+ <engine>
+ <name>m17n:th:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>ท</symbol>
+ </engine>
+ <engine>
+ <name>m17n:ur:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>خ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:vi:han</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>越</symbol>
+ </engine>
+ <engine>
+ <name>m17n:vi:nom*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>喃</symbol>
+ </engine>
+ <engine>
+ <name>m17n:vi:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>FALSE</preedit-highlight>
+ <symbol>Ắ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:yi:*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol></symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:bopomofo</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>ㄅ</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:cangjie</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>倉</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:py*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>拼</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:quick</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>簡</symbol>
+ </engine>
+ <engine>
+ <name>m17n:zh:tonepy*</name>
-+ <rank>0</rank>
-+ <preedit-highlight>TRUE</preedit-highlight>
+ <symbol>调</symbol>
- </engine>
- <!-- Default for other engines. -->
- <engine>
- <name>m17n:*</name>
- <rank>0</rank>
- <preedit-highlight>FALSE</preedit-highlight>
-+ <symbol></symbol>
-+ @IBUS_HOTKEYS_XML@
- </engine>
++ </engine>
</engines>
-Index: ibus-m17n-1.3.2/src/m17nutil.c
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.c
-+++ ibus-m17n-1.3.2/src/m17nutil.c
-@@ -122,6 +122,8 @@ ibus_m17n_engine_new (MSymbol lang,
+diff --git a/src/m17nutil.c b/src/m17nutil.c
+index 201c8b4..94a6891 100644
+--- a/src/m17nutil.c
++++ b/src/m17nutil.c
+@@ -16,7 +16,9 @@ static MConverter *utf8_converter = NULL;
+ typedef enum {
+ ENGINE_CONFIG_RANK_MASK = 1 << 0,
+ ENGINE_CONFIG_LAYOUT_MASK = 1 << 1,
+- ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 2
++ ENGINE_CONFIG_HOTKEYS_MASK = 1 << 2,
++ ENGINE_CONFIG_SYMBOL_MASK = 1 << 3,
++ ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK = 1 << 4
+ } EngineConfigMask;
+
+ struct _EngineConfigNode {
+@@ -133,6 +135,8 @@ ibus_m17n_engine_new (MSymbol lang,
"icon", engine_icon ? engine_icon : "",
"layout", config->layout ? config->layout : "us",
"rank", config->rank,
@@ -589,25 +340,38 @@ Index: ibus-m17n-1.3.2/src/m17nutil.c
NULL);
#else
engine = ibus_engine_desc_new (engine_name,
-@@ -287,6 +289,14 @@ ibus_m17n_engine_config_parse_xml_node (
- cnode->config.layout = g_strdup (sub_node->text);
+@@ -275,6 +279,10 @@ ibus_m17n_get_engine_config (const gchar *engine_name)
+ config->rank = cnode->config.rank;
+ if (cnode->mask & ENGINE_CONFIG_LAYOUT_MASK)
+ config->layout = cnode->config.layout;
++ if (cnode->mask & ENGINE_CONFIG_HOTKEYS_MASK)
++ config->hotkeys = cnode->config.hotkeys;
++ if (cnode->mask & ENGINE_CONFIG_SYMBOL_MASK)
++ config->symbol = cnode->config.symbol;
+ if (cnode->mask & ENGINE_CONFIG_PREEDIT_HIGHLIGHT_MASK)
+ config->preedit_highlight = cnode->config.preedit_highlight;
+ }
+@@ -313,6 +321,16 @@ ibus_m17n_engine_config_parse_xml_node (EngineConfigNode *cnode,
+ cnode->mask |= ENGINE_CONFIG_LAYOUT_MASK;
continue;
}
+ if (g_strcmp0 (sub_node->name , "hotkeys") == 0) {
+ cnode->config.hotkeys = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_HOTKEYS_MASK;
+ continue;
+ }
+ if (g_strcmp0 (sub_node->name , "symbol") == 0) {
+ cnode->config.symbol = g_strdup (sub_node->text);
++ cnode->mask |= ENGINE_CONFIG_SYMBOL_MASK;
+ continue;
+ }
if (g_strcmp0 (sub_node->name , "preedit-highlight") == 0) {
if (g_ascii_strcasecmp ("TRUE", sub_node->text) == 0)
cnode->config.preedit_highlight = TRUE;
-Index: ibus-m17n-1.3.2/src/m17nutil.h
-===================================================================
---- ibus-m17n-1.3.2.orig/src/m17nutil.h
-+++ ibus-m17n-1.3.2/src/m17nutil.h
+diff --git a/src/m17nutil.h b/src/m17nutil.h
+index c7b283e..21b1bb9 100644
+--- a/src/m17nutil.h
++++ b/src/m17nutil.h
@@ -17,6 +17,12 @@ struct _IBusM17NEngineConfig {
/* keyboard layout */
gchar *layout;
@@ -621,3 +385,6 @@ Index: ibus-m17n-1.3.2/src/m17nutil.h
/* whether to highlight preedit */
gboolean preedit_highlight;
};
+--
+1.7.6.1
+
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index 9f60a37..f36777e 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -11,19 +11,26 @@
%global _with_hotkeys --with-hotkeys
%endif
+%if (0%{?fedora} > 16)
+%global _enable_eekboard --enable-eekboard
+%endif
+
Name: ibus-m17n
-Version: 1.3.2
-Release: 10%{?dist}
+Version: 1.3.3
+Release: 2%{?dist}
Summary: The M17N engine for IBus platform
License: GPLv2+
Group: System Environment/Libraries
URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
-Patch0: ibus-m17n-HEAD.patch
-Patch1: ibus-m17n-iok.patch
-Patch2: ibus-m17n-xkb-options.patch
-Patch3: ibus-m17n-xx-icon-symbol.patch
+#Patch0: ibus-m17n-HEAD.patch
+Patch1: ibus-m17n-default-xml-override.patch
+Patch2: ibus-m17n-setup-refactor.patch
+Patch3: ibus-m17n-xkb-options.patch
+Patch4: ibus-m17n-xx-icon-symbol.patch
+Patch5: ibus-m17n-virtkbd.patch
+Patch6: ibus-m17n-iok.patch
# The following BR is for autogen and not necessary when packging
# released tarballs.
@@ -39,10 +46,12 @@ BuildRequires: gtk2-devel
%endif
BuildRequires: libxklavier-devel
BuildRequires: ibus-devel >= %{require_ibus_version}
+BuildRequires: eekboard-devel
Requires: ibus >= %{require_ibus_version}
Requires: m17n-lib
-Requires: iok > 1.3.1
+Requires: eekboard
+Requires: iok
%description
M17N engine for IBus input platform. It allows input of many languages using
@@ -50,14 +59,19 @@ the input table maps from m17n-db.
%prep
%setup -q
-%patch0 -p1 -b .HEAD
-%patch1 -p1 -b .iok
-%patch2 -p1 -b .xkb-options
-%patch3 -p1 -b .xx-icon-symbol
+#patch0 -p1 -b .HEAD
+%patch1 -p1 -b .default-xml-override
+%patch2 -p1 -b .setup-refactor
+%patch3 -p1 -b .xkb-options
+# do not apply patch to m4/.gitignore
+sed -i 's!^[-+][-+][-+] .*/m4/\.gitignore!#\0!' %PATCH4
+%patch4 -p1 -b .xx-icon-symbol
+%patch5 -p1 -b .virtkbd
+%patch6 -p1 -b .iok
NOCONFIGURE=1 ./autogen.sh
%build
-%configure --disable-static %{?_with_gtk} %{?_with_hotkeys}
+%configure --disable-static %{?_with_gtk} %{?_with_hotkeys} %{?_enable_eekboard}
# make -C po update-gmo
make %{?_smp_mflags}
@@ -75,6 +89,14 @@ make DESTDIR=${RPM_BUILD_ROOT} install
%{_datadir}/ibus/component/*
%changelog
+* Fri Sep 2 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.3-2
+- Revive iok patch.
+
+* Thu Sep 1 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.3-1
+- New upstream release.
+- Add ibus-m17n-default-xml-override.patch.
+- Add ibus-m17n-virtkbd.patch, instead of ibus-m17n-iok.patch.
+
* Tue Aug 9 2011 Daiki Ueno <dueno(a)redhat.com> - 1.3.2-10
- Set symbol for m17n:ne:rom.
diff --git a/sources b/sources
index c0a12ba..8af2da5 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-4c406147318f94e5e805c408c4be075e ibus-m17n-1.3.2.tar.gz
+8fa050df5b2d25095d0e2df51946b0de ibus-m17n-1.3.3.tar.gz
12 years, 8 months
[Fedora-i18n-bugs] [ibus-m17n] Re-add iok to Requires:
by Daiki Ueno
commit a4fa07070b85f74635c81c72df90858aeade2668
Author: Daiki Ueno <ueno(a)unixuser.org>
Date: Fri Sep 2 12:12:58 2011 +0900
Re-add iok to Requires:
ibus-m17n.spec | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
---
diff --git a/ibus-m17n.spec b/ibus-m17n.spec
index 92f0516..f36777e 100644
--- a/ibus-m17n.spec
+++ b/ibus-m17n.spec
@@ -51,6 +51,7 @@ BuildRequires: eekboard-devel
Requires: ibus >= %{require_ibus_version}
Requires: m17n-lib
Requires: eekboard
+Requires: iok
%description
M17N engine for IBus input platform. It allows input of many languages using
12 years, 8 months