Chromium Code Reviews| Index: chrome/browser/chromeos/input_method/ibus_engine_controller.cc |
| diff --git a/chrome/browser/chromeos/input_method/ibus_engine_controller.cc b/chrome/browser/chromeos/input_method/ibus_engine_controller.cc |
| index 9cc8edbedb240e17b75931b9136d167e02c228c7..636259cf747244a8e5340d4e622ef6843e5549ce 100644 |
| --- a/chrome/browser/chromeos/input_method/ibus_engine_controller.cc |
| +++ b/chrome/browser/chromeos/input_method/ibus_engine_controller.cc |
| @@ -620,6 +620,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)); |
|
Peng
2011/10/26 17:53:21
I only find you create g_factory in connected sign
Zachary Kuznia
2011/10/27 07:25:11
Done.
|
| + } |
| + |
| if (!self->MaybeCreateComponent()) { |
| LOG(ERROR) << "MaybeCreateComponent() failed"; |
| return; |
| @@ -629,10 +633,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 +660,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 +875,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); |
| } |