diff options
author | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 06:17:54 +0000 |
---|---|---|
committer | nona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 06:17:54 +0000 |
commit | 78d298ce9a459a9f2b48b4d216b54ba3223d3e9c (patch) | |
tree | 3a53476f9f8a41e2820f098bd81055c24a63c301 /chromeos | |
parent | b80a2872e75c47b641b6a396ec1290707c1a416d (diff) | |
download | chromium_src-78d298ce9a459a9f2b48b4d216b54ba3223d3e9c.zip chromium_src-78d298ce9a459a9f2b48b4d216b54ba3223d3e9c.tar.gz chromium_src-78d298ce9a459a9f2b48b4d216b54ba3223d3e9c.tar.bz2 |
Add CreateEngine related functions into IBusBridge
It turned out that engine creation should be handled in IBusBridge because
create function and its caller is not directly dependent.
BUG=170671
TEST=None
Review URL: https://chromiumcodereview.appspot.com/12527005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186641 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/ime/ibus_bridge.cc | 33 | ||||
-rw-r--r-- | chromeos/ime/ibus_bridge.h | 20 |
2 files changed, 49 insertions, 4 deletions
diff --git a/chromeos/ime/ibus_bridge.cc b/chromeos/ime/ibus_bridge.cc index 630cf37..45e583f 100644 --- a/chromeos/ime/ibus_bridge.cc +++ b/chromeos/ime/ibus_bridge.cc @@ -4,11 +4,16 @@ #include "chromeos/ime/ibus_bridge.h" +#include <map> #include "base/logging.h" #include "base/memory/singleton.h" namespace chromeos { +namespace { +void NoOpCreateEngineReply(const dbus::ObjectPath& unused_path) {} +} // namespace + static IBusBridge* g_ibus_bridge = NULL; // An implementation of IBusBridge. @@ -59,21 +64,45 @@ class IBusBridgeImpl : public IBusBridge { } // IBusBridge override. - virtual IBusPanelPropertyHandlerInterface* GetPanelHandler() const OVERRIDE { + virtual IBusPanelPropertyHandlerInterface* + GetPropertyHandler() const OVERRIDE { return panel_handler_; } // IBusBridge override. - virtual void SetPanelHandler( + virtual void SetPropertyHandler( IBusPanelPropertyHandlerInterface* handler) OVERRIDE { panel_handler_ = handler; } + virtual void SetCreateEngineHandler( + const std::string& engine_id, + const IBusEngineFactoryService::CreateEngineHandler& handler) OVERRIDE { + create_engine_handler_map_[engine_id] = handler; + } + + // IBusBridge override. + virtual void UnsetCreateEngineHandler(const std::string& engine_id) OVERRIDE { + create_engine_handler_map_.erase(engine_id); + } + + // IBusBridge override. + virtual void CreateEngine(const std::string& engine_id) OVERRIDE { + // TODO(nona): Change following condition to DCHECK once all legacy IME is + // migrated to extension IME. + if (create_engine_handler_map_[engine_id].is_null()) + return; + create_engine_handler_map_[engine_id].Run( + base::Bind(&NoOpCreateEngineReply)); + } + private: IBusInputContextHandlerInterface* input_context_handler_; IBusEngineHandlerInterface* engine_handler_; IBusPanelCandidateWindowHandlerInterface* candidate_window_handler_; IBusPanelPropertyHandlerInterface* panel_handler_; + std::map<std::string, IBusEngineFactoryService::CreateEngineHandler> + create_engine_handler_map_; DISALLOW_COPY_AND_ASSIGN(IBusBridgeImpl); }; diff --git a/chromeos/ime/ibus_bridge.h b/chromeos/ime/ibus_bridge.h index af51eb8..0931417 100644 --- a/chromeos/ime/ibus_bridge.h +++ b/chromeos/ime/ibus_bridge.h @@ -8,6 +8,7 @@ #include <string> #include "base/basictypes.h" #include "chromeos/chromeos_export.h" +#include "chromeos/dbus/ibus/ibus_engine_factory_service.h" namespace chromeos { class IBusInputContextHandlerInterface; @@ -62,11 +63,26 @@ class IBusBridge { // Returns current PropertyHandler. This function returns NULL if panel window // is not ready to use. - virtual IBusPanelPropertyHandlerInterface* GetPanelHandler() const = 0; + virtual IBusPanelPropertyHandlerInterface* GetPropertyHandler() const = 0; // Updates current PropertyHandler. If there is no active property service, // pass NULL for |handler|. Caller must release |handler|. - virtual void SetPanelHandler(IBusPanelPropertyHandlerInterface* handler) = 0; + virtual void SetPropertyHandler( + IBusPanelPropertyHandlerInterface* handler) = 0; + + // Sets create engine handler for |engine_id|. |engine_id| must not be empty + // and |handler| must not be null. + virtual void SetCreateEngineHandler( + const std::string& engine_id, + const IBusEngineFactoryService::CreateEngineHandler& handler) = 0; + + // Unsets create engine handler for |engine_id|. |engine_id| must not be + // empty. + virtual void UnsetCreateEngineHandler(const std::string& engine_id) = 0; + + // Creates engine. Do not call this function before SetCreateEngineHandler + // call with |engine_id|. + virtual void CreateEngine(const std::string& engine_id) = 0; protected: IBusBridge(); |