From 0ea6c10553db152213d8434bd3294ee3dadc94b8 Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Tue, 27 Mar 2018 11:55:50 +1300 Subject: [PATCH] some refactoring --- subiquity/models/keyboard.py | 96 ++++++++++++++++++---------------- subiquity/ui/views/keyboard.py | 2 +- 2 files changed, 52 insertions(+), 46 deletions(-) diff --git a/subiquity/models/keyboard.py b/subiquity/models/keyboard.py index 0f6cbf0b..219d6b27 100644 --- a/subiquity/models/keyboard.py +++ b/subiquity/models/keyboard.py @@ -39,8 +39,55 @@ class KeyboardSetting: return etc_default_keyboard_template.format( layout=self.layout, variant=variant, options=options) + def latinizable(self): + """ + If this setting does not allow the typing of latin characters, + return a setting that can be switched to one that can. + """ + if self.layout == 'rs': + if self.variant.startswith('latin'): + return self + else: + if self.variant == 'yz': + new_variant = 'latinyz' + elif self.variant == 'alternatequotes': + new_variant = 'latinalternatequotes' + else: + new_variant = 'latin' + return KeyboardSetting(layout='rs,rs', variant=new_variant + ',' + self.variant) + elif self.layout == 'jp': + if self.variant in ('106', 'common', 'OADG109A', 'nicola_f_bs', ''): + return self + else: + return KeyboardSetting(layout='jp,jp', variant=',' + self.variant) + elif self.layout == 'lt': + if self.variant == 'us': + return KeyboardSetting(layout='lt,lt', variant='us,') + else: + return KeyboardSetting(layout='lt,lt', variant=self.variant + ',us') + elif self.layout == 'me': + if self.variant == 'basic' or self.variant.startswith('latin'): + return self + else: + return KeyboardSetting(layout='me,me', variant=self.variant + ',us') + elif self.layout in standard_non_latin_layouts: + return KeyboardSetting(layout='us,' + self.layout, variant=',' + self.variant) + else: + return self + @classmethod - def from_config(cls, XKBLAYOUT, XKBVARIANT, XKBOPTIONS): + def from_config(cls, config_file): + content = open(config_file).read() + def optval(opt, default): + match = re.search('(?m)^\s*%s=(.*)$'%(opt,), content) + if match: + r = match.group(1).strip('"') + if r != '': + return r + return default + XKBLAYOUT = optval("XKBLAYOUT", "us") + XKBVARIANT = optval("XKBVARIANT", "") + XKBOPTIONS = optval("XKBOPTIONS", "") toggle = None if ',' in XKBLAYOUT: layout1, layout2 = XKBLAYOUT.split(',', 1) @@ -85,22 +132,12 @@ standard_non_latin_layouts = set( class KeyboardModel: def __init__(self, root): self.root = root - self.setting = KeyboardSetting(layout='us') self._kbnames_file = os.path.join(os.environ.get("SNAP", '.'), 'kbdnames.txt') self._clear() if os.path.exists(self.config_path): - content = open(self.config_path).read() - def optval(opt, default): - match = re.search('(?m)^\s*%s=(.*)$'%(opt,), content) - if match: - r = match.group(1).strip('"') - if r != '': - return r - return default - XKBLAYOUT = optval("XKBLAYOUT", "us") - XKBVARIANT = optval("XKBVARIANT", "") - XKBOPTIONS = optval("XKBOPTIONS", "") - self.setting = KeyboardSetting.from_config(XKBLAYOUT, XKBVARIANT, XKBOPTIONS) + self.setting = KeyboardSetting.from_config(self.config_path) + else: + self.setting = KeyboardSetting(layout='us') @property def config_path(self): @@ -157,34 +194,3 @@ class KeyboardModel: else: run_command(['sleep', '1']) - def adjust_setting(self, setting): - if setting.layout == 'rs': - if setting.variant.startswith('latin'): - return setting - else: - if setting.variant == 'yz': - new_variant = 'latinyz' - elif setting.variant == 'alternatequotes': - new_variant = 'latinalternatequotes' - else: - new_variant = 'latin' - return KeyboardSetting(layout='rs,rs', variant=new_variant + ',' + setting.variant) - elif setting.layout == 'jp': - if setting.variant in ('106', 'common', 'OADG109A', 'nicola_f_bs', ''): - return setting - else: - return KeyboardSetting(layout='jp,jp', variant=',' + setting.variant) - elif setting.layout == 'lt': - if setting.variant == 'us': - return KeyboardSetting(layout='lt,lt', variant='us,') - else: - return KeyboardSetting(layout='lt,lt', variant=setting.variant + ',us') - elif setting.layout == 'me': - if setting.variant == 'basic' or setting.variant.startswith('latin'): - return setting - else: - return KeyboardSetting(layout='me,me', variant=setting.variant + ',us') - elif setting.layout in standard_non_latin_layouts: - return KeyboardSetting(layout='us,' + setting.layout, variant=',' + setting.variant) - else: - return setting diff --git a/subiquity/ui/views/keyboard.py b/subiquity/ui/views/keyboard.py index 6332c66d..ed1c2b14 100644 --- a/subiquity/ui/views/keyboard.py +++ b/subiquity/ui/views/keyboard.py @@ -418,7 +418,7 @@ class KeyboardView(BaseView): if self.form.variant.widget.value is not None: variant = self.form.variant.widget.value setting = KeyboardSetting(layout=layout, variant=variant) - new_setting = self.model.adjust_setting(setting) + new_setting = setting.latinizable() if new_setting != setting: self.show_overlay(ToggleQuestion(self, new_setting), height=('relative', 100)) return