summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authornona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-07 06:17:54 +0000
committernona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-07 06:17:54 +0000
commit78d298ce9a459a9f2b48b4d216b54ba3223d3e9c (patch)
tree3a53476f9f8a41e2820f098bd81055c24a63c301 /chromeos
parentb80a2872e75c47b641b6a396ec1290707c1a416d (diff)
downloadchromium_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.cc33
-rw-r--r--chromeos/ime/ibus_bridge.h20
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();