diff options
Diffstat (limited to 'engine/engine.py')
-rw-r--r-- | engine/engine.py | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/engine/engine.py b/engine/engine.py index 5c6e0a9..462398a 100644 --- a/engine/engine.py +++ b/engine/engine.py @@ -312,6 +312,7 @@ class Engine(ibus.EngineBase): label=UN(_(long_label)))) for file in self.__prefs.get_value('dict', 'files'): + file = str(file) self._link_dict_file(file) id = self._get_dict_id_from_file(file) if id == None: @@ -384,6 +385,7 @@ class Engine(ibus.EngineBase): files = self.__prefs.get_value('dict', 'files') single_files = [] for file in files: + file = str(file) id = self._get_dict_id_from_file(file) if id == None: continue @@ -394,6 +396,7 @@ class Engine(ibus.EngineBase): def __remove_dict_files(self): for file in self.__prefs.get_value('dict', 'files'): + file = str(file) self._remove_dict_file(file) def update_preedit(self, string, attrs, cursor_pos, visible): @@ -723,10 +726,12 @@ class Engine(ibus.EngineBase): i = prop_name.find('.') if i < 0: return - id = prop_name[i + 1:].encode('utf-8') + # The id is already quoted. + id = prop_name[i + 1:] file = None - files = self.__prefs.get_value('dict', 'files') + single_files = self.__get_single_dict_files() + if id == 'embedded': pass elif id == 'anthy_zipcode' or id == 'ibus_symbol' or \ @@ -734,7 +739,7 @@ class Engine(ibus.EngineBase): file = self.__prefs.get_value('dict', id)[0] else: found = False - for file in files: + for file in single_files: if id == self._get_quoted_id(file): found = True break @@ -745,12 +750,16 @@ class Engine(ibus.EngineBase): dict_name = 'default' self.__dict_mode = 0 else: + if file not in single_files: + print >> sys.stderr, "Index error ", file, single_files + return dict_name = 'ibus__' + id - self.__dict_mode = files.index(file) + 1 + self.__dict_mode = single_files.index(file) + 1 self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) self.__context.init_personality() - self.__context.do_set_personality(dict_name) + # dict_name is unicode but the argument is str. + self.__context.do_set_personality(str(dict_name)) prop = self.__prop_dict[u"DictMode"] section = 'dict/file/' + id @@ -1447,13 +1456,18 @@ class Engine(ibus.EngineBase): has_mbcs = True break if has_mbcs: - import urllib - id = urllib.quote(id) + id = id.encode('hex') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] + + if id.startswith('0x'): + id = id.encode('hex') + has_mbcs = True + if has_mbcs: + id = '0x' + id return id @classmethod @@ -1558,7 +1572,10 @@ class Engine(ibus.EngineBase): str_list = [] for file in value: str_list.append(str(file)) - old_files = cls.__prefs.get_value(base_sec, name) + old_files = [] + dbus_old_files = cls.__prefs.get_value(base_sec, name) + for file in dbus_old_files: + old_files.append(str(file)) for file in old_files: if file in str_list: continue |