diff options
author | zork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-28 03:52:52 +0000 |
---|---|---|
committer | zork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-28 03:52:52 +0000 |
commit | f1d914be616252f7c67a73da91601893cee2f2c2 (patch) | |
tree | 7324613be05e7b78296fcdbef1a572f43d31a1af | |
parent | 0cd3abfaa5e7248db27b0fd3e0c0ee8e47299eac (diff) | |
download | chromium_src-f1d914be616252f7c67a73da91601893cee2f2c2.zip chromium_src-f1d914be616252f7c67a73da91601893cee2f2c2.tar.gz chromium_src-f1d914be616252f7c67a73da91601893cee2f2c2.tar.bz2 |
Share an instance of the ibus factory between all ibus engines.
R=penghuang@chromium.org
BUG=chromium-os:22107
TEST=Install two IME extensions, and ensure that they both work.
Review URL: http://codereview.chromium.org/8393038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107682 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/input_method/ibus_engine_controller.cc | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/input_method/ibus_engine_controller.cc b/chrome/browser/chromeos/input_method/ibus_engine_controller.cc index 9cc8edb..6aaf2c9 100644 --- a/chrome/browser/chromeos/input_method/ibus_engine_controller.cc +++ b/chrome/browser/chromeos/input_method/ibus_engine_controller.cc @@ -129,7 +129,11 @@ class IBusEngineControllerImpl : public IBusEngineController { // Check the IBus connection status. bool result = true; if (ibus_bus_is_connected(ibus_)) { - LOG(INFO) << "ibus_bus_is_connected(). IBus connection is ready."; + if (!g_factory_) { + g_factory_ = ibus_factory_new(ibus_bus_get_connection(ibus_)); + } + + VLOG(1) << "ibus_bus_is_connected(). IBus connection is ready."; result = MaybeCreateComponent(); } @@ -620,6 +624,10 @@ class IBusEngineControllerImpl : public IBusEngineController { g_return_if_fail(user_data); IBusEngineControllerImpl* self = static_cast<IBusEngineControllerImpl*>(user_data); + if (!g_factory_) { + g_factory_ = ibus_factory_new(ibus_bus_get_connection(bus)); + } + if (!self->MaybeCreateComponent()) { LOG(ERROR) << "MaybeCreateComponent() failed"; return; @@ -629,10 +637,11 @@ class IBusEngineControllerImpl : public IBusEngineController { // Handles "disconnected" signal from ibus-daemon. static void IBusBusDisconnectedCallback(IBusBus* bus, gpointer user_data) { LOG(WARNING) << "IBus connection is terminated."; + g_factory_ = NULL; } bool MaybeCreateComponent() { - if (!ibus_ || !ibus_bus_is_connected(ibus_)) { + if (!ibus_ || !ibus_bus_is_connected(ibus_) || !g_factory_) { return false; } @@ -655,8 +664,7 @@ class IBusEngineControllerImpl : public IBusEngineController { "", layout_.c_str())); - IBusFactory* factory = ibus_factory_new(ibus_bus_get_connection(ibus_)); - ibus_factory_add_engine(factory, engine_id_.c_str(), + ibus_factory_add_engine(g_factory_, engine_id_.c_str(), IBUS_TYPE_CHROMEOS_ENGINE); ibus_bus_register_component(ibus_, component); g_object_unref(component); @@ -871,11 +879,14 @@ class IBusEngineControllerImpl : public IBusEngineController { std::set<IBusChromeOSEngine*> engine_instances_; static ConnectionMap* g_connections_; + static IBusFactory* g_factory_; }; IBusEngineControllerImpl::ConnectionMap* IBusEngineControllerImpl::g_connections_ = NULL; +IBusFactory* IBusEngineControllerImpl::g_factory_ = NULL; + void ibus_chromeos_engine_class_init(IBusChromeOSEngineClass *klass) { IBusEngineControllerImpl::InitEngineClass(klass); } |