diff options
Diffstat (limited to 'chromium/ui/base/ime/input_method_auralinux.h')
-rw-r--r-- | chromium/ui/base/ime/input_method_auralinux.h | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/chromium/ui/base/ime/input_method_auralinux.h b/chromium/ui/base/ime/input_method_auralinux.h index 87222a7bd05..de5c347be21 100644 --- a/chromium/ui/base/ime/input_method_auralinux.h +++ b/chromium/ui/base/ime/input_method_auralinux.h @@ -20,11 +20,6 @@ class InputMethodAuraLinux : public InputMethodBase, explicit InputMethodAuraLinux(internal::InputMethodDelegate* delegate); virtual ~InputMethodAuraLinux(); - // Initializes input methods. This function must be called once prior to - // any use of this instance. This function is supposed to be called from - // ui::InitializeInputMethod(). - static void Initialize(); - // Overriden from InputMethod. virtual void Init(bool focused) OVERRIDE; virtual bool OnUntranslatedIMEMessage(const base::NativeEvent& event, @@ -35,7 +30,6 @@ class InputMethodAuraLinux : public InputMethodBase, virtual void CancelComposition(const TextInputClient* client) OVERRIDE; virtual void OnInputLocaleChanged() OVERRIDE; virtual std::string GetInputLocale() OVERRIDE; - virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE; virtual bool IsActive() OVERRIDE; virtual bool IsCandidatePopupOpen() const OVERRIDE; @@ -51,8 +45,36 @@ class InputMethodAuraLinux : public InputMethodBase, virtual void OnDidChangeFocusedClient(TextInputClient* focused_before, TextInputClient* focused) OVERRIDE; + private: + // Allows to fire a VKEY_PROCESSKEY key event. + void AllowToFireProcessKey(const ui::KeyEvent& event); + // Fires a VKEY_PROCESSKEY key event if allowed. + void MaybeFireProcessKey(); + // Stops firing VKEY_PROCESSKEY key events. + void StopFiringProcessKey(); + scoped_ptr<LinuxInputMethodContext> input_method_context_; + // IBus in async mode eagerly consumes all the key events first regardless of + // whether the underlying IME consumes the key event or not, and makes + // gtk_im_context_filter_keypress() always return true, and later pushes + // the key event back to the GDK event queue when it turns out that the + // underlying IME doesn't consume the key event. + // + // Thus we have to defer a decision whether or not to dispatch a + // VKEY_PROCESSKEY key event. Unlike other InputMethod's subclasses, + // DispatchKeyEvent() in this class does not directly dispatch a + // VKEY_PROCESSKEY event, OnCommit or OnPreedit{Start,Changed,End} dispatch + // a VKEY_PROCESSKEY event instead. + // + // Because of this hack, there could be chances that we accidentally dispatch + // VKEY_PROCESSKEY events and other key events in out of order. + // + // |allowed_to_fire_vkey_process_key_| is used not to dispatch a + // VKEY_PROCESSKEY event twice for a single key event. + bool allowed_to_fire_vkey_process_key_; + int vkey_processkey_flags_; + DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinux); }; |