// Copyright 2014 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 "ui/base/ime/ime_bridge.h" #include #include "base/logging.h" #include "base/macros.h" #include "base/memory/singleton.h" #include "build/build_config.h" namespace ui { static IMEBridge* g_ime_bridge = NULL; // An implementation of IMEBridge. class IMEBridgeImpl : public IMEBridge { public: #if defined(OS_CHROMEOS) IMEBridgeImpl() : input_context_handler_(NULL), engine_handler_(NULL), current_input_context_(ui::TEXT_INPUT_TYPE_NONE, ui::TEXT_INPUT_MODE_DEFAULT, 0), candidate_window_handler_(NULL) {} #else IMEBridgeImpl() : input_context_handler_(NULL), engine_handler_(NULL), current_input_context_(ui::TEXT_INPUT_TYPE_NONE, ui::TEXT_INPUT_MODE_DEFAULT, 0) {} #endif ~IMEBridgeImpl() override {} // IMEBridge override. IMEInputContextHandlerInterface* GetInputContextHandler() const override { return input_context_handler_; } // IMEBridge override. void SetInputContextHandler( IMEInputContextHandlerInterface* handler) override { input_context_handler_ = handler; } // IMEBridge override. void SetCurrentEngineHandler(IMEEngineHandlerInterface* handler) override { engine_handler_ = handler; } // IMEBridge override. IMEEngineHandlerInterface* GetCurrentEngineHandler() const override { return engine_handler_; } // IMEBridge override. void SetCurrentInputContext( const IMEEngineHandlerInterface::InputContext& input_context) override { current_input_context_ = input_context; } // IMEBridge override. const IMEEngineHandlerInterface::InputContext& GetCurrentInputContext() const override { return current_input_context_; } #if defined(OS_CHROMEOS) // IMEBridge override. void SetCandidateWindowHandler( chromeos::IMECandidateWindowHandlerInterface* handler) override { candidate_window_handler_ = handler; } // IMEBridge override. chromeos::IMECandidateWindowHandlerInterface* GetCandidateWindowHandler() const override { return candidate_window_handler_; } #endif private: IMEInputContextHandlerInterface* input_context_handler_; IMEEngineHandlerInterface* engine_handler_; IMEEngineHandlerInterface::InputContext current_input_context_; #if defined(OS_CHROMEOS) chromeos::IMECandidateWindowHandlerInterface* candidate_window_handler_; #endif DISALLOW_COPY_AND_ASSIGN(IMEBridgeImpl); }; /////////////////////////////////////////////////////////////////////////////// // IMEBridge IMEBridge::IMEBridge() {} IMEBridge::~IMEBridge() {} // static. void IMEBridge::Initialize() { if (!g_ime_bridge) g_ime_bridge = new IMEBridgeImpl(); } // static. void IMEBridge::Shutdown() { delete g_ime_bridge; g_ime_bridge = NULL; } // static. IMEBridge* IMEBridge::Get() { return g_ime_bridge; } } // namespace ui