diff options
-rw-r--r-- | caribou/ui/keyboard.py | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/caribou/ui/keyboard.py b/caribou/ui/keyboard.py index fe98614..3309d17 100644 --- a/caribou/ui/keyboard.py +++ b/caribou/ui/keyboard.py @@ -38,14 +38,13 @@ else: import xml.etree.ElementTree as ET from xml.dom import minidom -from caribou import data_path class KeyboardPreferences: __gtype_name__ = "KeyboardPreferences" def __init__(self): builder = gtk.Builder() - builder.add_from_file(os.path.join(data_path, "caribou-prefs.ui")) + builder.add_from_file(os.path.join(const.DATA_DIR, "caribou-prefs.ui")) self.window = builder.get_object("dialog_prefs") self.window.connect("destroy", self.destroy) @@ -77,19 +76,18 @@ class KeyboardPreferences: mouse_over_color_button.connect("color-set", self._on_mouse_over_color_set, client) + + kbds = self._fetch_keyboards() + for kbddef in kbds: + layout_combo.append_text(kbddef) - #TODO: List the layouts in the data dir - #for kbddef in keyboards.kbds: - # layout_combo.append_text(kbddef) - - #defaultkbd = client.get_string("/apps/caribou/osk/layout") - #try: - # index = keyboards.kbds.index(defaultkbd) - #except ValueError: - # print "FIXME: pick a suitable keyboard layout: " + (defaultkbd or "None") - # layout_combo.set_active(0) - #else: - # layout_combo.set_active(index) + defaultkbd = client.get_string(const.CARIBOU_GCONF + "/layout") + try: + index = kbds.index(defaultkbd) + except ValueError: + layout_combo.set_active(0) + else: + layout_combo.set_active(index) # grey out the key size, key spacing and test area # TODO: implement key size, key spacing and test area @@ -111,6 +109,16 @@ class KeyboardPreferences: def destroy(self, widget, data = None): self.window.destroy() + def _fetch_keyboards(self): + files = os.listdir(const.KEYBOARDS_DIR) + kbds = [] + for f in files: + if (HAS_JSON and f.endswith('.json')) or f.endswith('.xml'): + module = f.rsplit('.', 1)[0] + # TODO: verify keyboard before adding it to the list + kbds.append(module) + return kbds + def _on_layout_changed(self, combobox, client): kbdname = combobox.get_active_text() if kbdname: |