summaryrefslogtreecommitdiff
path: root/setup
diff options
context:
space:
mode:
authorfujiwarat <takao.fujiwara1@gmail.com>2012-10-19 17:41:56 +0900
committerfujiwarat <takao.fujiwara1@gmail.com>2012-10-19 17:41:56 +0900
commit3800c47df3c2a7306f37589647d67220f8426524 (patch)
tree76f77bb0bf39096c9fc679a5675f08ba1b6dc45a /setup
parent1765e872691080d8dc6f3f7997443c84aa629fe9 (diff)
downloadibus-anthy-3800c47df3c2a7306f37589647d67220f8426524.tar.gz
Added xkb options with ibus 1.5.
Diffstat (limited to 'setup')
-rw-r--r--setup/anthyprefs.py.in6
-rw-r--r--setup/main.py135
-rw-r--r--setup/setup.ui19
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>