1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_BASE_IME_INPUT_METHOD_TSF_H_ 6 #define UI_BASE_IME_INPUT_METHOD_TSF_H_ 7 8 #include <windows.h> 9 10 #include <string> 11 12 #include "base/memory/scoped_ptr.h" 13 #include "ui/base/ime/input_method_win.h" 14 15 namespace ui { 16 17 class TSFEventRouter; 18 19 // An InputMethod implementation based on Windows TSF API. 20 class UI_EXPORT InputMethodTSF : public InputMethodWin { 21 public: 22 InputMethodTSF(internal::InputMethodDelegate* delegate, 23 HWND toplevel_window_handle); 24 virtual ~InputMethodTSF(); 25 26 // Overridden from InputMethod: 27 virtual void OnFocus() OVERRIDE; 28 virtual void OnBlur() OVERRIDE; 29 virtual bool OnUntranslatedIMEMessage(const base::NativeEvent& event, 30 NativeEventResult* result) OVERRIDE; 31 virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE; 32 virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE; 33 virtual void CancelComposition(const TextInputClient* client) OVERRIDE; 34 virtual void SetFocusedTextInputClient(TextInputClient* client) OVERRIDE; 35 virtual bool IsCandidatePopupOpen() const OVERRIDE; 36 37 // Overridden from InputMethodBase: 38 virtual void OnWillChangeFocusedClient(TextInputClient* focused_before, 39 TextInputClient* focused) OVERRIDE; 40 virtual void OnDidChangeFocusedClient(TextInputClient* focused_before, 41 TextInputClient* focused) OVERRIDE; 42 43 private: 44 class TSFEventObserver; 45 46 // Asks the client to confirm current composition text. 47 void ConfirmCompositionText(); 48 49 // Returns true if the Win32 native window bound to |client| has Win32 input 50 // focus. 51 bool IsWindowFocused(const TextInputClient* client) const; 52 53 // TSF event router and observer. 54 scoped_ptr<TSFEventObserver> tsf_event_observer_; 55 scoped_ptr<TSFEventRouter> tsf_event_router_; 56 57 DISALLOW_COPY_AND_ASSIGN(InputMethodTSF); 58 }; 59 60 } // namespace ui 61 62 #endif // UI_BASE_IME_INPUT_METHOD_TSF_H_ 63