425 lines
15 KiB
Diff
425 lines
15 KiB
Diff
|
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('<span size="large" weight="bold">%s</span>' % 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('<span size="large" weight="bold">%s</span>' % 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 @@
|
||
|
<author>Peng Huang <shawn.p.huang@gmail.com></author>
|
||
|
<icon>ibus-hangul</icon>
|
||
|
<layout>us</layout>
|
||
|
- <longname>Korean</longname>
|
||
|
+ <longname>Hangul</longname>
|
||
|
<description>Korean Input Method</description>
|
||
|
<rank>99</rank>
|
||
|
<symbol>한</symbol>
|