diff options
author | Huang Peng <shawn.p.huang@gmail.com> | 2008-08-30 19:21:06 +0800 |
---|---|---|
committer | Huang Peng <shawn.p.huang@gmail.com> | 2008-08-30 19:21:06 +0800 |
commit | ff15b28272e8930f512a9f098b6c9970e4ae12e4 (patch) | |
tree | a95d2b669378235147c873fca4a5679758f71c62 | |
parent | dc0cf118d0ec4733ce9b12244a2e40f271195278 (diff) | |
download | ibus-ff15b28272e8930f512a9f098b6c9970e4ae12e4.tar.gz ibus-ff15b28272e8930f512a9f098b6c9970e4ae12e4.tar.xz ibus-ff15b28272e8930f512a9f098b6c9970e4ae12e4.zip |
Save default input engine and restore it when start ibus.
-rw-r--r-- | daemon/bus.py | 35 | ||||
-rw-r--r-- | daemon/factorymanager.py | 17 | ||||
-rw-r--r-- | daemon/ibusdaemon.py | 3 |
3 files changed, 42 insertions, 13 deletions
diff --git a/daemon/bus.py b/daemon/bus.py index b54ae68..d27911c 100644 --- a/daemon/bus.py +++ b/daemon/bus.py @@ -37,6 +37,8 @@ class IBus(ibus.Object): super(IBus, self).__init__() self.__context_manager = ContextManager() self.__factory_manager = FactoryManager() + self.__factory_manager.connect("default-factory-changed", + self.__factory_manager_default_factory_changed_cb) self.__panel = DummyPanel() self.__panel_handlers = list() @@ -67,6 +69,14 @@ class IBus(ibus.Object): self.__shortcut_prev_engine = self.__load_config_shortcut( ibus.CONFIG_GENERAL_SHORTCUT_NEXT_ENGINE, ibus.CONFIG_GENERAL_SHORTCUT_NEXT_ENGINE_DEFAULT) + self.__default_factory = None + + def __factory_manager_default_factory_changed_cb(self, manager, factory): + if self.__default_factory != factory: + self.__default_factory = factory + if factory == None: + return + self.__config.set_value("/general/default_engine", factory.get_object_path()) def __load_config_shortcut(self, config_key, default_value): @@ -97,11 +107,22 @@ class IBus(ibus.Object): ########################################################## # methods for im context ########################################################## + def __load_default_factory(self): + if self.__default_factory != None: + return + try: + factory_path = self.__config.get_value("/general/default_engine") + self.__default_factory = self.__factory_manager.get_factory(factory_path) + except: + pass + if self.__default_factory != None: + return + def create_input_context(self, name, conn): context = self.__context_manager.create_input_context(name, conn) - factory = self.__factory_manager.get_default_factory() - if factory: - engine = factory.create_engine() + self.__load_default_factory() + if self.__default_factory != None: + engine = self.__default_factory.create_engine() context.set_engine(engine) return context.get_id() @@ -163,9 +184,11 @@ class IBus(ibus.Object): def __context_enable(self, context): if context.get_engine() == None: - factory = self.__factory_manager.get_default_factory() - if factory: - engine = factory.create_engine() + self.__load_default_factory() + if self.__default_factory == None: + self.__default_factory = self.__factory_manager.get_default_factory() + if self.__default_factory: + engine = self.__default_factory.create_engine() engine.focus_in() context.set_engine(engine) context.set_enable(True) diff --git a/daemon/factorymanager.py b/daemon/factorymanager.py index f7d90fa..1a7dc23 100644 --- a/daemon/factorymanager.py +++ b/daemon/factorymanager.py @@ -30,6 +30,11 @@ class FactoryManager(ibus.Object): gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, ) + ), + 'default-factory-changed' : ( + gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + (gobject.TYPE_PYOBJECT, ) ) } @@ -65,13 +70,15 @@ class FactoryManager(ibus.Object): if self.__default_factory == None: factories = self.__get_sorted_factories() if factories: - self.__default_factory = factories[0] + self.set_default_factory(factories[0]) return self.__default_factory def set_default_factory(self, factory): - if factory in self.__get_sorted_factories(): - self.__default_factory = factory + if factory in self.__get_sorted_factories() or factory == None: + if self.__default_factory != factory: + self.__default_factory = factory + self.emit("default-factory-changed", self.__default_factory) else: print "unknown factory" @@ -91,7 +98,7 @@ class FactoryManager(ibus.Object): return factory.get_info() def get_factory(self, factory_path): - factory = self.__factories[factory_path] + factory = self.__factories.get(factory_path, None) return factory def __get_sorted_factories(self, resort = False): @@ -107,7 +114,7 @@ class FactoryManager(ibus.Object): for object_path in self.__ibusconn_factory_dict[ibusconn]: factory = self.__factories[object_path] if factory == self.__default_factory: - self.__default_factory = None + self.set_default_factory(None) del self.__factories[object_path] del self.__ibusconn_factory_dict[ibusconn] diff --git a/daemon/ibusdaemon.py b/daemon/ibusdaemon.py index 0640e62..a6ca372 100644 --- a/daemon/ibusdaemon.py +++ b/daemon/ibusdaemon.py @@ -83,8 +83,7 @@ class IBusServer(dbus.server.Server): lang, name = e.split(":") self.__ibus.register_start_engine(lang, name, None) except: - import traceback - traceback.print_exc() + pass def connection_added(self, dbusconn): self.__ibus.new_connection(dbusconn) |