From 4b2f6a477019b50375aba2e5f9c43e618b6905ad Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Mon, 4 Mar 2013 10:10:53 +0900 Subject: [PATCH] Implement use-system-keyboard-layout BUG=http://code.google.com/p/ibus/issues/detail?id=1558 Review URL: https://codereview.appspot.com/7414045 --- data/ibus.schemas.in | 2 +- ui/gtk3/panel.vala | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/data/ibus.schemas.in b/data/ibus.schemas.in index dbb6da8..54ccb4c 100644 --- a/data/ibus.schemas.in +++ b/data/ibus.schemas.in @@ -224,7 +224,7 @@ /desktop/ibus/general/use_system_keyboard_layout ibus bool - true + false Use system keyboard layout Use system keyboard (XKB) layout diff --git a/ui/gtk3/panel.vala b/ui/gtk3/panel.vala index 24e6b2e..9f6e5e3 100644 --- a/ui/gtk3/panel.vala +++ b/ui/gtk3/panel.vala @@ -48,6 +48,7 @@ class Panel : IBus.PanelService { private Gtk.AboutDialog m_about_dialog; private Gtk.CssProvider m_css_provider; private int m_switcher_delay_time = 400; + private bool m_use_system_keyboard_layout = false; private const string ACCELERATOR_SWITCH_IME_FOREWARD = "space"; private GLib.List m_keybindings = new GLib.List(); @@ -265,6 +266,22 @@ class Panel : IBus.PanelService { } } + private void set_use_system_keyboard_layout(Variant? variant) { + Variant var_use_system_kbd_layout = variant; + + if (var_use_system_kbd_layout == null) { + var_use_system_kbd_layout = m_config.get_value( + "general", + "use_system_keyboard_layout"); + } + + if (var_use_system_kbd_layout == null) { + return; + } + + m_use_system_keyboard_layout = var_use_system_kbd_layout.get_boolean(); + } + public void set_config(IBus.Config config) { if (m_config != null) { m_config.value_changed.disconnect(config_value_changed_cb); @@ -278,6 +295,7 @@ class Panel : IBus.PanelService { m_config.watch("general", "preload_engines"); m_config.watch("general", "engines_order"); m_config.watch("general", "switcher_delay_time"); + m_config.watch("general", "use_system_keyboard_layout"); m_config.watch("general/hotkey", "triggers"); m_config.watch("panel", "custom_font"); m_config.watch("panel", "use_custom_font"); @@ -286,6 +304,7 @@ class Panel : IBus.PanelService { unbind_switch_shortcut(); bind_switch_shortcut(null); set_switcher_delay_time(null); + set_use_system_keyboard_layout(null); } else { update_engines(null, null); } @@ -352,7 +371,9 @@ class Panel : IBus.PanelService { return; } // set xkb layout - exec_setxkbmap(engine); + if (!m_use_system_keyboard_layout) { + exec_setxkbmap(engine); + } } private void config_value_changed_cb(IBus.Config config, @@ -380,6 +401,11 @@ class Panel : IBus.PanelService { set_switcher_delay_time(variant); return; } + + if (section == "general" && name == "use_system_keyboard_layout") { + set_use_system_keyboard_layout(variant); + return; + } } private void handle_engine_switch(Gdk.Event event, bool revert) { -- 2.7.4