Blame SOURCES/ibus-m17n-HEAD.patch

754f3e
diff --git a/autogen.sh b/autogen.sh
754f3e
index 99be006..f8bf2b0 100755
754f3e
--- a/autogen.sh
754f3e
+++ b/autogen.sh
754f3e
@@ -18,10 +18,10 @@ which gnome-autogen.sh || {
754f3e
     exit 1
754f3e
 }
754f3e
 
754f3e
-export CFLAGS="-g -O0"
754f3e
-export CXXFLAGS="$CFLAGS"
754f3e
+export CFLAGS=${CFLAGS-"-Wall"}
754f3e
+export CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
754f3e
 
754f3e
 ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4"
754f3e
 REQUIRED_AUTOMAKE_VERSION=1.10
754f3e
 
754f3e
-. gnome-autogen.sh
754f3e
+. gnome-autogen.sh "$@"
754f3e
diff --git a/configure.ac b/configure.ac
754f3e
index 0548537..30d44ff 100644
754f3e
--- a/configure.ac
754f3e
+++ b/configure.ac
754f3e
@@ -48,6 +48,7 @@ AM_PROG_CC_C_O
754f3e
 AC_PROG_CXX
754f3e
 AC_ISC_POSIX
754f3e
 AC_HEADER_STDC
754f3e
+IT_PROG_INTLTOOL([0.35.0])
754f3e
 AM_PROG_LIBTOOL
754f3e
 
754f3e
 # check ibus
754f3e
@@ -111,8 +112,6 @@ AC_CONFIG_FILES([ po/Makefile.in
754f3e
 Makefile
754f3e
 ibus-m17n.spec
754f3e
 src/Makefile
754f3e
-src/m17n.xml.in
754f3e
-src/default.xml.in
754f3e
 icons/Makefile
754f3e
 m4/Makefile
754f3e
 ])
754f3e
diff --git a/po/POTFILES.in b/po/POTFILES.in
754f3e
index a426e33..bb3bd6e 100644
754f3e
--- a/po/POTFILES.in
754f3e
+++ b/po/POTFILES.in
754f3e
@@ -1,3 +1,5 @@
754f3e
 src/engine.c
754f3e
 src/m17nutil.c
754f3e
 src/main.c
754f3e
+[type: gettext/glade]src/ibus-m17n-preferences.ui
754f3e
+src/ibus-setup-m17n.desktop.in.in
754f3e
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
754f3e
new file mode 100644
754f3e
index 0000000..3667f37
754f3e
--- /dev/null
754f3e
+++ b/po/POTFILES.skip
754f3e
@@ -0,0 +1 @@
754f3e
+src/ibus-setup-m17n.desktop.in
754f3e
diff --git a/src/Makefile.am b/src/Makefile.am
754f3e
index 39d6523..68ec953 100644
754f3e
--- a/src/Makefile.am
754f3e
+++ b/src/Makefile.am
754f3e
@@ -19,15 +19,14 @@
754f3e
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
754f3e
 
754f3e
 AM_CFLAGS = \
754f3e
-	@IBUS_CFLAGS@ \
754f3e
-	@M17N_CFLAGS@ \
754f3e
+	$(IBUS_CFLAGS) \
754f3e
+	$(M17N_CFLAGS) \
754f3e
 	-DPKGDATADIR=\"$(pkgdatadir)\" \
754f3e
 	-DLIBEXECDIR=\"$(libexecdir)\" \
754f3e
-	-DSETUPDIR=\"$(setupdir)\" \
754f3e
 	$(NULL)
754f3e
 AM_LDADD = \
754f3e
-	@IBUS_LIBS@ \
754f3e
-	@M17N_LIBS@ \
754f3e
+	$(IBUS_LIBS) \
754f3e
+	$(M17N_LIBS) \
754f3e
 	$(NULL)
754f3e
 
754f3e
 check_PROGRAMS = \
754f3e
@@ -38,6 +37,7 @@ TESTS = \
754f3e
 	$(check_PROGRAMS) \
754f3e
 	$(NULL)
754f3e
 
754f3e
+TESTS_ENVIRONMENT = IBUS_M17N_PKGDATADIR=$(builddir)
754f3e
 
754f3e
 test_m17n_SOURCES = \
754f3e
 	test.c \
754f3e
@@ -46,10 +46,13 @@ test_m17n_CFLAGS = \
754f3e
 	$(AM_CFLAGS) \
754f3e
 	$(NULL)
754f3e
 test_m17n_LDADD = \
754f3e
-	libm17ncommon.a	\
754f3e
+	libm17ncommon.la \
754f3e
 	$(AM_LDADD) \
754f3e
 	$(NULL)
754f3e
 
754f3e
+test: ibus-engine-m17n
754f3e
+	$(builddir)/ibus-engine-m17n
754f3e
+
754f3e
 libexec_PROGRAMS = ibus-engine-m17n
754f3e
 
754f3e
 noinst_LTLIBRARIES = libm17ncommon.la
754f3e
@@ -67,8 +70,8 @@ ibus_engine_m17n_SOURCES = \
754f3e
 	$(NULL)
754f3e
 ibus_engine_m17n_LDADD = \
754f3e
 	libm17ncommon.la \
754f3e
-	@IBUS_LIBS@ \
754f3e
-	@M17N_LIBS@ \
754f3e
+	$(IBUS_LIBS) \
754f3e
+	$(M17N_LIBS) \
754f3e
 	$(NULL)
754f3e
 
754f3e
 if HAVE_GTK
754f3e
@@ -78,58 +81,61 @@ ibus_setup_m17n_SOURCES = \
754f3e
 	setup.c \
754f3e
 	$(NULL)
754f3e
 ibus_setup_m17n_CFLAGS = \
754f3e
-	@GTK_CFLAGS@ \
754f3e
+	$(GTK_CFLAGS) \
754f3e
 	$(AM_CFLAGS) \
754f3e
 	$(NULL)
754f3e
 ibus_setup_m17n_LDADD = \
754f3e
 	libm17ncommon.la \
754f3e
-	@IBUS_LIBS@ \
754f3e
-	@M17N_LIBS@ \
754f3e
-	@GTK_LIBS@ \
754f3e
+	$(IBUS_LIBS) \
754f3e
+	$(M17N_LIBS) \
754f3e
+	$(GTK_LIBS) \
754f3e
 	$(NULL)
754f3e
+
754f3e
+setupdir = $(pkgdatadir)/setup
754f3e
 dist_setup_DATA = \
754f3e
 	ibus-m17n-preferences.ui \
754f3e
 	$(NULL)
754f3e
 endif
754f3e
 
754f3e
-setup_DATA = \
754f3e
+pkgdata_DATA = \
754f3e
 	default.xml \
754f3e
 	$(NULL)
754f3e
-setupdir = $(pkgdatadir)/setup
754f3e
 
754f3e
 component_DATA = \
754f3e
 	m17n.xml \
754f3e
 	$(NULL)
754f3e
-componentdir = @datadir@/ibus/component
754f3e
+componentdir = $(datadir)/ibus/component
754f3e
 
754f3e
 EXTRA_DIST = \
754f3e
-	m17n.xml.in.in \
754f3e
-	default.xml.in \
754f3e
+	m17n.xml.in \
754f3e
+	$(desktop_in_in_files) \
754f3e
 	$(NULL)
754f3e
 
754f3e
 DISTCLEANFILES = \
754f3e
 	m17n.xml.in \
754f3e
-	default.xml.in \
754f3e
 	$(NULL)
754f3e
 
754f3e
 CLEANFILES = \
754f3e
 	m17n.xml \
754f3e
-	default.xml \
754f3e
+	$(desktop_DATA)	\
754f3e
+	$(desktop_in_files) \
754f3e
 	$(NULL)
754f3e
 
754f3e
+edit = sed \
754f3e
+	-e 's|@VERSION[@]|$(VERSION)|g' \
754f3e
+	-e 's|@libexecdir[@]|$(libexecdir)|g' \
754f3e
+	-e 's|@pkgdatadir[@]|$(pkgdatadir)|g'
754f3e
+
754f3e
 m17n.xml: m17n.xml.in
754f3e
-default.xml: default.xml.in
754f3e
-
754f3e
-SUFFIXES = .xml.in .xml
754f3e
-.xml.in.xml:
754f3e
-	$(AM_V_GEN) \
754f3e
-	( \
754f3e
-		libexecdir=${libexecdir}; \
754f3e
-		pkgdatadir=${pkgdatadir}; \
754f3e
-		setupdir=${setupdir}; \
754f3e
-		s=`cat $<`; \
754f3e
-		eval "echo \"$${s}\""; \
754f3e
-	) > $@
754f3e
+	$(AM_V_GEN) $(edit) $< > $@.tmp && mv $@.tmp $@
754f3e
 
754f3e
-test: ibus-engine-m17n
754f3e
-	$(builddir)/ibus-engine-m17n
754f3e
+desktop_in_in_files = ibus-setup-m17n.desktop.in.in
754f3e
+desktop_in_files = $(desktop_in_in_files:.in.in=.in)
754f3e
+
754f3e
+$(desktop_in_files): %.desktop.in: %.desktop.in.in Makefile
754f3e
+	$(AM_V_GEN) $(edit) $< > $@.tmp && mv $@.tmp $@
754f3e
+
754f3e
+desktopdir=$(datadir)/applications
754f3e
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
754f3e
+
754f3e
+@INTLTOOL_DESKTOP_RULE@
754f3e
diff --git a/src/default.xml b/src/default.xml
754f3e
new file mode 100644
754f3e
index 0000000..ffd733a
754f3e
--- /dev/null
754f3e
+++ b/src/default.xml
754f3e
@@ -0,0 +1,434 @@
754f3e
+
754f3e
+<engines>
754f3e
+	
754f3e
+	     engine.  A "name" element in an "engine" element allows
754f3e
+	     wildcard patterns.  "engine" elements are evaluated in
754f3e
+	     first-to-last order and the latter match may override the
754f3e
+	     existing default. -->
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:*</name>
754f3e
+		<rank>0</rank>
754f3e
+		<preedit-highlight>FALSE</preedit-highlight>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:*:kbd</name>
754f3e
+		<rank>-1</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:py</name>
754f3e
+		<rank>-1</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:ja:anthy</name>
754f3e
+		<rank>-1</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:ko:han2</name>
754f3e
+		<rank>-1</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:ko:romaja</name>
754f3e
+		<rank>-1</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	     https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
754f3e
+	<engine>
754f3e
+		<name>m17n:as:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:bn:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:gu:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:hi:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:kn:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ks:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:mai:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ml:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:mr:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ne:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:or:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:pa:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sa:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sd:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:si:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ta:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:te:*</name>
754f3e
+		<rank>1</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	     language. -->
754f3e
+	<engine>
754f3e
+		<name>m17n:as:phonetic</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:bn:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:gu:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:hi:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:kn:kgp</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ks:kbd</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:mai:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ml:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:mr:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ne:rom</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:or:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:pa:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sa:harvard-kyoto</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sd:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:si:wijesekera</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ta:tamil99</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:te:inscript</name>
754f3e
+		<rank>2</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	     non-keyboard input method in Sinhala. -->
754f3e
+	<engine>
754f3e
+		<name>m17n:si:samanala</name>
754f3e
+		<rank>0</rank>
754f3e
+	</engine>
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:cangjie</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:py-b5</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:py-gb</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:py</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:quick</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:tonepy-b5</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:tonepy-gb</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:tonepy</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ja:anthy</name>
754f3e
+		<preedit-highlight>TRUE</preedit-highlight>
754f3e
+	</engine>
754f3e
+	
754f3e
+	<engine>
754f3e
+		<name>m17n:as:*</name>
754f3e
+		<symbol>অ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:bn:*</name>
754f3e
+		<symbol>বা</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:gu:*</name>
754f3e
+		<symbol>ગુ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:hi:*</name>
754f3e
+		<symbol>हिं</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:kn:*</name>
754f3e
+		<symbol>ಕ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ks:*</name>
754f3e
+		<symbol>क</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:mai:*</name>
754f3e
+		<symbol>मै</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ml:*</name>
754f3e
+		<symbol>മ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:mr:*</name>
754f3e
+		<symbol>म</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ne:*</name>
754f3e
+		<symbol>ने</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:or:*</name>
754f3e
+		<symbol>ଓ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:pa:*</name>
754f3e
+		<symbol>ਪੰ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sa:*</name>
754f3e
+		<symbol>सं</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sd:*</name>
754f3e
+		<symbol>सिं</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:si:*</name>
754f3e
+		<symbol>සි</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ta:*</name>
754f3e
+		<symbol>த</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:te:*</name>
754f3e
+		<symbol>తె</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:*:kbd</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:*:pre</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:*:post</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:am:sera</name>
754f3e
+		<symbol>አ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:bo:*</name>
754f3e
+		<symbol>ཀ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:cr:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:dv:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:eo:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:fa:*</name>
754f3e
+		<symbol>ف</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:fr:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ii:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:iu:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ja:anthy</name>
754f3e
+		<symbol>あ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:kk:*</name>
754f3e
+		<symbol>قا</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:km:*</name>
754f3e
+		<symbol>ក</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:lo:*</name>
754f3e
+		<symbol>ກ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:nsk:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:oj:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ps:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ru:*</name>
754f3e
+		<symbol>Я</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:sv:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:syrc:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:tai:*</name>
754f3e
+		<symbol>꫞</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:th:*</name>
754f3e
+		<symbol>ท</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:ur:*</name>
754f3e
+		<symbol>خ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:vi:han</name>
754f3e
+		<symbol>越</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:vi:nom*</name>
754f3e
+		<symbol>喃</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:vi:*</name>
754f3e
+		<symbol>ắ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:yi:*</name>
754f3e
+		<symbol></symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:bopomofo</name>
754f3e
+		<symbol>ㄅ</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:cangjie</name>
754f3e
+		<symbol>倉</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:pinyin</name>
754f3e
+		<symbol>PY</symbol>
754f3e
+		<longname>hanyu pinyin (m17n)</longname>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:py*</name>
754f3e
+		<symbol>拼</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:quick</name>
754f3e
+		<symbol>簡</symbol>
754f3e
+	</engine>
754f3e
+	<engine>
754f3e
+		<name>m17n:zh:tonepy*</name>
754f3e
+		<symbol>调</symbol>
754f3e
+	</engine>
754f3e
+</engines>
754f3e
diff --git a/src/default.xml.in.in b/src/default.xml.in.in
754f3e
deleted file mode 100644
754f3e
index 9f5a01e..0000000
754f3e
--- a/src/default.xml.in.in
754f3e
+++ /dev/null
754f3e
@@ -1,408 +0,0 @@
754f3e
-
754f3e
-<engines>
754f3e
-	
754f3e
-	     engine.  A "name" element in an "engine" element allows
754f3e
-	     wildcard patterns.  "engine" elements are evaluated in
754f3e
-	     first-to-last order and the latter match may override the
754f3e
-	     existing default. -->
754f3e
-	
754f3e
-	<engine>
754f3e
-		<name>m17n:*</name>
754f3e
-		<rank>0</rank>
754f3e
-		<preedit-highlight>FALSE</preedit-highlight>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	
754f3e
-	     https://bugzilla.redhat.com/show_bug.cgi?id=640896 -->
754f3e
-	<engine>
754f3e
-		<name>m17n:as:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:bn:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:gu:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:hi:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:kn:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ks:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:mai:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ml:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:mr:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ne:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:or:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:pa:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sa:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sd:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:si:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ta:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:te:*</name>
754f3e
-		<rank>1</rank>
754f3e
-	</engine>
754f3e
-	
754f3e
-	     language. -->
754f3e
-	<engine>
754f3e
-		<name>m17n:as:phonetic</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:bn:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:gu:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:hi:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:kn:kgp</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ks:kbd</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:mai:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ml:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:mr:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ne:rom</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:or:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:pa:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sa:harvard-kyoto</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sd:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:si:wijesekera</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ta:tamil99</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:te:inscript</name>
754f3e
-		<rank>2</rank>
754f3e
-	</engine>
754f3e
-	
754f3e
-	     non-keyboard input method in Sinhala. -->
754f3e
-	<engine>
754f3e
-		<name>m17n:si:samanala</name>
754f3e
-		<rank>0</rank>
754f3e
-	</engine>
754f3e
-	
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:cangjie</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:py-b5</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:py-gb</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:py</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:quick</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:tonepy-b5</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:tonepy-gb</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:tonepy</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ja:anthy</name>
754f3e
-		<preedit-highlight>TRUE</preedit-highlight>
754f3e
-	</engine>
754f3e
-	
754f3e
-	<engine>
754f3e
-		<name>m17n:as:*</name>
754f3e
-		<symbol>অ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:bn:*</name>
754f3e
-		<symbol>বা</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:gu:*</name>
754f3e
-		<symbol>ગુ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:hi:*</name>
754f3e
-		<symbol>हिं</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:kn:*</name>
754f3e
-		<symbol>ಕ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ks:*</name>
754f3e
-		<symbol>क</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:mai:*</name>
754f3e
-		<symbol>मै</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ml:*</name>
754f3e
-		<symbol>മ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:mr:*</name>
754f3e
-		<symbol>म</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ne:*</name>
754f3e
-		<symbol>ने</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:or:*</name>
754f3e
-		<symbol>ଓ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:pa:*</name>
754f3e
-		<symbol>ਪੰ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sa:*</name>
754f3e
-		<symbol>सं</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sd:*</name>
754f3e
-		<symbol>सिं</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:si:*</name>
754f3e
-		<symbol>සි</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ta:*</name>
754f3e
-		<symbol>த</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:te:*</name>
754f3e
-		<symbol>తె</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:*:kbd</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:*:pre</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:*:post</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:am:sera</name>
754f3e
-		<symbol>አ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:bo:*</name>
754f3e
-		<symbol>ཀ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:cr:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:dv:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:eo:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:fa:*</name>
754f3e
-		<symbol>ف</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:fr:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ii:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:iu:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ja:anthy</name>
754f3e
-		<symbol>あ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:kk:*</name>
754f3e
-		<symbol>قا</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:km:*</name>
754f3e
-		<symbol>ក</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:lo:*</name>
754f3e
-		<symbol>ກ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:nsk:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:oj:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ps:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ru:*</name>
754f3e
-		<symbol>Я</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:sv:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:syrc:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:tai:*</name>
754f3e
-		<symbol>꫞</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:th:*</name>
754f3e
-		<symbol>ท</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:ur:*</name>
754f3e
-		<symbol>خ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:vi:han</name>
754f3e
-		<symbol>越</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:vi:nom*</name>
754f3e
-		<symbol>喃</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:vi:*</name>
754f3e
-		<symbol>Ắ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:yi:*</name>
754f3e
-		<symbol></symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:bopomofo</name>
754f3e
-		<symbol>ㄅ</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:cangjie</name>
754f3e
-		<symbol>倉</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:pinyin</name>
754f3e
-		<symbol>PY</symbol>
754f3e
-		<longname>hanyu pinyin (m17n)</longname>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:py*</name>
754f3e
-		<symbol>拼</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:quick</name>
754f3e
-		<symbol>簡</symbol>
754f3e
-	</engine>
754f3e
-	<engine>
754f3e
-		<name>m17n:zh:tonepy*</name>
754f3e
-		<symbol>调</symbol>
754f3e
-	</engine>
754f3e
-</engines>
754f3e
diff --git a/src/engine.c b/src/engine.c
754f3e
index bd7ea0f..bcc1a71 100644
754f3e
--- a/src/engine.c
754f3e
+++ b/src/engine.c
754f3e
@@ -23,6 +23,7 @@ struct _IBusM17NEngine {
754f3e
     IBusProperty    *setup_prop;
754f3e
 #endif  /* HAVE_SETUP */
754f3e
     IBusPropList    *prop_list;
754f3e
+    IBusKeymap      *us_keymap;
754f3e
 };
754f3e
 
754f3e
 struct _IBusM17NEngineClass {
754f3e
@@ -35,6 +36,7 @@ struct _IBusM17NEngineClass {
754f3e
     gint preedit_underline;
754f3e
     IBusPreeditFocusMode preedit_focus_mode;
754f3e
     gint lookup_table_orientation;
754f3e
+    gboolean use_us_layout;
754f3e
 
754f3e
     MInputMethod *im;
754f3e
 };
754f3e
@@ -64,14 +66,6 @@ static void ibus_m17n_engine_focus_out      (IBusEngine             *engine);
754f3e
 static void ibus_m17n_engine_reset          (IBusEngine             *engine);
754f3e
 static void ibus_m17n_engine_enable         (IBusEngine             *engine);
754f3e
 static void ibus_m17n_engine_disable        (IBusEngine             *engine);
754f3e
-static void ibus_engine_set_cursor_location (IBusEngine             *engine,
754f3e
-                                             gint                    x,
754f3e
-                                             gint                    y,
754f3e
-                                             gint                    w,
754f3e
-                                             gint                    h);
754f3e
-static void ibus_m17n_engine_set_capabilities
754f3e
-                                            (IBusEngine             *engine,
754f3e
-                                             guint                   caps);
754f3e
 static void ibus_m17n_engine_page_up        (IBusEngine             *engine);
754f3e
 static void ibus_m17n_engine_page_down      (IBusEngine             *engine);
754f3e
 static void ibus_m17n_engine_cursor_up      (IBusEngine             *engine);
754f3e
@@ -80,12 +74,6 @@ static void ibus_m17n_engine_property_activate
754f3e
                                             (IBusEngine             *engine,
754f3e
                                              const gchar            *prop_name,
754f3e
                                              guint                   prop_state);
754f3e
-static void ibus_m17n_engine_property_show
754f3e
-                                            (IBusEngine             *engine,
754f3e
-                                             const gchar            *prop_name);
754f3e
-static void ibus_m17n_engine_property_hide
754f3e
-                                            (IBusEngine             *engine,
754f3e
-                                             const gchar            *prop_name);
754f3e
 
754f3e
 static void ibus_m17n_engine_commit_string
754f3e
                                             (IBusM17NEngine         *m17n,
754f3e
@@ -263,6 +251,7 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
754f3e
         IBUS_ENGINE_PREEDIT_COMMIT :
754f3e
         IBUS_ENGINE_PREEDIT_CLEAR;
754f3e
     klass->lookup_table_orientation = IBUS_ORIENTATION_SYSTEM;
754f3e
+    klass->use_us_layout = FALSE;
754f3e
 
754f3e
     ibus_m17n_engine_config_free (engine_config);
754f3e
 
754f3e
@@ -304,6 +293,14 @@ ibus_m17n_engine_class_init (IBusM17NEngineClass *klass)
754f3e
             klass->lookup_table_orientation = g_variant_get_int32 (value);
754f3e
             g_variant_unref (value);
754f3e
         }
754f3e
+
754f3e
+        value = g_variant_lookup_value (values,
754f3e
+                                        "use_us_layout",
754f3e
+                                        G_VARIANT_TYPE_BOOLEAN);
754f3e
+        if (value != NULL) {
754f3e
+            klass->use_us_layout = g_variant_get_boolean (value);
754f3e
+            g_variant_unref (value);
754f3e
+        }
754f3e
         g_variant_unref (values);
754f3e
     }
754f3e
 
754f3e
@@ -340,6 +337,8 @@ ibus_m17n_config_value_changed (IBusConfig          *config,
754f3e
             klass->preedit_underline = g_variant_get_int32 (value);
754f3e
         } else if (g_strcmp0 (name, "lookup_table_orientation") == 0) {
754f3e
             klass->lookup_table_orientation = g_variant_get_int32 (value);
754f3e
+        } else if (g_strcmp0 (name, "use_us_layout") == 0) {
754f3e
+            klass->use_us_layout = g_variant_get_boolean (value);
754f3e
         }
754f3e
     }
754f3e
 }
754f3e
@@ -384,6 +383,7 @@ ibus_m17n_engine_init (IBusM17NEngine *m17n)
754f3e
     m17n->table = ibus_lookup_table_new (9, 0, TRUE, TRUE);
754f3e
     g_object_ref_sink (m17n->table);
754f3e
     m17n->context = NULL;
754f3e
+    m17n->us_keymap = ibus_keymap_get ("us");
754f3e
 }
754f3e
 
754f3e
 static GObject*
754f3e
@@ -476,6 +476,11 @@ ibus_m17n_engine_destroy (IBusM17NEngine *m17n)
754f3e
         m17n->context = NULL;
754f3e
     }
754f3e
 
754f3e
+    if (m17n->us_keymap) {
754f3e
+        g_object_unref (m17n->us_keymap);
754f3e
+        m17n->us_keymap = NULL;
754f3e
+    }
754f3e
+
754f3e
     IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)m17n);
754f3e
 }
754f3e
 
754f3e
@@ -531,28 +536,25 @@ ibus_m17n_engine_commit_string (IBusM17NEngine *m17n,
754f3e
    Since IBus engines are supposed to be cross-platform, the code
754f3e
    should go into IBus core, instead of ibus-m17n. */
754f3e
 static MSymbol
754f3e
-ibus_m17n_key_event_to_symbol (guint keycode,
754f3e
-                               guint keyval,
754f3e
-                               guint modifiers)
754f3e
+ibus_m17n_key_event_to_symbol (IBusM17NEngine *m17n,
754f3e
+                               guint           keycode,
754f3e
+                               guint           keyval,
754f3e
+                               guint           modifiers)
754f3e
 {
754f3e
     GString *keysym;
754f3e
     MSymbol mkeysym = Mnil;
754f3e
     guint mask = 0;
754f3e
-    IBusKeymap *keymap;
754f3e
 
754f3e
     if (keyval >= IBUS_Shift_L && keyval <= IBUS_Hyper_R) {
754f3e
         return Mnil;
754f3e
     }
754f3e
 
754f3e
-    /* Here, keyval is already translated by IBUS_MOD5_MASK.  Obtain
754f3e
-       the untranslated keyval from the underlying keymap and
754f3e
-       represent the translated keyval as the form "G-
754f3e
-       keyval>", which m17n-lib accepts. */
754f3e
+    /* If keyval is already translated by IBUS_MOD5_MASK.  Try to
754f3e
+       obtain the untranslated keyval from the US keymap. */
754f3e
     if (modifiers & IBUS_MOD5_MASK) {
754f3e
-        keymap = ibus_keymap_get ("us");
754f3e
-        keyval = ibus_keymap_lookup_keysym (keymap, keycode,
754f3e
+        keyval = ibus_keymap_lookup_keysym (m17n->us_keymap,
754f3e
+                                            keycode,
754f3e
                                             modifiers & ~IBUS_MOD5_MASK);
754f3e
-        g_object_unref (keymap);
754f3e
     }
754f3e
 
754f3e
     keysym = g_string_new ("");
754f3e
@@ -656,15 +658,38 @@ ibus_m17n_engine_process_key_event (IBusEngine     *engine,
754f3e
                                     guint           modifiers)
754f3e
 {
754f3e
     IBusM17NEngine *m17n = (IBusM17NEngine *) engine;
754f3e
+    IBusM17NEngineClass *klass =
754f3e
+        (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);
754f3e
+    guint original_keyval = keyval;
754f3e
 
754f3e
     if (modifiers & IBUS_RELEASE_MASK)
754f3e
         return FALSE;
754f3e
-    MSymbol m17n_key = ibus_m17n_key_event_to_symbol (keycode, keyval, modifiers);
754f3e
 
754f3e
-    if (m17n_key == Mnil)
754f3e
-        return FALSE;
754f3e
+    if (klass->use_us_layout) {
754f3e
+        keyval = ibus_keymap_lookup_keysym (m17n->us_keymap,
754f3e
+                                            keycode,
754f3e
+                                            modifiers);
754f3e
+    }
754f3e
 
754f3e
-    return ibus_m17n_engine_process_key (m17n, m17n_key);
754f3e
+    MSymbol m17n_key = ibus_m17n_key_event_to_symbol (m17n,
754f3e
+                                                      keycode,
754f3e
+                                                      keyval,
754f3e
+                                                      modifiers);
754f3e
+    if (m17n_key != Mnil && ibus_m17n_engine_process_key (m17n, m17n_key)) {
754f3e
+        return TRUE;
754f3e
+    }
754f3e
+
754f3e
+    /* If keyval is translated in US layout, send the new keyval and
754f3e
+       notify that the event is handled. */
754f3e
+    if (keyval != original_keyval && 0x20 <= keyval && keyval < 0x7F) {
754f3e
+        gchar buf[2];
754f3e
+        buf[0] = keyval;
754f3e
+        buf[1] = '\0';
754f3e
+        ibus_m17n_engine_commit_string (m17n, buf);
754f3e
+        return TRUE;
754f3e
+    }
754f3e
+
754f3e
+    return FALSE;
754f3e
 }
754f3e
 
754f3e
 static void
754f3e
@@ -704,8 +729,6 @@ ibus_m17n_engine_reset (IBusEngine *engine)
754f3e
 static void
754f3e
 ibus_m17n_engine_enable (IBusEngine *engine)
754f3e
 {
754f3e
-    IBusM17NEngine *m17n = (IBusM17NEngine *) engine;
754f3e
-
754f3e
     parent_class->enable (engine);
754f3e
 
754f3e
     /* Issue a dummy ibus_engine_get_surrounding_text() call to tell
754f3e
@@ -716,8 +739,6 @@ ibus_m17n_engine_enable (IBusEngine *engine)
754f3e
 static void
754f3e
 ibus_m17n_engine_disable (IBusEngine *engine)
754f3e
 {
754f3e
-    IBusM17NEngine *m17n = (IBusM17NEngine *) engine;
754f3e
-
754f3e
     ibus_m17n_engine_focus_out (engine);
754f3e
     parent_class->disable (engine);
754f3e
 }
754f3e
@@ -951,7 +972,9 @@ ibus_m17n_engine_callback (MInputContext *context,
754f3e
                                           &anchor_pos);
754f3e
         nchars = ibus_text_get_length (text);
754f3e
         nbytes = g_utf8_offset_to_pointer (text->text, nchars) - text->text;
754f3e
-        mt = mconv_decode_buffer (Mcoding_utf_8, text->text, nbytes);
754f3e
+        mt = mconv_decode_buffer (Mcoding_utf_8,
754f3e
+                                  (const unsigned char *) text->text,
754f3e
+                                  nbytes);
754f3e
         g_object_unref (text);
754f3e
 
754f3e
         len = (long) mplist_value (m17n->context->plist);
754f3e
diff --git a/src/ibus-m17n-preferences.ui b/src/ibus-m17n-preferences.ui
754f3e
index a46ab49..e85fb15 100644
754f3e
--- a/src/ibus-m17n-preferences.ui
754f3e
+++ b/src/ibus-m17n-preferences.ui
754f3e
@@ -1,8 +1,8 @@
754f3e
-
754f3e
+
754f3e
 <interface>
754f3e
   <requires lib="gtk+" version="2.14"/>
754f3e
   
754f3e
-  <object class="GtkListStore" id="liststore_underline">
754f3e
+  <object class="GtkListStore" id="liststore_orientation">
754f3e
     <columns>
754f3e
       
754f3e
       <column type="gchararray"/>
754f3e
@@ -11,24 +11,20 @@
754f3e
     </columns>
754f3e
     <data>
754f3e
       <row>
754f3e
-        Single
754f3e
-        1
754f3e
-      </row>
754f3e
-      <row>
754f3e
-        Double
754f3e
+        System
754f3e
         2
754f3e
       </row>
754f3e
       <row>
754f3e
-        Low
754f3e
-        3
754f3e
+        Vertical
754f3e
+        1
754f3e
       </row>
754f3e
       <row>
754f3e
-        None
754f3e
+        Horizontal
754f3e
         0
754f3e
       </row>
754f3e
     </data>
754f3e
   </object>
754f3e
-  <object class="GtkListStore" id="liststore_orientation">
754f3e
+  <object class="GtkListStore" id="liststore_underline">
754f3e
     <columns>
754f3e
       
754f3e
       <column type="gchararray"/>
754f3e
@@ -37,32 +33,67 @@
754f3e
     </columns>
754f3e
     <data>
754f3e
       <row>
754f3e
-        System
754f3e
+        Single
754f3e
+        1
754f3e
+      </row>
754f3e
+      <row>
754f3e
+        Double
754f3e
         2
754f3e
       </row>
754f3e
       <row>
754f3e
-        Vertical
754f3e
-        1
754f3e
+        Low
754f3e
+        3
754f3e
       </row>
754f3e
       <row>
754f3e
-        Horizontal
754f3e
+        None
754f3e
         0
754f3e
       </row>
754f3e
     </data>
754f3e
   </object>
754f3e
   <object class="GtkDialog" id="dialog">
754f3e
     <property name="width_request">400</property>
754f3e
+    <property name="can_focus">False</property>
754f3e
     <property name="border_width">5</property>
754f3e
     <property name="title" translatable="yes">Preferences</property>
754f3e
     <property name="window_position">center-always</property>
754f3e
     <property name="icon_name">gtk-preferences</property>
754f3e
     <property name="type_hint">normal</property>
754f3e
-    <property name="has_separator">False</property>
754f3e
     <child internal-child="vbox">
754f3e
       <object class="GtkVBox" id="dialog-vbox1">
754f3e
         <property name="visible">True</property>
754f3e
-        <property name="orientation">vertical</property>
754f3e
+        <property name="can_focus">False</property>
754f3e
         <property name="spacing">2</property>
754f3e
+        <child internal-child="action_area">
754f3e
+          <object class="GtkHButtonBox" id="dialog-action_area1">
754f3e
+            <property name="visible">True</property>
754f3e
+            <property name="can_focus">False</property>
754f3e
+            <property name="layout_style">end</property>
754f3e
+            <child>
754f3e
+              <object class="GtkButton" id="buttonClose">
754f3e
+                <property name="label">gtk-close</property>
754f3e
+                <property name="visible">True</property>
754f3e
+                <property name="can_focus">True</property>
754f3e
+                <property name="has_focus">True</property>
754f3e
+                <property name="is_focus">True</property>
754f3e
+                <property name="can_default">True</property>
754f3e
+                <property name="has_default">True</property>
754f3e
+                <property name="receives_default">True</property>
754f3e
+                <property name="use_stock">True</property>
754f3e
+              </object>
754f3e
+              <packing>
754f3e
+                <property name="expand">False</property>
754f3e
+                <property name="fill">False</property>
754f3e
+                <property name="position">0</property>
754f3e
+              </packing>
754f3e
+            </child>
754f3e
+          </object>
754f3e
+          <packing>
754f3e
+            <property name="expand">False</property>
754f3e
+            <property name="fill">True</property>
754f3e
+            <property name="pack_type">end</property>
754f3e
+            <property name="position">0</property>
754f3e
+          </packing>
754f3e
+        </child>
754f3e
         <child>
754f3e
           <object class="GtkNotebook" id="pages">
754f3e
             <property name="visible">True</property>
754f3e
@@ -71,6 +102,7 @@
754f3e
             <child>
754f3e
               <object class="GtkAlignment" id="pageGeneral">
754f3e
                 <property name="visible">True</property>
754f3e
+                <property name="can_focus">False</property>
754f3e
                 <property name="top_padding">12</property>
754f3e
                 <property name="bottom_padding">12</property>
754f3e
                 <property name="left_padding">12</property>
754f3e
@@ -78,20 +110,23 @@
754f3e
                 <child>
754f3e
                   <object class="GtkVBox" id="vbox1">
754f3e
                     <property name="visible">True</property>
754f3e
-                    <property name="orientation">vertical</property>
754f3e
+                    <property name="can_focus">False</property>
754f3e
                     <child>
754f3e
                       <object class="GtkFrame" id="frame1">
754f3e
                         <property name="visible">True</property>
754f3e
+                        <property name="can_focus">False</property>
754f3e
                         <property name="label_xalign">0</property>
754f3e
                         <property name="shadow_type">none</property>
754f3e
                         <child>
754f3e
                           <object class="GtkAlignment" id="alignment1">
754f3e
                             <property name="visible">True</property>
754f3e
+                            <property name="can_focus">False</property>
754f3e
                             <property name="top_padding">6</property>
754f3e
                             <property name="left_padding">12</property>
754f3e
                             <child>
754f3e
                               <object class="GtkTable" id="table1">
754f3e
                                 <property name="visible">True</property>
754f3e
+                                <property name="can_focus">False</property>
754f3e
                                 <property name="n_rows">3</property>
754f3e
                                 <property name="n_columns">2</property>
754f3e
                                 <child>
754f3e
@@ -123,6 +158,7 @@
754f3e
                                 <child>
754f3e
                                   <object class="GtkComboBox" id="combobox_underline">
754f3e
                                     <property name="visible">True</property>
754f3e
+                                    <property name="can_focus">False</property>
754f3e
                                     <property name="model">liststore_underline</property>
754f3e
                                   </object>
754f3e
                                   <packing>
754f3e
@@ -157,6 +193,7 @@
754f3e
                                 <child>
754f3e
                                   <object class="GtkLabel" id="label3">
754f3e
                                     <property name="visible">True</property>
754f3e
+                                    <property name="can_focus">False</property>
754f3e
                                     <property name="label" translatable="yes">Underline:</property>
754f3e
                                   </object>
754f3e
                                   <packing>
754f3e
@@ -171,31 +208,39 @@
754f3e
                         <child type="label">
754f3e
                           <object class="GtkLabel" id="label2">
754f3e
                             <property name="visible">True</property>
754f3e
+                            <property name="can_focus">False</property>
754f3e
                             <property name="label" translatable="yes"><b>Pre-edit Appearance</b></property>
754f3e
                             <property name="use_markup">True</property>
754f3e
                           </object>
754f3e
                         </child>
754f3e
                       </object>
754f3e
                       <packing>
754f3e
+                        <property name="expand">True</property>
754f3e
+                        <property name="fill">True</property>
754f3e
                         <property name="position">0</property>
754f3e
                       </packing>
754f3e
                     </child>
754f3e
                     <child>
754f3e
                       <object class="GtkFrame" id="frame2">
754f3e
                         <property name="visible">True</property>
754f3e
+                        <property name="can_focus">False</property>
754f3e
                         <property name="label_xalign">0</property>
754f3e
                         <property name="shadow_type">none</property>
754f3e
                         <child>
754f3e
                           <object class="GtkAlignment" id="alignment2">
754f3e
                             <property name="visible">True</property>
754f3e
+                            <property name="can_focus">False</property>
754f3e
                             <property name="left_padding">12</property>
754f3e
                             <child>
754f3e
                               <object class="GtkTable" id="table2">
754f3e
                                 <property name="visible">True</property>
754f3e
+                                <property name="can_focus">False</property>
754f3e
+                                <property name="n_rows">2</property>
754f3e
                                 <property name="n_columns">2</property>
754f3e
                                 <child>
754f3e
                                   <object class="GtkLabel" id="label9">
754f3e
                                     <property name="visible">True</property>
754f3e
+                                    <property name="can_focus">False</property>
754f3e
                                     <property name="yalign">0.46000000834465027</property>
754f3e
                                     <property name="label" translatable="yes">Lookup Table Orientation: </property>
754f3e
                                   </object>
754f3e
@@ -203,6 +248,7 @@
754f3e
                                 <child>
754f3e
                                   <object class="GtkComboBox" id="combobox_orientation">
754f3e
                                     <property name="visible">True</property>
754f3e
+                                    <property name="can_focus">False</property>
754f3e
                                     <property name="model">liststore_orientation</property>
754f3e
                                   </object>
754f3e
                                   <packing>
754f3e
@@ -210,6 +256,20 @@
754f3e
                                     <property name="right_attach">2</property>
754f3e
                                   </packing>
754f3e
                                 </child>
754f3e
+                                <child>
754f3e
+                                  <object class="GtkCheckButton" id="checkbutton_use_us_layout">
754f3e
+                                    <property name="label" translatable="yes">Use US keyboard layout</property>
754f3e
+                                    <property name="visible">True</property>
754f3e
+                                    <property name="can_focus">True</property>
754f3e
+                                    <property name="receives_default">False</property>
754f3e
+                                    <property name="draw_indicator">True</property>
754f3e
+                                  </object>
754f3e
+                                  <packing>
754f3e
+                                    <property name="right_attach">2</property>
754f3e
+                                    <property name="top_attach">1</property>
754f3e
+                                    <property name="bottom_attach">2</property>
754f3e
+                                  </packing>
754f3e
+                                </child>
754f3e
                               </object>
754f3e
                             </child>
754f3e
                           </object>
754f3e
@@ -217,12 +277,15 @@
754f3e
                         <child type="label">
754f3e
                           <object class="GtkLabel" id="label8">
754f3e
                             <property name="visible">True</property>
754f3e
+                            <property name="can_focus">False</property>
754f3e
                             <property name="label" translatable="yes"><b>Other</b></property>
754f3e
                             <property name="use_markup">True</property>
754f3e
                           </object>
754f3e
                         </child>
754f3e
                       </object>
754f3e
                       <packing>
754f3e
+                        <property name="expand">True</property>
754f3e
+                        <property name="fill">True</property>
754f3e
                         <property name="position">1</property>
754f3e
                       </packing>
754f3e
                     </child>
754f3e
@@ -233,6 +296,7 @@
754f3e
             <child type="tab">
754f3e
               <object class="GtkLabel" id="label6">
754f3e
                 <property name="visible">True</property>
754f3e
+                <property name="can_focus">False</property>
754f3e
                 <property name="label" translatable="yes">General</property>
754f3e
               </object>
754f3e
               <packing>
754f3e
@@ -242,6 +306,7 @@
754f3e
             <child>
754f3e
               <object class="GtkAlignment" id="pageAdvanced">
754f3e
                 <property name="visible">True</property>
754f3e
+                <property name="can_focus">False</property>
754f3e
                 <property name="top_padding">12</property>
754f3e
                 <property name="bottom_padding">12</property>
754f3e
                 <property name="left_padding">12</property>
754f3e
@@ -249,11 +314,13 @@
754f3e
                 <child>
754f3e
                   <object class="GtkFrame" id="frame4">
754f3e
                     <property name="visible">True</property>
754f3e
+                    <property name="can_focus">False</property>
754f3e
                     <property name="label_xalign">0</property>
754f3e
                     <property name="shadow_type">none</property>
754f3e
                     <child>
754f3e
                       <object class="GtkAlignment" id="alignment7">
754f3e
                         <property name="visible">True</property>
754f3e
+                        <property name="can_focus">False</property>
754f3e
                         <property name="top_padding">6</property>
754f3e
                         <property name="left_padding">12</property>
754f3e
                         <child>
754f3e
@@ -277,6 +344,7 @@
754f3e
                     <child type="label">
754f3e
                       <object class="GtkLabel" id="label7">
754f3e
                         <property name="visible">True</property>
754f3e
+                        <property name="can_focus">False</property>
754f3e
                         <property name="label" translatable="yes"><b>m17n-lib Configuration</b></property>
754f3e
                         <property name="use_markup">True</property>
754f3e
                       </object>
754f3e
@@ -291,6 +359,7 @@
754f3e
             <child type="tab">
754f3e
               <object class="GtkLabel" id="label1">
754f3e
                 <property name="visible">True</property>
754f3e
+                <property name="can_focus">False</property>
754f3e
                 <property name="label" translatable="yes">Advanced</property>
754f3e
               </object>
754f3e
               <packing>
754f3e
@@ -300,38 +369,11 @@
754f3e
             </child>
754f3e
           </object>
754f3e
           <packing>
754f3e
+            <property name="expand">True</property>
754f3e
+            <property name="fill">True</property>
754f3e
             <property name="position">1</property>
754f3e
           </packing>
754f3e
         </child>
754f3e
-        <child internal-child="action_area">
754f3e
-          <object class="GtkHButtonBox" id="dialog-action_area1">
754f3e
-            <property name="visible">True</property>
754f3e
-            <property name="layout_style">end</property>
754f3e
-            <child>
754f3e
-              <object class="GtkButton" id="buttonClose">
754f3e
-                <property name="label">gtk-close</property>
754f3e
-                <property name="visible">True</property>
754f3e
-                <property name="can_focus">True</property>
754f3e
-                <property name="has_focus">True</property>
754f3e
-                <property name="is_focus">True</property>
754f3e
-                <property name="can_default">True</property>
754f3e
-                <property name="has_default">True</property>
754f3e
-                <property name="receives_default">True</property>
754f3e
-                <property name="use_stock">True</property>
754f3e
-              </object>
754f3e
-              <packing>
754f3e
-                <property name="expand">False</property>
754f3e
-                <property name="fill">False</property>
754f3e
-                <property name="position">0</property>
754f3e
-              </packing>
754f3e
-            </child>
754f3e
-          </object>
754f3e
-          <packing>
754f3e
-            <property name="expand">False</property>
754f3e
-            <property name="pack_type">end</property>
754f3e
-            <property name="position">0</property>
754f3e
-          </packing>
754f3e
-        </child>
754f3e
       </object>
754f3e
     </child>
754f3e
     <action-widgets>
754f3e
diff --git a/src/ibus-setup-m17n.desktop.in.in b/src/ibus-setup-m17n.desktop.in.in
754f3e
new file mode 100644
754f3e
index 0000000..a380cb3
754f3e
--- /dev/null
754f3e
+++ b/src/ibus-setup-m17n.desktop.in.in
754f3e
@@ -0,0 +1,7 @@
754f3e
+[Desktop Entry]
754f3e
+_Name=IBus M17N Setup
754f3e
+_Comment=Set up IBus M17N engine
754f3e
+Exec=@libexecdir@/ibus-setup-m17n
754f3e
+NoDisplay=true
754f3e
+Type=Application
754f3e
+StartupNotify=true
754f3e
diff --git a/src/m17n.xml.in b/src/m17n.xml.in
754f3e
new file mode 100644
754f3e
index 0000000..fc215ab
754f3e
--- /dev/null
754f3e
+++ b/src/m17n.xml.in
754f3e
@@ -0,0 +1,18 @@
754f3e
+
754f3e
+
754f3e
+<component>
754f3e
+	<name>org.freedesktop.IBus.M17N</name>
754f3e
+	<description>M17N Component</description>
754f3e
+	<exec>@libexecdir@/ibus-engine-m17n --ibus</exec>
754f3e
+	<version>@VERSION@</version>
754f3e
+	<author>Peng Huang <shawn.p.huang@gmail.com></author>
754f3e
+	<license>GPL</license>
754f3e
+	<homepage>http://code.google.com/p/ibus</homepage>
754f3e
+	<textdomain>ibus-m17n</textdomain>
754f3e
+	<observed-paths>
754f3e
+		<path>/usr/share/m17n/</path>
754f3e
+		<path>@pkgdatadir@/default.xml</path>
754f3e
+		<path>~/.m17n.d/</path>
754f3e
+	</observed-paths>
754f3e
+	<engines exec="@libexecdir@/ibus-engine-m17n --xml" />
754f3e
+</component>
754f3e
diff --git a/src/m17n.xml.in.in b/src/m17n.xml.in.in
754f3e
deleted file mode 100644
754f3e
index 2f18ad5..0000000
754f3e
--- a/src/m17n.xml.in.in
754f3e
+++ /dev/null
754f3e
@@ -1,18 +0,0 @@
754f3e
-
754f3e
-
754f3e
-<component>
754f3e
-	<name>org.freedesktop.IBus.M17N</name>
754f3e
-	<description>M17N Component</description>
754f3e
-	<exec>${libexecdir}/ibus-engine-m17n --ibus</exec>
754f3e
-	<version>@VERSION@</version>
754f3e
-	<author>Peng Huang <shawn.p.huang@gmail.com></author>
754f3e
-	<license>GPL</license>
754f3e
-	<homepage>http://code.google.com/p/ibus</homepage>
754f3e
-	<textdomain>ibus-m17n</textdomain>
754f3e
-	<observed-paths>
754f3e
-		<path>/usr/share/m17n/</path>
754f3e
-		<path>${setupdir}/default.xml</path>
754f3e
-		<path>~/.m17n.d/</path>
754f3e
-	</observed-paths>
754f3e
-	<engines exec=\"${libexecdir}/ibus-engine-m17n --xml\" />
754f3e
-</component>
754f3e
diff --git a/src/m17nutil.c b/src/m17nutil.c
754f3e
index 51026b2..d82b855 100644
754f3e
--- a/src/m17nutil.c
754f3e
+++ b/src/m17nutil.c
754f3e
@@ -11,7 +11,7 @@
754f3e
 
754f3e
 static MConverter *utf8_converter = NULL;
754f3e
 
754f3e
-#define DEFAULT_XML (SETUPDIR "/default.xml")
754f3e
+#define DEFAULT_XML (PKGDATADIR "/default.xml")
754f3e
 
754f3e
 typedef enum {
754f3e
     ENGINE_CONFIG_RANK_MASK = 1 << 0,
754f3e
@@ -53,7 +53,9 @@ ibus_m17n_mtext_to_utf8 (MText *text)
754f3e
     bufsize = (mtext_len (text) + 1) * 6;
754f3e
     buf = (gchar *) g_malloc (bufsize);
754f3e
 
754f3e
-    mconv_rebind_buffer (utf8_converter, buf, bufsize);
754f3e
+    mconv_rebind_buffer (utf8_converter,
754f3e
+                         (const unsigned char *) buf,
754f3e
+                         bufsize);
754f3e
     mconv_encode (utf8_converter, text);
754f3e
 
754f3e
     buf [utf8_converter->nbytes] = 0;
754f3e
@@ -76,7 +78,9 @@ ibus_m17n_mtext_to_ucs4 (MText *text, glong *nchars)
754f3e
     bufsize = (mtext_len (text) + 1) * 6;
754f3e
     buf = (gchar *) g_malloc (bufsize);
754f3e
 
754f3e
-    mconv_rebind_buffer (utf8_converter, buf, bufsize);
754f3e
+    mconv_rebind_buffer (utf8_converter,
754f3e
+                         (const unsigned char *) buf,
754f3e
+                         bufsize);
754f3e
     if (mconv_encode (utf8_converter, text) < 0) {
754f3e
         g_free (buf);
754f3e
         return NULL;
754f3e
@@ -133,7 +137,7 @@ ibus_m17n_engine_new (MSymbol  lang,
754f3e
                                            "language",    msymbol_name (lang),
754f3e
                                            "license",     "GPL",
754f3e
                                            "icon",        engine_icon ? engine_icon : "",
754f3e
-                                           "layout",      "us",
754f3e
+                                           "layout",      "default",
754f3e
                                            "rank",        config->rank,
754f3e
                                            "symbol",      config->symbol ? config->symbol : "",
754f3e
                                            "setup",       engine_setup,
754f3e
@@ -202,17 +206,12 @@ ibus_m17n_list_engines (void)
754f3e
             if (l) {
754f3e
                 /* check candidates encoding */
754f3e
                 MPlist *sl;
754f3e
-                MSymbol varname;
754f3e
-                MText *vardesc;
754f3e
-                MSymbol varunknown;
754f3e
                 MSymbol varcharset;
754f3e
 
754f3e
                 sl = mplist_value (l);
754f3e
-                varname  = mplist_value (sl);
754f3e
+                /* L = (VAR-NAME DESCRIPTION 'nil' VALUE) */
754f3e
                 sl = mplist_next (sl);
754f3e
-                vardesc = mplist_value (sl);
754f3e
                 sl = mplist_next (sl);
754f3e
-                varunknown = mplist_value (sl);
754f3e
                 sl = mplist_next (sl);
754f3e
                 varcharset = mplist_value (sl);
754f3e
 
754f3e
@@ -336,17 +335,24 @@ ibus_m17n_get_component (void)
754f3e
     GList *engines, *p;
754f3e
     IBusComponent *component;
754f3e
     XMLNode *node;
754f3e
+    const gchar *pkgdatadir;
754f3e
+    gchar *default_xml;
754f3e
 
754f3e
     component = ibus_component_new ("org.freedesktop.IBus.M17n",
754f3e
                                     N_("M17N"),
754f3e
-                                    "0.1.0",
754f3e
+                                    PACKAGE_VERSION,
754f3e
                                     "GPL",
754f3e
                                     "Peng Huang <shawn.p.huang@gmail.com>",
754f3e
                                     "http://code.google.com/p/ibus/",
754f3e
                                     "",
754f3e
-                                    "ibus-m17n");
754f3e
+                                    PACKAGE_NAME);
754f3e
 
754f3e
-    node = ibus_xml_parse_file (DEFAULT_XML);
754f3e
+    pkgdatadir = g_getenv ("IBUS_M17N_PKGDATADIR");
754f3e
+    if (pkgdatadir == NULL)
754f3e
+        pkgdatadir = PKGDATADIR;
754f3e
+    default_xml = g_build_filename (pkgdatadir, "default.xml", NULL);
754f3e
+
754f3e
+    node = ibus_xml_parse_file (default_xml);
754f3e
     if (node && g_strcmp0 (node->name, "engines") == 0) {
754f3e
         for (p = node->sub_nodes; p != NULL; p = p->next) {
754f3e
             XMLNode *sub_node = p->data;
754f3e
@@ -367,10 +373,12 @@ ibus_m17n_get_component (void)
754f3e
         }
754f3e
         config_list = g_slist_reverse (config_list);
754f3e
     } else
754f3e
-        g_warning ("failed to parse %s", DEFAULT_XML);
754f3e
+        g_warning ("failed to parse %s", default_xml);
754f3e
     if (node)
754f3e
         ibus_xml_free (node);
754f3e
 
754f3e
+    g_free (default_xml);
754f3e
+
754f3e
     engines = ibus_m17n_list_engines ();
754f3e
 
754f3e
     for (p = engines; p != NULL; p = p->next)
754f3e
diff --git a/src/setup.c b/src/setup.c
754f3e
index cc5cb09..513fabf 100644
754f3e
--- a/src/setup.c
754f3e
+++ b/src/setup.c
754f3e
@@ -25,6 +25,7 @@ struct _SetupDialog {
754f3e
     GtkWidget *colorbutton_foreground;
754f3e
     GtkWidget *checkbutton_background;
754f3e
     GtkWidget *colorbutton_background;
754f3e
+    GtkWidget *checkbutton_use_us_layout;
754f3e
     GtkWidget *treeview;
754f3e
     GtkListStore *store;
754f3e
 
754f3e
@@ -73,7 +74,9 @@ parse_m17n_value (MPlist *plist, gchar *text)
754f3e
     if (mplist_key (plist) == Mtext) {
754f3e
         MText *mtext;
754f3e
 
754f3e
-        mtext = mtext_from_data (text, strlen (text), MTEXT_FORMAT_UTF_8);
754f3e
+        mtext = mconv_decode_buffer (Mcoding_utf_8,
754f3e
+                                     (const unsigned char *) text,
754f3e
+                                     strlen (text));
754f3e
         value = mplist ();
754f3e
         mplist_add (value, Mtext, mtext);
754f3e
         return value;
754f3e
@@ -288,6 +291,25 @@ load_choice (GVariant    *values,
754f3e
 }
754f3e
 
754f3e
 static void
754f3e
+load_toggle (GVariant        *values,
754f3e
+             GtkToggleButton *togglebutton,
754f3e
+             const gchar     *name,
754f3e
+             gboolean         defval)
754f3e
+{
754f3e
+    GVariant *value;
754f3e
+    gboolean bvalue;
754f3e
+
754f3e
+    bvalue = defval;
754f3e
+    value = g_variant_lookup_value (values, name, G_VARIANT_TYPE_BOOLEAN);
754f3e
+    if (value != NULL) {
754f3e
+        bvalue = g_variant_get_boolean (value);
754f3e
+        g_variant_unref (value);
754f3e
+    }
754f3e
+
754f3e
+    gtk_toggle_button_set_active (togglebutton, bvalue);
754f3e
+}
754f3e
+
754f3e
+static void
754f3e
 setup_dialog_load_config (SetupDialog *dialog)
754f3e
 {
754f3e
     GVariant *values;
754f3e
@@ -336,6 +358,12 @@ setup_dialog_load_config (SetupDialog *dialog)
754f3e
                  "lookup_table_orientation",
754f3e
                  IBUS_ORIENTATION_SYSTEM);
754f3e
 
754f3e
+    /* Use US keyboard layout */
754f3e
+    load_toggle (values,
754f3e
+                 GTK_TOGGLE_BUTTON (dialog->checkbutton_use_us_layout),
754f3e
+                 "use_us_layout",
754f3e
+                 FALSE);
754f3e
+
754f3e
     /* Advanced -> m17n-lib configuration */
754f3e
     dialog->store = gtk_list_store_new (NUM_COLS,
754f3e
                                         G_TYPE_STRING,
754f3e
@@ -372,10 +400,10 @@ setup_dialog_load_config (SetupDialog *dialog)
754f3e
 static gchar *
754f3e
 _gdk_color_to_string (GdkColor *color)
754f3e
 {
754f3e
-    g_strdup_printf ("#%02X%02X%02X",
754f3e
-                     (color->red & 0xFF00) >> 8,
754f3e
-                     (color->green & 0xFF00) >> 8,
754f3e
-                     (color->blue & 0xFF00) >> 8);
754f3e
+    return g_strdup_printf ("#%02X%02X%02X",
754f3e
+                            (color->red & 0xFF00) >> 8,
754f3e
+                            (color->green & 0xFF00) >> 8,
754f3e
+                            (color->blue & 0xFF00) >> 8);
754f3e
 }
754f3e
 
754f3e
 static void
754f3e
@@ -418,6 +446,20 @@ save_choice (SetupDialog *dialog,
754f3e
     ibus_config_set_value (dialog->config, dialog->section, name, value);
754f3e
 }
754f3e
 
754f3e
+static void
754f3e
+save_toggle (SetupDialog     *dialog,
754f3e
+             GtkToggleButton *togglebutton,
754f3e
+             const gchar     *name)
754f3e
+{
754f3e
+    GVariant *value;
754f3e
+
754f3e
+    value = g_variant_new_boolean (gtk_toggle_button_get_active (togglebutton));
754f3e
+    ibus_config_set_value (dialog->config,
754f3e
+                           dialog->section,
754f3e
+                           name,
754f3e
+                           value);
754f3e
+}
754f3e
+
754f3e
 static gboolean
754f3e
 save_m17n_options (SetupDialog *dialog)
754f3e
 {
754f3e
@@ -428,7 +470,7 @@ save_m17n_options (SetupDialog *dialog)
754f3e
     gboolean retval = TRUE;
754f3e
 
754f3e
     if (!gtk_tree_model_get_iter_first (model, &iter))
754f3e
-        return;
754f3e
+        return FALSE;
754f3e
 
754f3e
     do {
754f3e
         gtk_tree_model_get (model, &iter,
754f3e
@@ -499,6 +541,9 @@ setup_dialog_save_config (SetupDialog *dialog)
754f3e
     save_choice (dialog,
754f3e
                  GTK_COMBO_BOX (dialog->combobox_orientation),
754f3e
                  "lookup_table_orientation");
754f3e
+    save_toggle (dialog,
754f3e
+                 GTK_TOGGLE_BUTTON (dialog->checkbutton_use_us_layout),
754f3e
+                 "use_us_layout");
754f3e
     save_m17n_options (dialog);
754f3e
 }
754f3e
 
754f3e
@@ -525,7 +570,7 @@ setup_dialog_new (IBusConfig *config,
754f3e
 
754f3e
     error = NULL;
754f3e
     if (gtk_builder_add_from_file (builder,
754f3e
-                                   SETUPDIR "/ibus-m17n-preferences.ui",
754f3e
+                                   PKGDATADIR "setup/ibus-m17n-preferences.ui",
754f3e
                                    &error) == 0) {
754f3e
         g_warning ("can't read ibus-m17n-preferences.ui: %s",
754f3e
                    error->message);
754f3e
@@ -547,6 +592,8 @@ setup_dialog_new (IBusConfig *config,
754f3e
     dialog->combobox_underline = GTK_WIDGET (object);
754f3e
     object = gtk_builder_get_object (builder, "combobox_orientation");
754f3e
     dialog->combobox_orientation = GTK_WIDGET (object);
754f3e
+    object = gtk_builder_get_object (builder, "checkbutton_use_us_layout");
754f3e
+    dialog->checkbutton_use_us_layout = GTK_WIDGET (object);
754f3e
     object = gtk_builder_get_object (builder, "treeview_mim_config");
754f3e
     dialog->treeview = GTK_WIDGET (object);
754f3e
 
754f3e
@@ -567,9 +614,8 @@ start (const gchar *engine_name)
754f3e
 {
754f3e
     IBusBus *bus;
754f3e
     IBusConfig *config;
754f3e
-    gchar **strv, *section;
754f3e
+    gchar **strv;
754f3e
     SetupDialog *dialog;
754f3e
-    GObject *object;
754f3e
 
754f3e
     ibus_init ();
754f3e
     ibus_m17n_init_common ();
754f3e
@@ -610,6 +656,11 @@ main (gint argc, gchar **argv)
754f3e
     g_option_context_free (context);
754f3e
 
754f3e
     gtk_init (&argc, &argv);
754f3e
+
754f3e
+    if (!opt_name) {
754f3e
+        opt_name = (gchar *) g_getenv ("IBUS_ENGINE_NAME");
754f3e
+    }
754f3e
+
754f3e
     if (!opt_name) {
754f3e
         fprintf (stderr, "can't determine IBus engine name; use --name\n");
754f3e
         exit (1);