OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "ui/base/ime/input_method_chromeos.h" | 5 #include "ui/base/ime/input_method_chromeos.h" |
6 | 6 |
7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
8 #undef Bool | 8 #undef Bool |
9 #undef FocusIn | 9 #undef FocusIn |
10 #undef FocusOut | 10 #undef FocusOut |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 process_key_event_post_ime_call_count_(0) { | 66 process_key_event_post_ime_call_count_(0) { |
67 } | 67 } |
68 | 68 |
69 struct ProcessKeyEventPostIMEArgs { | 69 struct ProcessKeyEventPostIMEArgs { |
70 ProcessKeyEventPostIMEArgs() : event(NULL), handled(false) {} | 70 ProcessKeyEventPostIMEArgs() : event(NULL), handled(false) {} |
71 const ui::KeyEvent* event; | 71 const ui::KeyEvent* event; |
72 bool handled; | 72 bool handled; |
73 }; | 73 }; |
74 | 74 |
75 // Overridden from InputMethodChromeOS: | 75 // Overridden from InputMethodChromeOS: |
76 void ProcessKeyEventPostIME(const ui::KeyEvent& key_event, | 76 void ProcessKeyEventPostIME(ui::KeyEvent* key_event, |
77 bool handled) override { | 77 bool handled) override { |
78 InputMethodChromeOS::ProcessKeyEventPostIME(key_event, handled); | 78 InputMethodChromeOS::ProcessKeyEventPostIME(key_event, handled); |
79 process_key_event_post_ime_args_.event = &key_event; | 79 process_key_event_post_ime_args_.event = key_event; |
80 process_key_event_post_ime_args_.handled = handled; | 80 process_key_event_post_ime_args_.handled = handled; |
81 ++process_key_event_post_ime_call_count_; | 81 ++process_key_event_post_ime_call_count_; |
82 } | 82 } |
83 | 83 |
84 void ResetCallCount() { | 84 void ResetCallCount() { |
85 process_key_event_post_ime_call_count_ = 0; | 85 process_key_event_post_ime_call_count_ = 0; |
86 } | 86 } |
87 | 87 |
88 const ProcessKeyEventPostIMEArgs& process_key_event_post_ime_args() const { | 88 const ProcessKeyEventPostIMEArgs& process_key_event_post_ime_args() const { |
89 return process_key_event_post_ime_args_; | 89 return process_key_event_post_ime_args_; |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 chromeos::IMEBridge::Get()->SetCurrentEngineHandler(NULL); | 229 chromeos::IMEBridge::Get()->SetCurrentEngineHandler(NULL); |
230 chromeos::IMEBridge::Get()->SetCandidateWindowHandler(NULL); | 230 chromeos::IMEBridge::Get()->SetCandidateWindowHandler(NULL); |
231 mock_ime_engine_handler_.reset(); | 231 mock_ime_engine_handler_.reset(); |
232 mock_ime_candidate_window_handler_.reset(); | 232 mock_ime_candidate_window_handler_.reset(); |
233 chromeos::IMEBridge::Shutdown(); | 233 chromeos::IMEBridge::Shutdown(); |
234 | 234 |
235 ResetFlags(); | 235 ResetFlags(); |
236 } | 236 } |
237 | 237 |
238 // Overridden from ui::internal::InputMethodDelegate: | 238 // Overridden from ui::internal::InputMethodDelegate: |
239 bool DispatchKeyEventPostIME(const ui::KeyEvent& event) override { | 239 ui::EventDispatchDetails DispatchKeyEventPostIME( |
240 dispatched_key_event_ = event; | 240 ui::KeyEvent* event) override { |
241 return stop_propagation_post_ime_; | 241 dispatched_key_event_ = *event; |
| 242 if (stop_propagation_post_ime_) |
| 243 event->StopPropagation(); |
| 244 return ui::EventDispatchDetails(); |
242 } | 245 } |
243 | 246 |
244 // Overridden from ui::TextInputClient: | 247 // Overridden from ui::TextInputClient: |
245 void SetCompositionText(const CompositionText& composition) override { | 248 void SetCompositionText(const CompositionText& composition) override { |
246 composition_text_ = composition; | 249 composition_text_ = composition; |
247 } | 250 } |
248 void ConfirmCompositionText() override { | 251 void ConfirmCompositionText() override { |
249 confirmed_text_ = composition_text_; | 252 confirmed_text_ = composition_text_; |
250 composition_text_.Clear(); | 253 composition_text_.Clear(); |
251 } | 254 } |
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 DISALLOW_COPY_AND_ASSIGN(InputMethodChromeOSKeyEventTest); | 879 DISALLOW_COPY_AND_ASSIGN(InputMethodChromeOSKeyEventTest); |
877 }; | 880 }; |
878 | 881 |
879 TEST_F(InputMethodChromeOSKeyEventTest, KeyEventDelayResponseTest) { | 882 TEST_F(InputMethodChromeOSKeyEventTest, KeyEventDelayResponseTest) { |
880 const int kFlags = ui::EF_SHIFT_DOWN; | 883 const int kFlags = ui::EF_SHIFT_DOWN; |
881 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_A, kFlags); | 884 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_A, kFlags); |
882 | 885 |
883 // Do key event. | 886 // Do key event. |
884 input_type_ = TEXT_INPUT_TYPE_TEXT; | 887 input_type_ = TEXT_INPUT_TYPE_TEXT; |
885 ime_->OnTextInputTypeChanged(this); | 888 ime_->OnTextInputTypeChanged(this); |
886 ime_->DispatchKeyEvent(event); | 889 ime_->DispatchKeyEvent(&event); |
887 | 890 |
888 // Check before state. | 891 // Check before state. |
889 const ui::KeyEvent* key_event = | 892 const ui::KeyEvent* key_event = |
890 mock_ime_engine_handler_->last_processed_key_event(); | 893 mock_ime_engine_handler_->last_processed_key_event(); |
891 EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count()); | 894 EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count()); |
892 EXPECT_EQ(ui::VKEY_A, key_event->key_code()); | 895 EXPECT_EQ(ui::VKEY_A, key_event->key_code()); |
893 EXPECT_EQ(kFlags, key_event->flags()); | 896 EXPECT_EQ(kFlags, key_event->flags()); |
894 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); | 897 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); |
895 | 898 |
896 (static_cast<chromeos::IMEInputContextHandlerInterface*>(ime_.get())) | 899 (static_cast<chromeos::IMEInputContextHandlerInterface*>(ime_.get())) |
(...skipping 17 matching lines...) Expand all Loading... |
914 | 917 |
915 TEST_F(InputMethodChromeOSKeyEventTest, MultiKeyEventDelayResponseTest) { | 918 TEST_F(InputMethodChromeOSKeyEventTest, MultiKeyEventDelayResponseTest) { |
916 // Preparation | 919 // Preparation |
917 input_type_ = TEXT_INPUT_TYPE_TEXT; | 920 input_type_ = TEXT_INPUT_TYPE_TEXT; |
918 ime_->OnTextInputTypeChanged(this); | 921 ime_->OnTextInputTypeChanged(this); |
919 | 922 |
920 const int kFlags = ui::EF_SHIFT_DOWN; | 923 const int kFlags = ui::EF_SHIFT_DOWN; |
921 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_B, kFlags); | 924 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_B, kFlags); |
922 | 925 |
923 // Do key event. | 926 // Do key event. |
924 ime_->DispatchKeyEvent(event); | 927 ime_->DispatchKeyEvent(&event); |
925 const ui::KeyEvent* key_event = | 928 const ui::KeyEvent* key_event = |
926 mock_ime_engine_handler_->last_processed_key_event(); | 929 mock_ime_engine_handler_->last_processed_key_event(); |
927 EXPECT_EQ(ui::VKEY_B, key_event->key_code()); | 930 EXPECT_EQ(ui::VKEY_B, key_event->key_code()); |
928 EXPECT_EQ(kFlags, key_event->flags()); | 931 EXPECT_EQ(kFlags, key_event->flags()); |
929 | 932 |
930 KeyEventCallback first_callback = | 933 KeyEventCallback first_callback = |
931 mock_ime_engine_handler_->last_passed_callback(); | 934 mock_ime_engine_handler_->last_passed_callback(); |
932 | 935 |
933 // Do key event again. | 936 // Do key event again. |
934 ui::KeyEvent event2(ui::ET_KEY_PRESSED, ui::VKEY_C, kFlags); | 937 ui::KeyEvent event2(ui::ET_KEY_PRESSED, ui::VKEY_C, kFlags); |
935 | 938 |
936 ime_->DispatchKeyEvent(event2); | 939 ime_->DispatchKeyEvent(&event2); |
937 const ui::KeyEvent* key_event2 = | 940 const ui::KeyEvent* key_event2 = |
938 mock_ime_engine_handler_->last_processed_key_event(); | 941 mock_ime_engine_handler_->last_processed_key_event(); |
939 EXPECT_EQ(ui::VKEY_C, key_event2->key_code()); | 942 EXPECT_EQ(ui::VKEY_C, key_event2->key_code()); |
940 EXPECT_EQ(kFlags, key_event2->flags()); | 943 EXPECT_EQ(kFlags, key_event2->flags()); |
941 | 944 |
942 // Check before state. | 945 // Check before state. |
943 EXPECT_EQ(2, | 946 EXPECT_EQ(2, |
944 mock_ime_engine_handler_->process_key_event_call_count()); | 947 mock_ime_engine_handler_->process_key_event_call_count()); |
945 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); | 948 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); |
946 | 949 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
980 | 983 |
981 TEST_F(InputMethodChromeOSKeyEventTest, StopPropagationTest) { | 984 TEST_F(InputMethodChromeOSKeyEventTest, StopPropagationTest) { |
982 // Preparation | 985 // Preparation |
983 input_type_ = TEXT_INPUT_TYPE_TEXT; | 986 input_type_ = TEXT_INPUT_TYPE_TEXT; |
984 ime_->OnTextInputTypeChanged(this); | 987 ime_->OnTextInputTypeChanged(this); |
985 | 988 |
986 // Do key event with event being stopped propagation. | 989 // Do key event with event being stopped propagation. |
987 stop_propagation_post_ime_ = true; | 990 stop_propagation_post_ime_ = true; |
988 ui::KeyEvent eventA(ui::ET_KEY_PRESSED, ui::VKEY_A, EF_NONE); | 991 ui::KeyEvent eventA(ui::ET_KEY_PRESSED, ui::VKEY_A, EF_NONE); |
989 eventA.set_character(L'A'); | 992 eventA.set_character(L'A'); |
990 ime_->DispatchKeyEvent(eventA); | 993 ime_->DispatchKeyEvent(&eventA); |
991 mock_ime_engine_handler_->last_passed_callback().Run(false); | 994 mock_ime_engine_handler_->last_passed_callback().Run(false); |
992 | 995 |
993 const ui::KeyEvent* key_event = | 996 const ui::KeyEvent* key_event = |
994 mock_ime_engine_handler_->last_processed_key_event(); | 997 mock_ime_engine_handler_->last_processed_key_event(); |
995 EXPECT_EQ(ui::VKEY_A, key_event->key_code()); | 998 EXPECT_EQ(ui::VKEY_A, key_event->key_code()); |
996 EXPECT_EQ(0, inserted_char_); | 999 EXPECT_EQ(0, inserted_char_); |
997 | 1000 |
998 // Do key event with event not being stopped propagation. | 1001 // Do key event with event not being stopped propagation. |
999 stop_propagation_post_ime_ = false; | 1002 stop_propagation_post_ime_ = false; |
1000 ime_->DispatchKeyEvent(eventA); | 1003 ime_->DispatchKeyEvent(&eventA); |
1001 mock_ime_engine_handler_->last_passed_callback().Run(false); | 1004 mock_ime_engine_handler_->last_passed_callback().Run(false); |
1002 | 1005 |
1003 key_event = mock_ime_engine_handler_->last_processed_key_event(); | 1006 key_event = mock_ime_engine_handler_->last_processed_key_event(); |
1004 EXPECT_EQ(ui::VKEY_A, key_event->key_code()); | 1007 EXPECT_EQ(ui::VKEY_A, key_event->key_code()); |
1005 EXPECT_EQ(L'A', inserted_char_); | 1008 EXPECT_EQ(L'A', inserted_char_); |
1006 } | 1009 } |
1007 | 1010 |
1008 } // namespace ui | 1011 } // namespace ui |
OLD | NEW |