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 {
// 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);
}
......
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