Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: ui/base/ime/input_method_auralinux.h

Issue 1068093002: Refactoring for InputMethodAuraLinux. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed nona's comments. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_BASE_IME_INPUT_METHOD_AURALINUX_H_ 5 #ifndef UI_BASE_IME_INPUT_METHOD_AURALINUX_H_
6 #define UI_BASE_IME_INPUT_METHOD_AURALINUX_H_ 6 #define UI_BASE_IME_INPUT_METHOD_AURALINUX_H_
7 7
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "ui/base/ime/composition_text.h"
9 #include "ui/base/ime/input_method_base.h" 10 #include "ui/base/ime/input_method_base.h"
10 #include "ui/base/ime/linux/linux_input_method_context.h" 11 #include "ui/base/ime/linux/linux_input_method_context.h"
11 12
12 namespace ui { 13 namespace ui {
13 14
14 // A ui::InputMethod implementation for Aura on Linux platforms. The 15 // A ui::InputMethod implementation for Aura on Linux platforms. The
15 // implementation details are separated to ui::LinuxInputMethodContext 16 // implementation details are separated to ui::LinuxInputMethodContext
16 // interface. 17 // interface.
17 class UI_BASE_IME_EXPORT InputMethodAuraLinux 18 class UI_BASE_IME_EXPORT InputMethodAuraLinux
18 : public InputMethodBase, 19 : public InputMethodBase,
19 public LinuxInputMethodContextDelegate { 20 public LinuxInputMethodContextDelegate {
20 public: 21 public:
21 explicit InputMethodAuraLinux(internal::InputMethodDelegate* delegate); 22 explicit InputMethodAuraLinux(internal::InputMethodDelegate* delegate);
22 ~InputMethodAuraLinux() override; 23 ~InputMethodAuraLinux() override;
23 24
25 LinuxInputMethodContext* GetContextForTesting(bool is_simple);
26
24 // Overriden from InputMethod. 27 // Overriden from InputMethod.
25 void Init(bool focused) override; 28 void Init(bool focused) override;
26 bool OnUntranslatedIMEMessage(const base::NativeEvent& event, 29 bool OnUntranslatedIMEMessage(const base::NativeEvent& event,
27 NativeEventResult* result) override; 30 NativeEventResult* result) override;
28 bool DispatchKeyEvent(const ui::KeyEvent& event) override; 31 bool DispatchKeyEvent(const ui::KeyEvent& event) override;
29 void OnTextInputTypeChanged(const TextInputClient* client) override; 32 void OnTextInputTypeChanged(const TextInputClient* client) override;
30 void OnCaretBoundsChanged(const TextInputClient* client) override; 33 void OnCaretBoundsChanged(const TextInputClient* client) override;
31 void CancelComposition(const TextInputClient* client) override; 34 void CancelComposition(const TextInputClient* client) override;
32 void OnInputLocaleChanged() override; 35 void OnInputLocaleChanged() override;
33 std::string GetInputLocale() override; 36 std::string GetInputLocale() override;
34 bool IsActive() override; 37 bool IsActive() override;
35 bool IsCandidatePopupOpen() const override; 38 bool IsCandidatePopupOpen() const override;
39 void OnFocus() override;
40 void OnBlur() override;
41
36 42
37 // Overriden from ui::LinuxInputMethodContextDelegate 43 // Overriden from ui::LinuxInputMethodContextDelegate
38 void OnCommit(const base::string16& text) override; 44 void OnCommit(const base::string16& text) override;
39 void OnPreeditChanged(const CompositionText& composition_text) override; 45 void OnPreeditChanged(const CompositionText& composition_text) override;
40 void OnPreeditEnd() override; 46 void OnPreeditEnd() override;
41 void OnPreeditStart() override; 47 void OnPreeditStart() override;
42 48
43 protected: 49 protected:
44 // Overridden from InputMethodBase. 50 // Overridden from InputMethodBase.
51 void OnWillChangeFocusedClient(TextInputClient* focused_before,
52 TextInputClient* focused) override;
45 void OnDidChangeFocusedClient(TextInputClient* focused_before, 53 void OnDidChangeFocusedClient(TextInputClient* focused_before,
46 TextInputClient* focused) override; 54 TextInputClient* focused) override;
47 55
48 private: 56 private:
49 // Allows to fire a VKEY_PROCESSKEY key event. 57 void ProcessInputMethodResult(const KeyEvent& key,
50 void AllowToFireProcessKey(const ui::KeyEvent& event); 58 bool filtered);
51 // Fires a VKEY_PROCESSKEY key event if allowed. 59 bool NeedInsertChar() const;
52 void MaybeFireProcessKey(); 60 void SendFakeProcessKeyEvent(bool pressed) const;
53 // Stops firing VKEY_PROCESSKEY key events. 61 void ConfirmCompositionText();
54 void StopFiringProcessKey(); 62 void UpdateContextFocusState();
63 void ResetContext();
55 64
56 scoped_ptr<LinuxInputMethodContext> input_method_context_; 65 scoped_ptr<LinuxInputMethodContext> context_;
66 scoped_ptr<LinuxInputMethodContext> context_simple_;
57 67
58 // IBus in async mode eagerly consumes all the key events first regardless of 68 base::string16 result_text_;
59 // whether the underlying IME consumes the key event or not, and makes 69
60 // gtk_im_context_filter_keypress() always return true, and later pushes 70 ui::CompositionText composition_;
61 // the key event back to the GDK event queue when it turns out that the 71
62 // underlying IME doesn't consume the key event. 72 // Indicates if |context_| and |context_simple_| are focused or not.
63 // 73 bool context_focused_;
64 // Thus we have to defer a decision whether or not to dispatch a 74
65 // VKEY_PROCESSKEY key event. Unlike other InputMethod's subclasses, 75 // Indicates if we are handling a key event.
66 // DispatchKeyEvent() in this class does not directly dispatch a 76 bool handling_key_event_;
67 // VKEY_PROCESSKEY event, OnCommit or OnPreedit{Start,Changed,End} dispatch 77
68 // a VKEY_PROCESSKEY event instead. 78 // Indicates if there is an ongoing composition text.
69 // 79 bool composing_text_;
70 // Because of this hack, there could be chances that we accidentally dispatch 80
71 // VKEY_PROCESSKEY events and other key events in out of order. 81 // Indicates if the composition text is changed or deleted.
72 // 82 bool composition_changed_;
73 // |allowed_to_fire_vkey_process_key_| is used not to dispatch a 83
74 // VKEY_PROCESSKEY event twice for a single key event. 84 // If it's true then all input method result received before the next key
75 bool allowed_to_fire_vkey_process_key_; 85 // event will be discarded.
76 int vkey_processkey_flags_; 86 bool suppress_next_result_;
77 87
78 DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinux); 88 DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinux);
79 }; 89 };
80 90
81 } // namespace ui 91 } // namespace ui
82 92
83 #endif // UI_BASE_IME_INPUT_METHOD_AURALINUX_H_ 93 #endif // UI_BASE_IME_INPUT_METHOD_AURALINUX_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698