Commit f1d914be authored by zork@chromium.org's avatar zork@chromium.org

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
parent 0cd3abfa
...@@ -129,7 +129,11 @@ class IBusEngineControllerImpl : public IBusEngineController { ...@@ -129,7 +129,11 @@ class IBusEngineControllerImpl : public IBusEngineController {
// Check the IBus connection status. // Check the IBus connection status.
bool result = true; bool result = true;
if (ibus_bus_is_connected(ibus_)) { 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(); result = MaybeCreateComponent();
} }
...@@ -620,6 +624,10 @@ class IBusEngineControllerImpl : public IBusEngineController { ...@@ -620,6 +624,10 @@ class IBusEngineControllerImpl : public IBusEngineController {
g_return_if_fail(user_data); g_return_if_fail(user_data);
IBusEngineControllerImpl* self IBusEngineControllerImpl* self
= static_cast<IBusEngineControllerImpl*>(user_data); = static_cast<IBusEngineControllerImpl*>(user_data);
if (!g_factory_) {
g_factory_ = ibus_factory_new(ibus_bus_get_connection(bus));
}
if (!self->MaybeCreateComponent()) { if (!self->MaybeCreateComponent()) {
LOG(ERROR) << "MaybeCreateComponent() failed"; LOG(ERROR) << "MaybeCreateComponent() failed";
return; return;
...@@ -629,10 +637,11 @@ class IBusEngineControllerImpl : public IBusEngineController { ...@@ -629,10 +637,11 @@ class IBusEngineControllerImpl : public IBusEngineController {
// Handles "disconnected" signal from ibus-daemon. // Handles "disconnected" signal from ibus-daemon.
static void IBusBusDisconnectedCallback(IBusBus* bus, gpointer user_data) { static void IBusBusDisconnectedCallback(IBusBus* bus, gpointer user_data) {
LOG(WARNING) << "IBus connection is terminated."; LOG(WARNING) << "IBus connection is terminated.";
g_factory_ = NULL;
} }
bool MaybeCreateComponent() { bool MaybeCreateComponent() {
if (!ibus_ || !ibus_bus_is_connected(ibus_)) { if (!ibus_ || !ibus_bus_is_connected(ibus_) || !g_factory_) {
return false; return false;
} }
...@@ -655,8 +664,7 @@ class IBusEngineControllerImpl : public IBusEngineController { ...@@ -655,8 +664,7 @@ class IBusEngineControllerImpl : public IBusEngineController {
"", "",
layout_.c_str())); layout_.c_str()));
IBusFactory* factory = ibus_factory_new(ibus_bus_get_connection(ibus_)); ibus_factory_add_engine(g_factory_, engine_id_.c_str(),
ibus_factory_add_engine(factory, engine_id_.c_str(),
IBUS_TYPE_CHROMEOS_ENGINE); IBUS_TYPE_CHROMEOS_ENGINE);
ibus_bus_register_component(ibus_, component); ibus_bus_register_component(ibus_, component);
g_object_unref(component); g_object_unref(component);
...@@ -871,11 +879,14 @@ class IBusEngineControllerImpl : public IBusEngineController { ...@@ -871,11 +879,14 @@ class IBusEngineControllerImpl : public IBusEngineController {
std::set<IBusChromeOSEngine*> engine_instances_; std::set<IBusChromeOSEngine*> engine_instances_;
static ConnectionMap* g_connections_; static ConnectionMap* g_connections_;
static IBusFactory* g_factory_;
}; };
IBusEngineControllerImpl::ConnectionMap* IBusEngineControllerImpl::ConnectionMap*
IBusEngineControllerImpl::g_connections_ = NULL; IBusEngineControllerImpl::g_connections_ = NULL;
IBusFactory* IBusEngineControllerImpl::g_factory_ = NULL;
void ibus_chromeos_engine_class_init(IBusChromeOSEngineClass *klass) { void ibus_chromeos_engine_class_init(IBusChromeOSEngineClass *klass) {
IBusEngineControllerImpl::InitEngineClass(klass); IBusEngineControllerImpl::InitEngineClass(klass);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment