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