Index: chromeos/ime/ibus_bridge.cc |
diff --git a/chromeos/ime/ibus_bridge.cc b/chromeos/ime/ibus_bridge.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3df38a2f25c3995b67d3a61e2ff4f82efb3f9679 |
--- /dev/null |
+++ b/chromeos/ime/ibus_bridge.cc |
@@ -0,0 +1,49 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chromeos/ime/ibus_bridge.h" |
+ |
+#include "base/logging.h" |
+#include "base/threading/thread_local_storage.h" |
+ |
+namespace chromeos { |
+ |
+namespace { |
+ |
+// Thread local storage for IBusBridge. |
+base::ThreadLocalStorage::StaticSlot tls_ibus_bridge = TLS_INITIALIZER; |
+ |
+// Handles TLS finalization. |
+void Finalize(void* data) { |
+ IBusBridge* bridge = static_cast<IBusBridge*>(data); |
+ delete bridge; |
+} |
+ |
+} // namespace |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+// IBusBridge |
+ |
+IBusBridge::IBusBridge() |
+ : input_context_handler_(NULL), |
+ engine_handler_(NULL), |
+ candidate_window_handler_(NULL), |
+ panel_handler_(NULL) { |
+} |
+ |
+// static |
+void IBusBridge::Initialize() { |
+ tls_ibus_bridge.Initialize(Finalize); |
+ IBusBridge* bridge = new IBusBridge(); |
+ tls_ibus_bridge.Set(bridge); |
+} |
+ |
+// static |
+IBusBridge* GetInstance() { |
+ if (!tls_ibus_bridge.initialized()) |
+ return NULL; |
+ return static_cast<IBusBridge*>(tls_ibus_bridge.Get()); |
+} |
+ |
+} // namespace chromeos |