summaryrefslogtreecommitdiffstats
path: root/chromium/ui/base/ime/input_method_auralinux.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/base/ime/input_method_auralinux.h')
-rw-r--r--chromium/ui/base/ime/input_method_auralinux.h34
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);
};