Launch the second ibus engine too to reduce the launching time.
[platform/upstream/ibus.git] / ui / gtk3 / panel.vala
index 9f6e5e3..0d7a5b2 100644 (file)
@@ -299,12 +299,14 @@ class Panel : IBus.PanelService {
             m_config.watch("general/hotkey", "triggers");
             m_config.watch("panel", "custom_font");
             m_config.watch("panel", "use_custom_font");
+            // Update m_use_system_keyboard_layout before update_engines()
+            // is called.
+            set_use_system_keyboard_layout(null);
             update_engines(m_config.get_value("general", "preload_engines"),
                            m_config.get_value("general", "engines_order"));
             unbind_switch_shortcut();
             bind_switch_shortcut(null);
             set_switcher_delay_time(null);
-            set_use_system_keyboard_layout(null);
         } else {
             update_engines(null, null);
         }
@@ -441,6 +443,17 @@ class Panel : IBus.PanelService {
         }
     }
 
+    private void run_preload_engines(IBus.EngineDesc[] engines, int index) {
+        string[] names = {};
+
+        if (engines.length <= index) {
+            return;
+        }
+
+        names += engines[index].get_name();
+        m_bus.preload_engines_async(names, -1, null);
+    }
+
     private void update_engines(GLib.Variant? var_engines,
                                 GLib.Variant? var_order) {
         string[] engine_names = null;
@@ -471,6 +484,7 @@ class Panel : IBus.PanelService {
         if (m_engines.length == 0) {
             m_engines = engines;
             switch_engine(0, true);
+            run_preload_engines(engines, 1);
         } else {
             var current_engine = m_engines[0];
             m_engines = engines;
@@ -478,10 +492,16 @@ class Panel : IBus.PanelService {
             for (i = 0; i < m_engines.length; i++) {
                 if (current_engine.get_name() == engines[i].get_name()) {
                     switch_engine(i);
+                    if (i != 0) {
+                        run_preload_engines(engines, 0);
+                    } else {
+                        run_preload_engines(engines, 1);
+                    }
                     return;
                 }
             }
             switch_engine(0, true);
+            run_preload_engines(engines, 1);
         }
 
     }