diff options
-rw-r--r-- | caribou/antler/antler_settings.py | 9 | ||||
-rw-r--r-- | caribou/antler/keyboard_view.py | 6 | ||||
-rw-r--r-- | caribou/settings/caribou_settings.py | 14 | ||||
-rw-r--r-- | libcaribou/json-deserializer.vala | 24 | ||||
-rw-r--r-- | libcaribou/keyboard-model.vala | 10 |
5 files changed, 33 insertions, 30 deletions
diff --git a/caribou/antler/antler_settings.py b/caribou/antler/antler_settings.py index 703a7fd..da8ac2f 100644 --- a/caribou/antler/antler_settings.py +++ b/caribou/antler/antler_settings.py @@ -5,6 +5,15 @@ AntlerSettings = SettingsTopGroup( _("Antler Preferences"), "/org/gnome/antler/", "org.gnome.antler", [SettingsGroup("antler", _("Antler"), [ SettingsGroup("appearance", _("Appearance"), [ + StringSetting( + "keyboard_type", _("Keyboard Type"), "touch", + _("The keyboard geometery Caribou should use"), + _("The keyboard geometery determines the shape " + "and complexity of the keyboard, it could range from " + "a 'natural' look and feel good for composing simple " + "text, to a fullscale keyboard."), + allowed=[(('touch'), _('Touch')), + (('scan'), _('Scan'))]), BooleanSetting("use_system", _("Use System Theme"), True, _("Use System Theme")), FloatSetting("min_alpha", _("Minimum Alpha"), diff --git a/caribou/antler/keyboard_view.py b/caribou/antler/keyboard_view.py index 9402f36..385a636 100644 --- a/caribou/antler/keyboard_view.py +++ b/caribou/antler/keyboard_view.py @@ -227,16 +227,16 @@ class AntlerLayout(Gtk.HBox): class AntlerKeyboardView(Gtk.Notebook): def __init__(self): gobject.GObject.__init__(self) + settings = AntlerSettings() self.set_show_tabs(False) - self.keyboard_model = Caribou.KeyboardModel() + self.keyboard_model = Caribou.KeyboardModel( + keyboard_type=settings.keyboard_type.value) self.scanner = Caribou.Scanner() self.scanner.set_keyboard(self.keyboard_model) self.keyboard_model.connect("notify::active-group", self._on_group_changed) self.layers = {} - - settings = AntlerSettings() use_system = settings.use_system use_system.connect("value-changed", self._on_use_system_theme_changed) diff --git a/caribou/settings/caribou_settings.py b/caribou/settings/caribou_settings.py index 3d2c219..f3f9b00 100644 --- a/caribou/settings/caribou_settings.py +++ b/caribou/settings/caribou_settings.py @@ -3,19 +3,7 @@ from caribou.i18n import _ CaribouSettings = SettingsTopGroup( _("Caribou Preferences"), "/org/gnome/caribou/", "org.gnome.caribou", - [SettingsGroup("keyboard", _("Keyboard"), [ - SettingsGroup("general", _("General"), [ - StringSetting( - "keyboard_type", _("Keyboard Type"), "touch", - _("The keyboard geometery Caribou should use"), - _("The keyboard geometery determines the shape " - "and complexity of the keyboard, it could range from " - "a 'natural' look and feel good for composing simple " - "text, to a fullscale keyboard."), - allowed=[(('touch'), _('Touch')), - (('scan'), _('Scan'))])]), - ]), - SettingsGroup("scanning", _("Scanning"), [ + [SettingsGroup("scanning", _("Scanning"), [ BooleanSetting( "scan_enabled", _("Enable scanning"), False, _("Enable switch scanning"), diff --git a/libcaribou/json-deserializer.vala b/libcaribou/json-deserializer.vala index 818655c..ea448a4 100644 --- a/libcaribou/json-deserializer.vala +++ b/libcaribou/json-deserializer.vala @@ -18,23 +18,22 @@ namespace Caribou { return false; } - public static GLib.File get_layout_file (string group, + public static GLib.File get_layout_file (string keyboard_type, string group, string variant) throws IOError { - Settings caribou_settings = new Settings ("org.gnome.caribou"); - string kb_type = caribou_settings.get_string("keyboard-type"); List<string> dirs = new List<string> (); string custom_dir = Environment.get_variable("CARIBOU_LAYOUTS_DIR"); if (custom_dir != null) - dirs.append (Path.build_filename (custom_dir, "layouts", kb_type)); + dirs.append (Path.build_filename (custom_dir, "layouts", + keyboard_type)); dirs.append (Path.build_filename (Environment.get_user_data_dir (), - "caribou", "layouts", kb_type)); + "caribou", "layouts", keyboard_type)); foreach (string data_dir in Environment.get_system_data_dirs ()) { dirs.append (Path.build_filename ( - data_dir, "caribou", "layouts", kb_type)); + data_dir, "caribou", "layouts", keyboard_type)); } foreach (string data_dir in dirs) { @@ -46,19 +45,22 @@ namespace Caribou { throw new IOError.NOT_FOUND ( "Could not find layout file for %s %s", group, variant); } - public static bool load_group (GroupModel group) { + public static GroupModel? load_group (string keyboard_type, + string group, string variant) { Json.Parser parser = new Json.Parser (); try { - GLib.File f = get_layout_file (group.group, group.variant); + GLib.File f = get_layout_file (keyboard_type, group, variant); parser.load_from_stream (f.read (), (Cancellable) null); - create_levels_from_json (group, parser.get_root ()); } catch (GLib.Error e) { stdout.printf ("Failed to load JSON: %s\n", e.message); - return false; + return null; } - return true; + GroupModel grp = new GroupModel (group, variant); + create_levels_from_json (grp, parser.get_root ()); + + return grp; } public static void create_levels_from_json (GroupModel group, diff --git a/libcaribou/keyboard-model.vala b/libcaribou/keyboard-model.vala index a1fa2fc..3b06c9f 100644 --- a/libcaribou/keyboard-model.vala +++ b/libcaribou/keyboard-model.vala @@ -3,6 +3,7 @@ using Bus; namespace Caribou { public class KeyboardModel : Object { public string active_group { get; private set; default = ""; } + public string keyboard_type { get; construct; } XAdapter xadapter; HashTable<string, GroupModel> groups; @@ -13,13 +14,15 @@ namespace Caribou { string[] grps, variants; int i; - groups = new HashTable<string, GroupModel> (str_hash, str_equal); + assert (keyboard_type != null); xadapter = XAdapter.get_default (); xadapter.group_changed.connect (on_group_changed); xadapter.get_groups (out grps, out variants); + groups = new HashTable<string, GroupModel> (str_hash, str_equal); + for (i=0;i<grps.length;i++) populate_group (grps[i], variants[i]); @@ -28,8 +31,9 @@ namespace Caribou { } private void populate_group (string group, string variant) { - GroupModel grp = new GroupModel (group, variant); - if (JsonDeserializer.load_group (grp)) + GroupModel grp = JsonDeserializer.load_group (keyboard_type, + group, variant); + if (grp != null) groups.insert (GroupModel.create_group_name (group, variant), grp); } |