diff options
author | fujiwarat <takao.fujiwara1@gmail.com> | 2012-10-19 17:41:56 +0900 |
---|---|---|
committer | fujiwarat <takao.fujiwara1@gmail.com> | 2012-10-19 17:41:56 +0900 |
commit | 3800c47df3c2a7306f37589647d67220f8426524 (patch) | |
tree | 76f77bb0bf39096c9fc679a5675f08ba1b6dc45a /setup | |
parent | 1765e872691080d8dc6f3f7997443c84aa629fe9 (diff) | |
download | ibus-anthy-3800c47df3c2a7306f37589647d67220f8426524.tar.gz |
Added xkb options with ibus 1.5.
Diffstat (limited to 'setup')
-rw-r--r-- | setup/anthyprefs.py.in | 6 | ||||
-rw-r--r-- | setup/main.py | 135 | ||||
-rw-r--r-- | setup/setup.ui | 19 |
3 files changed, 114 insertions, 46 deletions
diff --git a/setup/anthyprefs.py.in b/setup/anthyprefs.py.in index bf6be07..ba89330 100644 --- a/setup/anthyprefs.py.in +++ b/setup/anthyprefs.py.in @@ -245,9 +245,9 @@ _config = { 'keyboard_layouts': [ 'default', 'jp', 'us', # XKB options requires ibus 1.5. - #'jp[ctrl:swapcaps]', 'us[ctrl:swapcaps]', - #'jp[ctrl:swapcaps,compose:rctrl]', - #'us[ctrl:swapcaps,compose:rctrl]', + 'jp[ctrl:swapcaps]', 'us[ctrl:swapcaps]', + 'jp[ctrl:swapcaps,compose:rctrl]', + 'us[ctrl:swapcaps,compose:rctrl]', ], }, diff --git a/setup/main.py b/setup/main.py index 2dd9152..134e52c 100644 --- a/setup/main.py +++ b/setup/main.py @@ -146,10 +146,6 @@ class AnthySetup(object): tv.set_model(ls) self.__keymap = None - treeview = self.__builder.get_object('keymap:treeview_custom_table') - treeview.append_column(Gtk.TreeViewColumn('', - Gtk.CellRendererText(), - text=0)) GObject.idle_add(self.__update_keymap_label, priority = GObject.PRIORITY_LOW) @@ -845,30 +841,107 @@ class AnthySetup(object): return engine_file def __get_keymap(self): + keymap = '' + layout = '' + variant = '' + option = '' engine_file = self.__get_engine_file() if engine_file == None: return None import xml.dom.minidom dom = xml.dom.minidom.parse(engine_file) - keymap = dom.getElementsByTagName('layout')[0].childNodes[0].data - if type(keymap) == unicode: - keymap = str(keymap) + nodes = dom.getElementsByTagName('layout')[0].childNodes + if len(nodes) > 0: + layout = nodes[0].data + if type(layout) == unicode: + layout = str(layout) + if layout != '': + keymap = layout.strip() + nodes = dom.getElementsByTagName('layout_variant')[0].childNodes + if len(nodes) > 0: + variant = nodes[0].data + if type(variant) == unicode: + variat = str(variant) + if variant != '': + keymap += '(' + varaint.strip() + ')' + nodes = dom.getElementsByTagName('layout_option')[0].childNodes + if len(nodes) > 0: + option = nodes[0].data + if type(option) == unicode: + option = str(option) + if option != '': + keymap += '[' + option.strip() + ']' return keymap + def __parse_keymap(self, keymap): + layout = None + variant = None + option = None + + length = keymap.find('(') + if length >= 0: + if layout == None: + layout = keymap[0:length] + keymap = keymap[length + 1:] + length = keymap.find(')') + if length > 0: + variant = keymap[0:length] + keymap = keymap[length + 1:] + else: + print >> sys.stderr, 'Invalid keymap', keymap + return ('', '', '') + length = keymap.find('[') + if length >= 0: + if layout == None: + layout = keymap[0:length] + keymap = keymap[length + 1:] + length = keymap.find(']') + if length > 0: + option = keymap[0:length] + keymap = keymap[length + 1:] + else: + print >> sys.stderr, 'Invalid keymap', keymap + return ('', '', '') + + if layout == None: + layout = keymap + if layout == None: + layout = '' + if variant == None: + variant = '' + if option == None: + option = '' + return (layout, variant, option) + def __save_keymap(self): engine_file = self.__get_engine_file() if engine_file == None: return None + (layout, variant, option) = self.__parse_keymap(self.__keymap) + import xml.dom.minidom dom = xml.dom.minidom.parse(engine_file) - node = dom.getElementsByTagName('layout')[0].childNodes[0] - node.data = self.__keymap - node = dom.getElementsByTagName('symbol')[0].childNodes[0] + nodes = dom.getElementsByTagName('layout')[0].childNodes + if len(nodes) == 0: + nodes.append(dom.createTextNode(layout)) + else: + nodes[0].data = layout + nodes = dom.getElementsByTagName('layout_variant')[0].childNodes + if len(nodes) == 0: + nodes.append(dom.createTextNode(variant)) + else: + nodes[0].data = variant + nodes = dom.getElementsByTagName('layout_option')[0].childNodes + if len(nodes) == 0: + nodes.append(dom.createTextNode(option)) + else: + nodes[0].data = option + nodes = dom.getElementsByTagName('symbol')[0].childNodes # unicode will causes UnicodeEncodeError in write stream. - if type(node.data) == unicode: - node.data = node.data.encode('utf-8') + if len(nodes) > 0 and type(nodes[0].data) == unicode: + nodes[0].data = nodes[0].data.encode('utf-8') user_config = path.join(self.__get_userhome(), '.config', 'ibus-anthy', 'engines.xml') @@ -888,7 +961,8 @@ class AnthySetup(object): keymap = self.__get_keymap() if keymap == None: return - self.__keymap = keymap + if keymap == '': + keymap = 'default' keymap_list = prefs.get_value('common', 'keyboard_layouts') if keymap != None and not keymap in keymap_list: keymap_list.append(keymap) @@ -900,14 +974,14 @@ class AnthySetup(object): if k == 'default': k = _("Default") model.append([k]) - treeview = self.__builder.get_object('keymap:treeview_custom_table') - treeview.set_model(model) + combobox = self.__builder.get_object('keymap:combobox_custom_table') + combobox.set_model(model) + combobox.set_active(0) if index >= 0: - iter = model.get_iter(index) - treeview.get_selection().select_iter(iter) - treeview.get_selection().connect_after('changed', - self.on_selection_keymap_changed, - 0) + combobox.set_active(index) + combobox.connect_after('changed', + self.on_cb_keymap_changed, + 0) def __save_preferences(self): self.prefs.commit_all() @@ -924,16 +998,6 @@ class AnthySetup(object): button = self.__builder.get_object('button_remove_custom_key') button.set_sensitive(True) - def on_selection_keymap_changed(self, widget, id): - ls, it = widget.get_selected() - keymap = ls[it][0] - if keymap == _("Default"): - keymap = 'default' - if self.__keymap == keymap: - return - self.__keymap = keymap - self.__builder.get_object('btn_apply').set_sensitive(True) - def on_main_delete(self, widget, event): self.on_btn_cancel_clicked(widget) return True @@ -978,6 +1042,17 @@ class AnthySetup(object): self.prefs.set_value(section, key, widget.get_active()) self.__builder.get_object('btn_apply').set_sensitive(True) + def on_cb_keymap_changed(self, widget, id): + it = widget.get_active() + model = widget.get_model() + keymap = model[it][0] + if keymap == _("Default"): + keymap = 'default' + if self.__keymap == keymap: + return + self.__keymap = keymap + self.__builder.get_object('btn_apply').set_sensitive(True) + def on_cb_custom_key_table_changed(self, widget, user_data): tv = self.__builder.get_object('treeview_custom_key_table') mode = user_data diff --git a/setup/setup.ui b/setup/setup.ui index 5d5e8e1..4ad187d 100644 --- a/setup/setup.ui +++ b/setup/setup.ui @@ -1051,7 +1051,7 @@ <property name="visible">True</property> <property name="label" translatable="yes">Keyboad _layout:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">keymap:treeview_custom_table</property> + <property name="mnemonic_widget">keymap:combobox_custom_table</property> </object> <packing> <property name="x_options">GTK_FILL</property> @@ -1062,21 +1062,14 @@ </packing> </child> <child> - <object class="GtkScrolledWindow" id="scrolledwindow320"> + <object class="GtkComboBox" id="keymap:combobox_custom_table"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="border_width">1</property> - <property name="width_request">120</property> - <property name="height_request">90</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> <child> - <object class="GtkTreeView" id="keymap:treeview_custom_table"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - </object> + <object class="GtkCellRendererText" id="renderer330"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> </child> </object> <packing> |