Use gsettings instead of ibus-config in ibus-setup and ibus-ui-gtk3.
authorfujiwarat <takao.fujiwara1@gmail.com>
Tue, 20 Aug 2013 06:01:42 +0000 (15:01 +0900)
committerfujiwarat <takao.fujiwara1@gmail.com>
Tue, 20 Aug 2013 06:01:42 +0000 (15:01 +0900)
TEST=ibus-setup and ibus-ui-gtk3

Review URL: https://codereview.appspot.com/12442044

setup/main.py
ui/gtk3/application.vala
ui/gtk3/panel.vala

index e3767dc..d3f4414 100644 (file)
@@ -25,6 +25,7 @@ import signal
 import sys
 import time
 
+from gi.repository import Gio
 from gi.repository import GLib
 from gi.repository import Gtk
 from gi.repository import IBus
@@ -66,6 +67,11 @@ class Setup(object):
     def __init__(self):
         super(Setup, self).__init__()
 
+        self.__settings_general = Gio.Settings("org.freedesktop.ibus.general");
+        self.__settings_hotkey = Gio.Settings(
+                "org.freedesktop.ibus.general.hotkey");
+        self.__settings_panel = Gio.Settings("org.freedesktop.ibus.panel");
+
         # IBus.Bus() calls ibus_bus_new().
         # Gtk.Builder().add_from_file() also calls ibus_bus_new_async()
         # via ibus_im_context_new().
@@ -84,12 +90,7 @@ class Setup(object):
     def __init_hotkey(self):
         name = 'triggers'
         label = 'switch_engine'
-        variant = self.__config.get_value('general/hotkey', name)
-        if variant != None:
-            shortcuts = variant.unpack()
-        else:
-            shortcuts =  ['<Super>space']
-
+        shortcuts = self.__settings_hotkey.get_strv(name)
         button = self.__builder.get_object("button_%s" % label)
         entry = self.__builder.get_object("entry_%s" % label)
         entry.set_text("; ".join(shortcuts))
@@ -101,93 +102,90 @@ class Setup(object):
                 name, "general/hotkey", label, entry)
 
     def __init_panel(self):
-        values = dict(self.__config.get_values("panel"))
-
         # lookup table orientation
         self.__combobox_lookup_table_orientation = self.__builder.get_object(
                 "combobox_lookup_table_orientation")
-        self.__combobox_lookup_table_orientation.set_active(
-                values.get("lookup_table_orientation", 0))
-        self.__combobox_lookup_table_orientation.connect("changed",
-                self.__combobox_lookup_table_orientation_changed_cb)
+        self.__settings_panel.bind('lookup-table-orientation',
+                                   self.__combobox_lookup_table_orientation,
+                                   'active',
+                                   Gio.SettingsBindFlags.DEFAULT)
 
         # auto hide
         self.__combobox_panel_show = self.__builder.get_object(
                 "combobox_panel_show")
-        self.__combobox_panel_show.set_active(values.get("show", 0))
-        self.__combobox_panel_show.connect("changed",
-                self.__combobox_panel_show_changed_cb)
+        self.__settings_panel.bind('show',
+                                   self.__combobox_panel_show,
+                                   'active',
+                                   Gio.SettingsBindFlags.DEFAULT)
 
         # panel position
         self.__combobox_panel_position = self.__builder.get_object(
                 "combobox_panel_position")
-        self.__combobox_panel_position.set_active(values.get("position", 3))
-        self.__combobox_panel_position.connect("changed",
-                self.__combobox_panel_position_changed_cb)
+        self.__combobox_panel_position.set_active(3)
+        #self.__settings_panel.bind('position',
+        #                           self.__combobox_panel_position,
+        #                           'active',
+        #                           Gio.SettingsBindFlags.DEFAULT)
 
         # custom font
         self.__checkbutton_custom_font = self.__builder.get_object(
                 "checkbutton_custom_font")
-        self.__checkbutton_custom_font.set_active(
-                values.get("use_custom_font", False))
-        self.__checkbutton_custom_font.connect("toggled",
-                self.__checkbutton_custom_font_toggled_cb)
+        self.__settings_panel.bind('use-custom-font',
+                                   self.__checkbutton_custom_font,
+                                   'active',
+                                   Gio.SettingsBindFlags.DEFAULT)
 
         self.__fontbutton_custom_font = self.__builder.get_object(
                 "fontbutton_custom_font")
-        if values.get("use_custom_font", False):
-            self.__fontbutton_custom_font.set_sensitive(True)
-        else:
-            self.__fontbutton_custom_font.set_sensitive(False)
-        font_name = Gtk.Settings.get_default().get_property("gtk-font-name")
-        font_name = unicode(font_name, "utf-8")
-        font_name = values.get("custom_font", font_name)
-        self.__fontbutton_custom_font.connect("notify::font-name",
-                self.__fontbutton_custom_font_notify_cb)
-        self.__fontbutton_custom_font.set_font_name(font_name)
+        self.__settings_panel.bind('custom-font',
+                                    self.__fontbutton_custom_font,
+                                   'font-name',
+                                   Gio.SettingsBindFlags.DEFAULT)
+        self.__settings_panel.bind('use-custom-font',
+                                    self.__fontbutton_custom_font,
+                                   'sensitive',
+                                   Gio.SettingsBindFlags.GET)
 
         # show icon on system tray
         self.__checkbutton_show_icon_on_systray = self.__builder.get_object(
                 "checkbutton_show_icon_on_systray")
-        self.__checkbutton_show_icon_on_systray.set_active(
-                values.get("show_icon_on_systray", True))
-        self.__checkbutton_show_icon_on_systray.connect("toggled",
-                self.__checkbutton_show_icon_on_systray_toggled_cb)
+        self.__settings_panel.bind('show-icon-on-systray',
+                                   self.__checkbutton_show_icon_on_systray,
+                                   'active',
+                                   Gio.SettingsBindFlags.DEFAULT)
 
         # show ime name
         self.__checkbutton_show_im_name = self.__builder.get_object(
                 "checkbutton_show_im_name")
-        self.__checkbutton_show_im_name.set_active(
-                values.get("show_im_name", False))
-        self.__checkbutton_show_im_name.connect("toggled",
-                self.__checkbutton_show_im_name_toggled_cb)
+        self.__settings_panel.bind('show-im-name',
+                                   self.__checkbutton_show_im_name,
+                                   'active',
+                                   Gio.SettingsBindFlags.DEFAULT)
 
     def __init_general(self):
-        values = dict(self.__config.get_values("general"))
-
         # embed preedit text
         self.__checkbutton_embed_preedit_text = self.__builder.get_object(
                 "checkbutton_embed_preedit_text")
-        self.__checkbutton_embed_preedit_text.set_active(
-                values.get("embed_preedit_text", True))
-        self.__checkbutton_embed_preedit_text.connect("toggled",
-                self.__checkbutton_embed_preedit_text_toggled_cb)
+        self.__settings_general.bind('embed-preedit-text',
+                                    self.__checkbutton_embed_preedit_text,
+                                    'active',
+                                    Gio.SettingsBindFlags.DEFAULT)
 
         # use system keyboard layout setting
         self.__checkbutton_use_sys_layout = self.__builder.get_object(
                 "checkbutton_use_sys_layout")
-        self.__checkbutton_use_sys_layout.set_active(
-                values.get("use_system_keyboard_layout", True))
-        self.__checkbutton_use_sys_layout.connect("toggled",
-                self.__checkbutton_use_sys_layout_toggled_cb)
+        self.__settings_general.bind('use-system-keyboard-layout',
+                                    self.__checkbutton_use_sys_layout,
+                                    'active',
+                                    Gio.SettingsBindFlags.DEFAULT)
 
         # use global ime setting
         self.__checkbutton_use_global_engine = self.__builder.get_object(
                 "checkbutton_use_global_engine")
-        self.__checkbutton_use_global_engine.set_active(
-                values.get("use_global_engine", False))
-        self.__checkbutton_use_global_engine.connect("toggled",
-                self.__checkbutton_use_global_engine_toggled_cb)
+        self.__settings_general.bind('use-global-engine',
+                                    self.__checkbutton_use_global_engine,
+                                    'active',
+                                    Gio.SettingsBindFlags.DEFAULT)
 
         # init engine page
         self.__engines = self.__bus.list_engines()
@@ -197,7 +195,7 @@ class Setup(object):
         tmp_dict = {}
         for e in self.__engines:
             tmp_dict[e.get_name()] = e
-        engine_names = values.get("preload_engines", [])
+        engine_names = self.__settings_general.get_strv('preload-engines')
         engines = [tmp_dict[name] for name in engine_names if name in tmp_dict]
 
         self.__treeview = self.__builder.get_object("treeview_engines")
@@ -241,8 +239,6 @@ class Setup(object):
         self.__checkbutton_auto_start.connect("toggled",
                 self.__checkbutton_auto_start_toggled_cb)
 
-        self.__config = self.__bus.get_config()
-
         self.__init_hotkey()
         self.__init_panel()
         self.__init_general()
@@ -291,8 +287,7 @@ class Setup(object):
 
         if prop.name == "engines":
             engine_names = map(lambda e: e.get_name(), engines)
-            value = GLib.Variant.new_strv(engine_names)
-            self.__config.set_value("general", "preload_engines", value)
+            self.__settings_general.set_strv('preload-engines', engine_names)
 
     def __button_engine_add_cb(self, button):
         engine = self.__combobox.get_active_engine()
@@ -389,7 +384,7 @@ class Setup(object):
         dialog.destroy()
         if id != Gtk.ResponseType.OK:
             return
-        self.__config.set_value(section, name, GLib.Variant.new_strv(shortcuts))
+        self.__settings_hotkey.set_strv(name, shortcuts)
         text = "; ".join(shortcuts)
         entry.set_text(text)
         tooltip = "\n".join(shortcuts)
@@ -443,13 +438,13 @@ class Setup(object):
         if data[DATA_PRELOAD]:
             if engine not in self.__preload_engines:
                 self.__preload_engines.add(engine)
-                value = GLib.Variant.new_strv(list(self.__preload_engines))
-                self.__config.set_value("general", "preload_engines", value)
+                self.__settings_general.set_strv('preload-engines',
+                                                 list(self.__preload_engines))
         else:
             if engine in self.__preload_engines:
                 self.__preload_engines.remove(engine)
-                value = GLib.Variant.new_strv(list(self.__preload_engines))
-                self.__config.set_value("general", "preload_engines", value)
+                self.__settings_general.set_strv('preload-engines',
+                                                 list(self.__preload_engines))
 
         # set new value
         model.set(iter, COLUMN_PRELOAD, data[DATA_PRELOAD])
@@ -485,68 +480,6 @@ class Setup(object):
         if self.__checkbutton_auto_start.get_active():
             os.symlink(ibus_desktop, link_file)
 
-    def __combobox_lookup_table_orientation_changed_cb(self, combobox):
-        self.__config.set_value(
-                "panel", "lookup_table_orientation",
-                GLib.Variant.new_int32(self.__combobox_lookup_table_orientation.get_active()))
-
-    def __combobox_panel_show_changed_cb(self, combobox):
-        self.__config.set_value(
-                "panel", "show",
-                GLib.Variant.new_int32(self.__combobox_panel_show.get_active()))
-
-    def __combobox_panel_position_changed_cb(self, combobox):
-        self.__config.set_value(
-                "panel", "position",
-                GLib.Variant.new_int32(self.__combobox_panel_position.get_active()))
-
-    def __checkbutton_custom_font_toggled_cb(self, button):
-        if self.__checkbutton_custom_font.get_active():
-            self.__fontbutton_custom_font.set_sensitive(True)
-            self.__config.set_value("panel", "use_custom_font",
-                    GLib.Variant.new_boolean(True))
-        else:
-            self.__fontbutton_custom_font.set_sensitive(False)
-            self.__config.set_value("panel", "use_custom_font",
-                    GLib.Variant.new_boolean(False))
-
-    def __fontbutton_custom_font_notify_cb(self, button, arg):
-        font_name = self.__fontbutton_custom_font.get_font_name()
-        font_name = unicode(font_name, "utf-8")
-        self.__config.set_value("panel", "custom_font",
-                GLib.Variant.new_string(font_name))
-
-    def __checkbutton_show_icon_on_systray_toggled_cb(self, button):
-        value = self.__checkbutton_show_icon_on_systray.get_active()
-        value = GLib.Variant.new_boolean(value)
-        self.__config.set_value("panel", "show_icon_on_systray", value)
-
-    def __checkbutton_show_im_name_toggled_cb(self, button):
-        value = self.__checkbutton_show_im_name.get_active()
-        value = GLib.Variant.new_boolean(value)
-        self.__config.set_value("panel", "show_im_name", value)
-
-    def __checkbutton_embed_preedit_text_toggled_cb(self, button):
-        value = self.__checkbutton_embed_preedit_text.get_active()
-        value = GLib.Variant.new_boolean(value)
-        self.__config.set_value("general", "embed_preedit_text", value)
-
-    def __checkbutton_use_sys_layout_toggled_cb(self, button):
-        value = self.__checkbutton_use_sys_layout.get_active()
-        value = GLib.Variant.new_boolean(value)
-        self.__config.set_value("general", "use_system_keyboard_layout", value)
-
-    def __checkbutton_use_global_engine_toggled_cb(self, button):
-        value = self.__checkbutton_use_global_engine.get_active()
-        value = GLib.Variant.new_boolean(value)
-        self.__config.set_value("general", "use_global_engine", value)
-
-    def __config_value_changed_cb(self, bus, section, name, value):
-        pass
-
-    def __config_reloaded_cb(self, bus):
-        pass
-
     def __sigusr1_cb(self, *args):
         self.__window.present()
 
index 71309e0..5ae6e83 100644 (file)
@@ -23,7 +23,6 @@
 class Application {
     private IBus.Bus m_bus;
     private Panel m_panel;
-    private IBus.Config m_config;
 
     public Application(string[] argv) {
         GLib.Intl.bindtextdomain(Config.GETTEXT_PACKAGE,
@@ -62,15 +61,6 @@ class Application {
                 IBus.BusNameFlag.ALLOW_REPLACEMENT |
                 IBus.BusNameFlag.REPLACE_EXISTING;
         m_bus.request_name(IBus.SERVICE_PANEL, flags);
-
-        m_config = m_bus.get_config();
-        connection.signal_subscribe("org.freedesktop.DBus",
-                                    "org.freedesktop.DBus",
-                                    "NameOwnerChanged",
-                                    "/org/freedesktop/DBus",
-                                    IBus.SERVICE_CONFIG,
-                                    DBusSignalFlags.NONE,
-                                    config_name_owner_changed_cb);
     }
 
     public int run() {
@@ -86,10 +76,7 @@ class Application {
                                       Variant parameters) {
         debug("signal_name = %s", signal_name);
         m_panel = new Panel(m_bus);
-
-        if (m_config != null) {
-            m_panel.set_config(m_config);
-        }
+        m_panel.load_settings();
     }
 
     private void bus_name_lost_cb(DBusConnection connection,
@@ -102,25 +89,6 @@ class Application {
         m_panel = null;
     }
 
-    private void config_name_owner_changed_cb(DBusConnection connection,
-                                              string sender_name,
-                                              string object_path,
-                                              string interface_name,
-                                              string signal_name,
-                                              Variant parameters) {
-        debug("signal_name = %s", signal_name);
-        string name, new_owner, old_owner;
-        parameters.get("(sss)", out name, out old_owner, out new_owner);
-
-        if (new_owner == "") {
-            m_config = null;
-        } else {
-            m_config = m_bus.get_config();
-        }
-        if (m_panel != null)
-            m_panel.set_config(m_config);
-    }
-
     private void bus_disconnected(IBus.Bus bus) {
         debug("connection is lost.");
         Gtk.main_quit();
index 3821b3c..8e23bf9 100644 (file)
@@ -36,7 +36,9 @@ class Panel : IBus.PanelService {
     }
 
     private IBus.Bus m_bus;
-    private IBus.Config m_config;
+    private GLib.Settings m_settings_general = null;
+    private GLib.Settings m_settings_hotkey = null;
+    private GLib.Settings m_settings_panel = null;
     private Gtk.StatusIcon m_status_icon;
     private Gtk.Menu m_ime_menu;
     private Gtk.Menu m_sys_menu;
@@ -49,7 +51,6 @@ class Panel : IBus.PanelService {
     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 = "<Super>space";
 
     private GLib.List<Keybinding> m_keybindings = new GLib.List<Keybinding>();
 
@@ -61,6 +62,8 @@ class Panel : IBus.PanelService {
 
         m_bus = bus;
 
+        init_settings();
+
         // init ui
         m_status_icon = new Gtk.StatusIcon();
         m_status_icon.set_name("ibus-ui-gtk");
@@ -75,7 +78,7 @@ class Panel : IBus.PanelService {
 
         m_switcher = new Switcher();
         // The initial shortcut is "<Super>space"
-        bind_switch_shortcut(null);
+        bind_switch_shortcut();
 
         if (m_switcher_delay_time >= 0) {
             m_switcher.set_popup_delay_time((uint) m_switcher_delay_time);
@@ -93,6 +96,44 @@ class Panel : IBus.PanelService {
         unbind_switch_shortcut();
     }
 
+    private void init_settings() {
+        m_settings_general = new GLib.Settings("org.freedesktop.ibus.general");
+        m_settings_hotkey =
+                new GLib.Settings("org.freedesktop.ibus.general.hotkey");
+        m_settings_panel = new GLib.Settings("org.freedesktop.ibus.panel");
+
+        m_settings_general.changed["preload-engines"].connect((key) => {
+                update_engines(m_settings_general.get_strv(key),
+                               null);
+        });
+
+        m_settings_general.changed["switcher-delay-time"].connect((key) => {
+                set_switcher_delay_time();
+        });
+
+        m_settings_general.changed["use-system-keyboard-layout"].connect(
+            (key) => {
+                set_use_system_keyboard_layout();
+        });
+
+        m_settings_general.changed["embed-preedit-text"].connect((key) => {
+                set_embed_preedit_text();
+        });
+
+        m_settings_hotkey.changed["triggers"].connect((key) => {
+                unbind_switch_shortcut();
+                bind_switch_shortcut();
+        });
+
+        m_settings_panel.changed["custom-font"].connect((key) => {
+                set_custom_font();
+        });
+
+        m_settings_panel.changed["use-custom-font"].connect((key) => {
+                set_custom_font();
+        });
+    }
+
     private void keybinding_manager_bind(KeybindingManager keybinding_manager,
                                          string?           accelerator) {
         uint switch_keysym = 0;
@@ -152,20 +193,8 @@ class Panel : IBus.PanelService {
                 (e) => handle_engine_switch(e, true));
     }
 
-    private void bind_switch_shortcut(Variant? variant) {
-        string[] accelerators = {};
-        Variant var_trigger = variant;
-
-        if (var_trigger == null && m_config != null) {
-            var_trigger = m_config.get_value("general/hotkey",
-                                             "triggers");
-        }
-
-        if (var_trigger != null) {
-            accelerators = var_trigger.dup_strv();
-        } else {
-            accelerators += ACCELERATOR_SWITCH_IME_FOREWARD;
-        }
+    private void bind_switch_shortcut() {
+        string[] accelerators = m_settings_hotkey.get_strv("triggers");
 
         var keybinding_manager = KeybindingManager.get_instance();
 
@@ -200,13 +229,7 @@ class Panel : IBus.PanelService {
             return;
         }
 
-        bool use_custom_font = false;
-        GLib.Variant var_use_custom_font = m_config.get_value("panel",
-                                                              "use_custom_font");
-
-        if (var_use_custom_font != null) {
-            use_custom_font = var_use_custom_font.get_boolean();
-        }
+        bool use_custom_font = m_settings_panel.get_boolean("use-custom-font");
 
         if (m_css_provider != null) {
             Gtk.StyleContext.remove_provider_for_screen(screen,
@@ -218,15 +241,10 @@ class Panel : IBus.PanelService {
             return;
         }
 
-        string font_name = null;
-        GLib.Variant var_custom_font = m_config.get_value("panel",
-                                                          "custom_font");
-        if (var_custom_font != null) {
-            font_name = var_custom_font.dup_string();
-        }
+        string font_name = m_settings_panel.get_string("custom-font");
 
         if (font_name == null) {
-            warning("No config panel:custom_font.");
+            warning("No config panel:custom-font.");
             return;
         }
 
@@ -247,55 +265,29 @@ class Panel : IBus.PanelService {
                                                  Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
     }
 
-    private void set_switcher_delay_time(Variant? variant) {
-        Variant var_switcher_delay_time = variant;
-
-        if (var_switcher_delay_time == null) {
-            var_switcher_delay_time = m_config.get_value("general",
-                                                         "switcher-delay-time");
-        }
-
-        if (var_switcher_delay_time == null) {
-            return;
-        }
-
-        m_switcher_delay_time = var_switcher_delay_time.get_int32();
+    private void set_switcher_delay_time() {
+        m_switcher_delay_time =
+                m_settings_general.get_int("switcher-delay-time");
 
         if (m_switcher_delay_time >= 0) {
             m_switcher.set_popup_delay_time((uint) m_switcher_delay_time);
         }
     }
 
-    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();
+    private void set_use_system_keyboard_layout() {
+        m_use_system_keyboard_layout =
+                m_settings_general.get_boolean("use-system-keyboard-layout");
     }
 
-    private void set_embed_preedit_text(Variant? variant) {
-        Variant var_embed_preedit = variant;
-
-        if (var_embed_preedit == null) {
-            var_embed_preedit = m_config.get_value("general",
-                                                   "embed_preedit_text");
-        }
+    private void set_embed_preedit_text() {
+        Variant variant =
+                    m_settings_general.get_value("embed-preedit-text");
 
-        if (var_embed_preedit == null) {
+        if (variant == null) {
             return;
         }
 
-        m_bus.set_ibus_property("EmbedPreeditText",
-                                var_embed_preedit);
+        m_bus.set_ibus_property("EmbedPreeditText", variant);
     }
 
     private int compare_versions(string version1, string version2) {
@@ -362,15 +354,9 @@ class Panel : IBus.PanelService {
     }
 
     private void set_version() {
-        Variant var_prev_version = m_config.get_value("general", "version");
-        Variant var_current_version = null;
-        string prev_version = "".dup();
+        string prev_version = m_settings_general.get_string("version");
         string current_version = null;
 
-        if (var_prev_version != null) {
-            prev_version = var_prev_version.dup_string();
-        }
-
         if (compare_versions(prev_version, "1.5.3") < 0) {
             update_version_1_5_3();
         }
@@ -383,43 +369,22 @@ class Panel : IBus.PanelService {
             return;
         }
 
-        var_current_version = new Variant.string(current_version);
-        m_config.set_value("general", "version", var_current_version);
-    }
-
-    public void set_config(IBus.Config config) {
-        if (m_config != null) {
-            m_config.value_changed.disconnect(config_value_changed_cb);
-            m_config.watch(null, null);
-            m_config = null;
-        }
-
-        m_config = config;
-        if (m_config != null) {
-            m_config.value_changed.connect(config_value_changed_cb);
-            m_config.watch("general", "preload_engines");
-            m_config.watch("general", "embed_preedit_text");
-            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");
-            // 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_embed_preedit_text(null);
-            set_custom_font();
-
-            set_version();
-        } else {
-            update_engines(null, null);
-        }
+        m_settings_general.set_string("version", current_version);
+    }
+
+    public void load_settings() {
+        // Update m_use_system_keyboard_layout before update_engines()
+        // is called.
+        set_use_system_keyboard_layout();
+        update_engines(m_settings_general.get_strv("preload-engines"),
+                       m_settings_general.get_strv("engines-order"));
+        unbind_switch_shortcut();
+        bind_switch_shortcut();
+        set_switcher_delay_time();
+        set_embed_preedit_text();
+        set_custom_font();
+
+        set_version();
     }
 
     private void exec_setxkbmap(IBus.EngineDesc engine) {
@@ -486,43 +451,6 @@ class Panel : IBus.PanelService {
         }
     }
 
-    private void config_value_changed_cb(IBus.Config config,
-                                         string section,
-                                         string name,
-                                         Variant variant) {
-        if (section == "general" && name == "preload_engines") {
-            update_engines(variant, null);
-            return;
-        }
-
-        if (section == "general/hotkey" && name == "triggers") {
-            unbind_switch_shortcut();
-            bind_switch_shortcut(variant);
-            return;
-        }
-
-        if (section == "panel" && (name == "custom_font" ||
-                                   name == "use_custom_font")) {
-            set_custom_font();
-            return;
-        }
-
-        if (section == "general" && name == "switcher_delay_time") {
-            set_switcher_delay_time(variant);
-            return;
-        }
-
-        if (section == "general" && name == "use_system_keyboard_layout") {
-            set_use_system_keyboard_layout(variant);
-            return;
-        }
-
-        if (section == "general" && name == "embed_preedit_text") {
-            set_embed_preedit_text(variant);
-            return;
-        }
-    }
-
     private void handle_engine_switch(Gdk.Event event, bool revert) {
         // Do not need switch IME
         if (m_engines.length <= 1)
@@ -567,18 +495,13 @@ class Panel : IBus.PanelService {
         m_bus.preload_engines_async(names, -1, null);
     }
 
-    private void update_engines(GLib.Variant? var_engines,
-                                GLib.Variant? var_order) {
-        string[] engine_names = null;
+    private void update_engines(string[]? unowned_engine_names,
+                                string[]? order_names) {
+        string[]? engine_names = unowned_engine_names;
 
-        if (var_engines != null)
-            engine_names = var_engines.dup_strv();
         if (engine_names == null || engine_names.length == 0)
             engine_names = {"xkb:us::eng"};
 
-        string[] order_names =
-            (var_order != null) ? var_order.dup_strv() : null;
-
         string[] names = {};
 
         foreach (var name in order_names) {
@@ -851,9 +774,6 @@ class Panel : IBus.PanelService {
         foreach(var desc in m_engines) {
             names += desc.get_name();
         }
-        if (m_config != null)
-            m_config.set_value("general",
-                               "engines_order",
-                               new GLib.Variant.strv(names));
+        m_settings_general.set_strv("engines-order", names);
     }
 }