diff --git a/setup/ibus-setup-hangul.desktop.in b/setup/ibus-setup-hangul.desktop.in index a956593..882abbc 100644 --- a/setup/ibus-setup-hangul.desktop.in +++ b/setup/ibus-setup-hangul.desktop.in @@ -4,6 +4,7 @@ _Name=IBus Hangul Preferences _Comment=Set IBus Hangul Preferences Exec=ibus-setup-hangul Icon=ibus-setup-hangul +NoDisplay=true Terminal=false Type=Application StartupNotify=true diff --git a/setup/keycapturedialog.py b/setup/keycapturedialog.py index a6c9cff..a431221 100644 --- a/setup/keycapturedialog.py +++ b/setup/keycapturedialog.py @@ -1,42 +1,42 @@ -import gtk -import gtk.gdk as gdk +from gi.repository import Gtk +from gi.repository import Gdk import gettext _ = lambda a : gettext.dgettext("ibus-hangul", a) class KeyCaptureDialog (): def __init__ (self, title, parent): - self.__key_str = '' - self.__dialog = gtk.MessageDialog(parent, - gtk.DIALOG_MODAL, - gtk.MESSAGE_INFO, - gtk.BUTTONS_OK_CANCEL, - "") - self.__dialog.set_markup(_("Press any key which you want to use as hanja key. " + self.__key_str = '' + self.__dialog = Gtk.MessageDialog(parent, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.INFO, + Gtk.ButtonsType.OK_CANCEL, + "") + self.__dialog.set_markup(_("Press any key which you want to use as hanja key. " "The key you pressed is displayed below.\n" "If you want to use it, click \"Ok\" or click \"Cancel\"")) - self.__dialog.format_secondary_markup(" ") - self.__dialog.connect("key-press-event", self.on_keypress, None) + self.__dialog.format_secondary_markup(" ") + self.__dialog.connect("key-press-event", self.on_keypress, None) def destroy(self): - self.__dialog.destroy() + self.__dialog.destroy() def run(self): - return self.__dialog.run() + return self.__dialog.run() def get_key_string(self): - return self.__key_str + return self.__key_str def on_keypress(self, widget, event, data = None): - self.__key_str = "" - if event.state & gdk.CONTROL_MASK : - self.__key_str += "Control+" - if event.state & gdk.MOD1_MASK : - self.__key_str += "Alt+" - if event.state & gdk.SHIFT_MASK : - self.__key_str += "Shift+" - - self.__key_str += gdk.keyval_name(event.keyval) - - self.__dialog.format_secondary_markup('%s' % self.__key_str) + self.__key_str = "" + if event.state & Gdk.ModifierType.CONTROL_MASK : + self.__key_str += "Control+" + if event.state & Gdk.ModifierType.MOD1_MASK : + self.__key_str += "Alt+" + if event.state & Gdk.ModifierType.SHIFT_MASK : + self.__key_str += "Shift+" + + self.__key_str += Gdk.keyval_name(event.keyval) + + self.__dialog.format_secondary_markup('%s' % self.__key_str) diff --git a/setup/main.py b/setup/main.py index 28a66a9..ce33db7 100644 --- a/setup/main.py +++ b/setup/main.py @@ -20,9 +20,9 @@ import sys import os -import gobject -import gtk -import ibus +from gi.repository import GLib +from gi.repository import Gtk +from gi.repository import IBus import locale import gettext import config @@ -35,157 +35,166 @@ class Setup (): def __init__ (self, bus): self.__bus = bus self.__config = self.__bus.get_config() - self.__config.connect("value-changed", self.on_value_changed, None) - - ui_file = os.path.join(os.path.dirname(__file__), "setup.ui") - self.__builder = gtk.Builder() - self.__builder.set_translation_domain(config.gettext_package) - self.__builder.add_from_file(ui_file) - - # Hangul tab - pipe = subprocess.Popen([config.setuplibdir + '/hangul_keyboard_list'], stdout = subprocess.PIPE) - list = pipe.communicate()[0].split('\n') - - self.__hangul_keyboard = self.__builder.get_object("HangulKeyboard") - model = gtk.ListStore(str, str, int) - i = 0 - for line in list: - items = line.split('\t') - if len(items) > 1: - model.append([items[1], items[0], i]) - i+=1 - - self.__hangul_keyboard.set_model(model) - renderer = gtk.CellRendererText() - self.__hangul_keyboard.pack_start(renderer) - self.__hangul_keyboard.add_attribute(renderer, "text", 0) - - current = self.__read("HangulKeyboard", "2") - for i in model: - if i[1] == current: - self.__hangul_keyboard.set_active(i[2]) - break - - self.__word_commit = self.__builder.get_object("WordCommit") - - word_commit = self.__read("WordCommit", False) + self.__config.connect("value-changed", self.on_value_changed, None) + + ui_file = os.path.join(os.path.dirname(__file__), "setup.ui") + self.__builder = Gtk.Builder() + self.__builder.set_translation_domain(config.gettext_package) + self.__builder.add_from_file(ui_file) + + # Hangul tab + pipe = subprocess.Popen([config.setuplibdir + '/hangul_keyboard_list'], stdout = subprocess.PIPE) + list = pipe.communicate()[0].split('\n') + + self.__hangul_keyboard = self.__builder.get_object("HangulKeyboard") + model = Gtk.ListStore(str, str, int) + i = 0 + for line in list: + items = line.split('\t') + if len(items) > 1: + model.append([items[1], items[0], i]) + i+=1 + + self.__hangul_keyboard.set_model(model) + renderer = Gtk.CellRendererText() + self.__hangul_keyboard.pack_start(renderer, True) + self.__hangul_keyboard.add_attribute(renderer, "text", 0) + + default = GLib.Variant.new_string("2") + current = self.__read("HangulKeyboard", default).get_string() + for i in model: + if i[1] == current: + self.__hangul_keyboard.set_active(i[2]) + break + + self.__word_commit = self.__builder.get_object("WordCommit") + + default = GLib.Variant.new_boolean(False) + word_commit = self.__read("WordCommit", default).get_boolean() self.__word_commit.set_active(word_commit) - self.__auto_reorder = self.__builder.get_object("AutoReorder") - auto_reorder = self.__read("AutoReorder", True) + self.__auto_reorder = self.__builder.get_object("AutoReorder") + default = GLib.Variant.new_boolean(True) + auto_reorder = self.__read("AutoReorder", default).get_boolean() self.__auto_reorder.set_active(auto_reorder) - # hanja tab - button = self.__builder.get_object("HanjaKeyListAddButton") - button.connect("clicked", self.on_hanja_key_add, None) + # hanja tab + button = self.__builder.get_object("HanjaKeyListAddButton") + button.connect("clicked", self.on_hanja_key_add, None) - button = self.__builder.get_object("HanjaKeyListRemoveButton") - button.connect("clicked", self.on_hanja_key_remove, None) + button = self.__builder.get_object("HanjaKeyListRemoveButton") + button.connect("clicked", self.on_hanja_key_remove, None) - model = gtk.ListStore(str) + model = Gtk.ListStore(str) - keylist_str = self.__read("HanjaKeys", "Hangul_Hanja,F9") - self.__hanja_key_list_str = keylist_str.split(',') - for i in self.__hanja_key_list_str: - model.append([i]) + default = GLib.Variant.new_string("Hangul_Hanja,F9") + keylist_str = self.__read("HanjaKeys", default).get_string() + self.__hanja_key_list_str = keylist_str.split(',') + for i in self.__hanja_key_list_str: + model.append([i]) - self.__hanja_key_list = self.__builder.get_object("HanjaKeyList") - self.__hanja_key_list.set_model(model) - column = gtk.TreeViewColumn() - column.set_title("key") - renderer = gtk.CellRendererText() - column.pack_start(renderer) - column.add_attribute(renderer, "text", 0) - self.__hanja_key_list.append_column(column) + self.__hanja_key_list = self.__builder.get_object("HanjaKeyList") + self.__hanja_key_list.set_model(model) + column = Gtk.TreeViewColumn() + column.set_title("key") + renderer = Gtk.CellRendererText() + column.pack_start(renderer, True) + column.add_attribute(renderer, "text", 0) + self.__hanja_key_list.append_column(column) + # advanced tab + notebook = self.__builder.get_object("SetupNotebook") + notebook.remove_page(2) - # advanced tab - notebook = self.__builder.get_object("SetupNotebook") - notebook.remove_page(2) + # setup dialog + self.__window = self.__builder.get_object("SetupDialog") + icon_file = os.path.join(config.pkgdatadir, "icons", "ibus-hangul.svg") + self.__window.set_icon_from_file(icon_file) + self.__window.connect("response", self.on_response, None) + self.__window.show() - # setup dialog - self.__window = self.__builder.get_object("SetupDialog") - icon_file = os.path.join(config.pkgdatadir, "icons", "ibus-hangul.svg") - self.__window.set_icon_from_file(icon_file) - self.__window.connect("response", self.on_response, None) - self.__window.show() - - ok_button = self.__builder.get_object("button_cancel") - ok_button.grab_focus() + ok_button = self.__builder.get_object("button_cancel") + ok_button.grab_focus() def run(self): - res = self.__window.run() - if (res == gtk.RESPONSE_OK): - self.on_ok() - self.__window.destroy() + res = self.__window.run() + if (res == Gtk.ResponseType.OK): + self.on_ok() + self.__window.destroy() def apply(self): - model = self.__hangul_keyboard.get_model() - i = self.__hangul_keyboard.get_active() - self.__write("HangulKeyboard", model[i][1]) + model = self.__hangul_keyboard.get_model() + i = self.__hangul_keyboard.get_active() + self.__write("HangulKeyboard", GLib.Variant.new_string(model[i][1])) word_commit = self.__word_commit.get_active() - self.__write("WordCommit", word_commit) - - model = self.__hanja_key_list.get_model() - str = "" - iter = model.get_iter_first() - while iter: - if len(str) > 0: - str += "," - str += model.get_value(iter, 0) - else: - str += model.get_value(iter, 0) - iter = model.iter_next(iter) - self.__write("HanjaKeys", str) + self.__write("WordCommit", GLib.Variant.new_boolean(word_commit)) + + auto_reorder = self.__auto_reorder.get_active() + self.__write("AutoReorder", GLib.Variant.new_boolean(auto_reorder)) + + model = self.__hanja_key_list.get_model() + str = "" + iter = model.get_iter_first() + while iter: + if len(str) > 0: + str += "," + str += model.get_value(iter, 0) + else: + str += model.get_value(iter, 0) + iter = model.iter_next(iter) + self.__write("HanjaKeys", GLib.Variant.new_string(str)) def on_response(self, widget, id, data = None): - if id == gtk.RESPONSE_APPLY: - self.apply() - widget.emit_stop_by_name("response") - if id == gtk.RESPONSE_NONE: - widget.emit_stop_by_name("response") + if id == Gtk.ResponseType.APPLY: + self.apply() + widget.emit_stop_by_name("response") + if id == Gtk.ResponseType.NONE: + widget.emit_stop_by_name("response") def on_ok(self): - self.apply() + self.apply() def on_hanja_key_add(self, widget, data = None): - dialog = KeyCaptureDialog(_("Select Hanja key"), self.__window) - res = dialog.run() - if res == gtk.RESPONSE_OK: - key_str = dialog.get_key_string() - if len(key_str) > 0: - model = self.__hanja_key_list.get_model() - iter = model.get_iter_first() - while iter: - str = model.get_value(iter, 0) - if str == key_str: - model.remove(iter) - break - iter = model.iter_next(iter) - - model.append([key_str]) - dialog.destroy() + dialog = KeyCaptureDialog(_("Select Hanja key"), self.__window) + res = dialog.run() + if res == Gtk.ResponseType.OK: + key_str = dialog.get_key_string() + if len(key_str) > 0: + model = self.__hanja_key_list.get_model() + iter = model.get_iter_first() + while iter: + str = model.get_value(iter, 0) + if str == key_str: + model.remove(iter) + break + iter = model.iter_next(iter) + + model.append([key_str]) + dialog.destroy() def on_hanja_key_remove(self, widget, data = None): - selection = self.__hanja_key_list.get_selection() - (model, iter) = selection.get_selected() - if model and iter: - model.remove(iter) + selection = self.__hanja_key_list.get_selection() + (model, iter) = selection.get_selected() + if model and iter: + model.remove(iter) def on_value_changed(self, config, section, name, value, data): - if section == "engine/Hangul": - if name == "HangulKeyboard": - model = self.__hangul_keyboard.get_model() - for i in model: - if i[1] == value: - self.__hangul_keyboard.set_active(i[2]) - break - elif name == "HanjaKeys": - self.__hanja_key_list_str = value.split(',') + if section == "engine/Hangul": + if name == "HangulKeyboard": + model = self.__hangul_keyboard.get_model() + for i in model: + if i[1] == value: + self.__hangul_keyboard.set_active(i[2]) + break + elif name == "HanjaKeys": + self.__hanja_key_list_str = value.split(',') def __read(self, name, v): - return self.__config.get_value("engine/Hangul", name, v) + value = self.__config.get_value("engine/Hangul", name) + if value is None: + return v + return value def __write(self, name, v): return self.__config.set_value("engine/Hangul", name, v) @@ -194,14 +203,13 @@ if __name__ == "__main__": locale.bindtextdomain(config.gettext_package, config.localedir) locale.bind_textdomain_codeset(config.gettext_package, "UTF-8") - try: - bus = ibus.Bus() - except: + bus = IBus.Bus() + if bus.is_connected(): + Setup(bus).run() + else: message = _("IBus daemon is not running.\nHangul engine settings cannot be saved.") - dialog = gtk.MessageDialog(type = gtk.MESSAGE_ERROR, - buttons = gtk.BUTTONS_CLOSE, + dialog = Gtk.MessageDialog(type = Gtk.MessageType.ERROR, + buttons = Gtk.ButtonsType.CLOSE, message_format = message) dialog.run() sys.exit(1) - - Setup(bus).run() diff --git a/src/hangul.xml.in.in b/src/hangul.xml.in.in index c175437..71f9043 100644 --- a/src/hangul.xml.in.in +++ b/src/hangul.xml.in.in @@ -18,7 +18,7 @@ Peng Huang <shawn.p.huang@gmail.com> ibus-hangul us - Korean + Hangul Korean Input Method 99