ibus->keymap = ibus_keymap_get ("us");
- ibus->use_sys_layout = FALSE;
+ ibus->use_sys_layout = TRUE;
ibus->embed_preedit_text = TRUE;
ibus->enable_by_default = TRUE;
ibus->use_global_engine = TRUE;
<license>GPL</license>
<homepage>http://code.google.com/p/ibus</homepage>
<textdomain>ibus</textdomain>
+ <engines>
+ <engine>
+ <name>xkb:layout:us</name>
+ <language>en</language>
+ <license>GPL</license>
+ <author>Peng Huang <shawn.p.huang@gmail.com></author>
+ <layout>us</layout>
+ <longname>English (United States)</longname>
+ <description>English (United States)</description>
+ <rank>99</rank>
+ </engine>
+ <engine>
+ <name>xkb:layout:us-intl</name>
+ <language>en</language>
+ <license>GPL</license>
+ <author>Peng Huang <shawn.p.huang@gmail.com></author>
+ <layout>us(intl)</layout>
+ <longname>English (United States)</longname>
+ <description>English (United States)</description>
+ <rank>99</rank>
+ </engine>
+ <engine>
+ <name>xkb:layout:fr</name>
+ <language>fr</language>
+ <license>GPL</license>
+ <author>Peng Huang <shawn.p.huang@gmail.com></author>
+ <layout>fr</layout>
+ <longname>France</longname>
+ <description>France</description>
+ <rank>99</rank>
+ </engine>
+ </engines>
</component>
IBusComposeTable *table,
gint n_compose)
{
+ g_debug("check_table");
IBusEngineSimplePrivate *priv = simple->priv;
gint row_stride = table->max_seq_len + 2;
guint16 *seq;
if (check_table (simple,
(IBusComposeTable *)list->data,
n_compose)) {
+ g_debug("check_table returns true");
return TRUE;
}
list = list->next;
}
m_engines[0] = tmp;
- m_bus.set_global_engine(m_engines[0].get_name());
+ switch_engine_by_desc(m_engines[0]);
}
private void handle_engine_switch(Gdk.Event event, bool revert) {
if (variant != null)
engine_names = variant.dup_strv();
else
- engine_names = {"xkb:us:eng", "pinyin", "anthy"};
+ engine_names = {"xkb:layout:us", "pinyin", "anthy"};
m_engines = m_bus.get_engines_by_names(engine_names);
m_ime_menu = null;
Gtk.get_current_event_time());
}
+ private void switch_engine_by_desc(IBus.EngineDesc engine) {
+ if (!m_bus.set_global_engine(engine.get_name())) {
+ warning("Switch engine to %s failed.", engine.get_name());
+ return;
+ }
+ // set xkb layout
+ string cmdline = "setxkbmap %s".printf(engine.get_layout());
+ try {
+ if (!GLib.Process.spawn_command_line_sync(cmdline)) {
+ warning("Switch xkb layout to %s failed.",
+ engine.get_layout());
+ }
+ } catch (GLib.SpawnError e) {
+ warning("execute setxkblayout failed");
+ }
+ }
+
private void status_icon_activate(Gtk.StatusIcon status_icon) {
if (m_ime_menu == null) {
int width, height;
// https://bugzilla.gnome.org/show_bug.cgi?id=628336
var e = engine;
item.activate.connect((i) => {
- m_bus.set_global_engine(e.get_name());
+ switch_engine_by_desc(e);
});
m_ime_menu.add(item);
}