summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-28 03:52:52 +0000
committerzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-28 03:52:52 +0000
commitf1d914be616252f7c67a73da91601893cee2f2c2 (patch)
tree7324613be05e7b78296fcdbef1a572f43d31a1af
parent0cd3abfaa5e7248db27b0fd3e0c0ee8e47299eac (diff)
downloadchromium_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.cc19
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);
}