summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-08-30 19:21:06 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-08-30 19:21:06 +0800
commitff15b28272e8930f512a9f098b6c9970e4ae12e4 (patch)
treea95d2b669378235147c873fca4a5679758f71c62
parentdc0cf118d0ec4733ce9b12244a2e40f271195278 (diff)
downloadibus-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.py35
-rw-r--r--daemon/factorymanager.py17
-rw-r--r--daemon/ibusdaemon.py3
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)