diff --git a/.gitignore b/.gitignore
index cfe7325..e254b8f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ ibus-hangul-1.3.0.20100329.tar.gz
/ibus-hangul-1.3.2.tar.gz
/ibus-hangul-1.4.0.tar.gz
/ibus-hangul-1.4.1.tar.gz
+/ibus-hangul-1.4.2.tar.gz
diff --git a/ibus-hangul-HEAD.patch b/ibus-hangul-HEAD.patch
deleted file mode 100644
index a467486..0000000
--- a/ibus-hangul-HEAD.patch
+++ /dev/null
@@ -1,424 +0,0 @@
-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
- 한
diff --git a/sources b/sources
index 4e271b7..3f874f4 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c9615a9f704a4c29252028407329e1c3 ibus-hangul-1.4.1.tar.gz
+0229eab9481355bb5f54230890bfa910 ibus-hangul-1.4.2.tar.gz