import sys
import time
+from gi.repository import Gio
from gi.repository import GLib
from gi.repository import Gtk
from gi.repository import IBus
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().
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))
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()
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")
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()
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()
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)
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])
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()
}
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;
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>();
m_bus = bus;
+ init_settings();
+
// init ui
m_status_icon = new Gtk.StatusIcon();
m_status_icon.set_name("ibus-ui-gtk");
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);
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;
(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();
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,
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;
}
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) {
}
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();
}
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) {
}
}
- 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)
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) {
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);
}
}