| Index: ui/base/ime/win/tsf_event_router.cc
|
| diff --git a/ui/base/ime/win/tsf_event_router.cc b/ui/base/ime/win/tsf_event_router.cc
|
| index 90ffb4d82c1939b63b422b779b66e55458d0e985..b26b27d71bb5cf692de3fb88aa9a577ebc143a02 100644
|
| --- a/ui/base/ime/win/tsf_event_router.cc
|
| +++ b/ui/base/ime/win/tsf_event_router.cc
|
| @@ -19,7 +19,8 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| public ITfTextEditSink {
|
| public:
|
| TsfEventRouterImpl()
|
| - : context_source_cookie_(TF_INVALID_COOKIE),
|
| + : observer_(NULL),
|
| + context_source_cookie_(TF_INVALID_COOKIE),
|
| ui_source_cookie_(TF_INVALID_COOKIE),
|
| ref_count_(0) {}
|
|
|
| @@ -62,7 +63,7 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| ITfEditRecord* edit_record) OVERRIDE {
|
| if (!edit_record || !context)
|
| return E_INVALIDARG;
|
| - if (text_updated_callback_.is_null())
|
| + if (!observer_)
|
| return S_OK;
|
|
|
| // |edit_record| can be used to obtain updated ranges in terms of text
|
| @@ -85,7 +86,7 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| // |fetched_count| != 0 means there is at least one range that contains
|
| // updated texts.
|
| if (fetched_count != 0)
|
| - text_updated_callback_.Run();
|
| + observer_->OnTextUpdated();
|
| return S_OK;
|
| }
|
|
|
| @@ -100,15 +101,14 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| std::pair<std::set<DWORD>::iterator, bool> insert_result =
|
| open_candidate_window_ids_.insert(element_id);
|
|
|
| - if (candidat_window_count_changed_callback_.is_null())
|
| + if (!observer_)
|
| return S_OK;
|
|
|
| // Don't call if |element_id| is already handled.
|
| if (!insert_result.second)
|
| return S_OK;
|
|
|
| - candidat_window_count_changed_callback_.Run(
|
| - open_candidate_window_ids_.size());
|
| + observer_->OnCandidateWindowCountChanged(open_candidate_window_ids_.size());
|
|
|
| return S_OK;
|
| }
|
| @@ -123,20 +123,20 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| if (open_candidate_window_ids_.erase(element_id) == 0)
|
| return S_OK;
|
|
|
| - if (candidat_window_count_changed_callback_.is_null())
|
| + if (!observer_)
|
| return S_OK;
|
|
|
| - candidat_window_count_changed_callback_.Run(
|
| - open_candidate_window_ids_.size());
|
| + observer_->OnCandidateWindowCountChanged(open_candidate_window_ids_.size());
|
|
|
| return S_OK;
|
| }
|
|
|
| // TsfEventRouter override.
|
| - virtual void SetManager(ITfThreadMgr* manager) OVERRIDE {
|
| + virtual void SetManager(ITfThreadMgr* manager, Observer* observer) OVERRIDE {
|
| EnsureDeassociated();
|
| - if (manager)
|
| - Associate(manager);
|
| + if (manager && observer) {
|
| + Associate(manager, observer);
|
| + }
|
| }
|
|
|
| // TsfEventRouter override.
|
| @@ -148,18 +148,6 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| return IsImeComposingInternal(context_);
|
| }
|
|
|
| - // TsfEventRouter override.
|
| - virtual void SetTextUpdatedCallback(
|
| - const TextUpdatedCallback& callback) OVERRIDE {
|
| - text_updated_callback_ = callback;
|
| - }
|
| -
|
| - // TsfEventRouter override.
|
| - virtual void SetCandidateWindowStatusChangedCallback(
|
| - const CandidateWindowCountChangedCallback& callback) OVERRIDE {
|
| - candidat_window_count_changed_callback_ = callback;
|
| - }
|
| -
|
| private:
|
| // Returns true if the given |context| is in composing.
|
| static bool IsImeComposingInternal(ITfContext* context) {
|
| @@ -192,7 +180,7 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| }
|
|
|
| // Associates this class with specified |manager|.
|
| - void Associate(ITfThreadMgr* thread_manager) {
|
| + void Associate(ITfThreadMgr* thread_manager, Observer* observer) {
|
| DCHECK(base::win::IsTsfAwareRequired())
|
| << "Do not call without TSF environment.";
|
| DCHECK(thread_manager);
|
| @@ -216,6 +204,7 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| ui_source_->AdviseSink(IID_ITfUIElementSink,
|
| static_cast<ITfUIElementSink*>(this),
|
| &ui_source_cookie_);
|
| + observer_ = observer;
|
| }
|
|
|
| // Resets the association, this function is safe to call if there is no
|
| @@ -238,12 +227,11 @@ class TsfEventRouterImpl : public TsfEventRouter,
|
| ui_source_.Release();
|
| }
|
| ui_source_cookie_ = TF_INVALID_COOKIE;
|
| - }
|
|
|
| - // Callback function fired when the text contents are updated.
|
| - TextUpdatedCallback text_updated_callback_;
|
| + observer_ = NULL;
|
| + }
|
|
|
| - CandidateWindowCountChangedCallback candidat_window_count_changed_callback_;
|
| + Observer* observer_;
|
|
|
| // A context associated with this class.
|
| base::win::ScopedComPtr<ITfContext> context_;
|
|
|