Commit 49bda835 authored by Edin Kadric's avatar Edin Kadric Committed by Commit Bot

Enable EditableCombobox on Linux.

This worked seamlessly; I only had to update unit tests:

On Linux, Alt+left/right shouldn't do anything to be consistent with the
behavior of Textfield.

Also, on Mac Alt+left/right really moves between words, not to the
beginning/end of the text. On Linux that's achieved with
Ctrl+left/right.

Bug: 923660
Change-Id: I891e7164e6dd2b88070915715d9e735321fd9b7e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1503617Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Edin Kadric <edinkadric@google.com>
Cr-Commit-Position: refs/heads/master@{#638228}
parent bdaf8b7e
...@@ -115,6 +115,7 @@ jumbo_component("views") { ...@@ -115,6 +115,7 @@ jumbo_component("views") {
"controls/button/toggle_button.h", "controls/button/toggle_button.h",
"controls/combobox/combobox.h", "controls/combobox/combobox.h",
"controls/combobox/combobox_listener.h", "controls/combobox/combobox_listener.h",
"controls/editable_combobox/editable_combobox.h",
"controls/editable_combobox/editable_combobox_listener.h", "controls/editable_combobox/editable_combobox_listener.h",
"controls/focus_ring.h", "controls/focus_ring.h",
"controls/focusable_border.h", "controls/focusable_border.h",
...@@ -320,6 +321,7 @@ jumbo_component("views") { ...@@ -320,6 +321,7 @@ jumbo_component("views") {
"controls/button/radio_button.cc", "controls/button/radio_button.cc",
"controls/button/toggle_button.cc", "controls/button/toggle_button.cc",
"controls/combobox/combobox.cc", "controls/combobox/combobox.cc",
"controls/editable_combobox/editable_combobox.cc",
"controls/focus_ring.cc", "controls/focus_ring.cc",
"controls/focusable_border.cc", "controls/focusable_border.cc",
"controls/image_view.cc", "controls/image_view.cc",
...@@ -559,6 +561,10 @@ jumbo_component("views") { ...@@ -559,6 +561,10 @@ jumbo_component("views") {
"linux_ui/status_icon_linux.cc", "linux_ui/status_icon_linux.cc",
] ]
sources += [ "widget/desktop_aura/desktop_window_tree_host_chromeos.cc" ] sources += [ "widget/desktop_aura/desktop_window_tree_host_chromeos.cc" ]
# TODO(edinkadric): Add EditableCombobox support on ChromeOS.
public -= [ "controls/editable_combobox/editable_combobox.h" ]
sources -= [ "controls/editable_combobox/editable_combobox.cc" ]
} }
if (is_win) { if (is_win) {
...@@ -590,6 +596,10 @@ jumbo_component("views") { ...@@ -590,6 +596,10 @@ jumbo_component("views") {
"//third_party/iaccessible2", "//third_party/iaccessible2",
"//third_party/wtl", "//third_party/wtl",
] ]
# TODO(edinkadric): Add EditableCombobox support on Windows.
public -= [ "controls/editable_combobox/editable_combobox.h" ]
sources -= [ "controls/editable_combobox/editable_combobox.cc" ]
} }
if (use_ozone) { if (use_ozone) {
...@@ -766,12 +776,8 @@ jumbo_component("views") { ...@@ -766,12 +776,8 @@ jumbo_component("views") {
} }
if (is_mac) { if (is_mac) {
# TODO(edinkadric): Add EditableCombobox support on other OSes and move
# editable_combobox_unittest.h and .cc to be included for them as well.
public += [ "controls/editable_combobox/editable_combobox.h" ]
sources -= [ "controls/views_text_services_context_menu.cc" ] sources -= [ "controls/views_text_services_context_menu.cc" ]
sources += [ sources += [
"controls/editable_combobox/editable_combobox.cc",
"controls/menu/menu_pre_target_handler_mac.h", "controls/menu/menu_pre_target_handler_mac.h",
"controls/menu/menu_pre_target_handler_mac.mm", "controls/menu/menu_pre_target_handler_mac.mm",
] ]
...@@ -1011,6 +1017,7 @@ test("views_unittests") { ...@@ -1011,6 +1017,7 @@ test("views_unittests") {
"controls/button/radio_button_unittest.cc", "controls/button/radio_button_unittest.cc",
"controls/button/toggle_button_unittest.cc", "controls/button/toggle_button_unittest.cc",
"controls/combobox/combobox_unittest.cc", "controls/combobox/combobox_unittest.cc",
"controls/editable_combobox/editable_combobox_unittest.cc",
"controls/image_view_unittest.cc", "controls/image_view_unittest.cc",
"controls/label_unittest.cc", "controls/label_unittest.cc",
"controls/menu/menu_controller_unittest.cc", "controls/menu/menu_controller_unittest.cc",
...@@ -1137,6 +1144,11 @@ test("views_unittests") { ...@@ -1137,6 +1144,11 @@ test("views_unittests") {
] ]
} }
if (is_chromeos) {
# TODO(edinkadric): Add EditableCombobox support on ChromeOS.
sources -= [ "controls/editable_combobox/editable_combobox_unittest.cc" ]
}
if (is_win) { if (is_win) {
public_deps = [ public_deps = [
"//build/win:default_exe_manifest", "//build/win:default_exe_manifest",
...@@ -1154,6 +1166,9 @@ test("views_unittests") { ...@@ -1154,6 +1166,9 @@ test("views_unittests") {
"accessibility/view_ax_platform_node_delegate_win_unittest.cc", "accessibility/view_ax_platform_node_delegate_win_unittest.cc",
"win/pen_event_processor_unittest.cc", "win/pen_event_processor_unittest.cc",
] ]
# TODO(edinkadric): Add EditableCombobox support on Windows.
sources -= [ "controls/editable_combobox/editable_combobox_unittest.cc" ]
} }
if (has_native_accessibility) { if (has_native_accessibility) {
...@@ -1167,9 +1182,6 @@ test("views_unittests") { ...@@ -1167,9 +1182,6 @@ test("views_unittests") {
# views_unittests not yet compiling on Mac. http://crbug.com/378134 # views_unittests not yet compiling on Mac. http://crbug.com/378134
sources -= [ "controls/native/native_view_host_unittest.cc" ] sources -= [ "controls/native/native_view_host_unittest.cc" ]
# TODO(edinkadric): Add EditableCombobox support on other OSes and enable
# editable_combobox_unittest.cc on them.
sources += [ "controls/editable_combobox/editable_combobox_unittest.cc" ]
public_deps = [ public_deps = [
"//ui/accelerated_widget_mac", "//ui/accelerated_widget_mac",
"//ui/views_bridge_mac:views_bridge_mac", "//ui/views_bridge_mac:views_bridge_mac",
......
...@@ -263,23 +263,24 @@ TEST_F(EditableComboboxTest, EndOrHomeMovesToBeginningOrEndOfText) { ...@@ -263,23 +263,24 @@ TEST_F(EditableComboboxTest, EndOrHomeMovesToBeginningOrEndOfText) {
EXPECT_EQ(ASCIIToUTF16("xabcy"), combobox_->GetText()); EXPECT_EQ(ASCIIToUTF16("xabcy"), combobox_->GetText());
} }
TEST_F(EditableComboboxTest, AltLeftOrRightMovesToBeginningOrEndOfText) { #if defined(OS_MACOSX)
TEST_F(EditableComboboxTest, AltLeftOrRightMovesToNextWords) {
InitEditableCombobox(); InitEditableCombobox();
combobox_->GetTextfieldForTest()->RequestFocus(); combobox_->GetTextfieldForTest()->RequestFocus();
SendKeyEvent(ui::VKEY_A); combobox_->SetTextForTest(ASCIIToUTF16("foo bar foobar"));
SendKeyEvent(ui::VKEY_B); SendKeyEvent(ui::VKEY_LEFT, /*alt=*/true, /*shift=*/false,
SendKeyEvent(ui::VKEY_C); /*ctrl_cmd=*/false);
SendKeyEvent(ui::VKEY_LEFT, /*alt=*/true, /*shift=*/false, SendKeyEvent(ui::VKEY_LEFT, /*alt=*/true, /*shift=*/false,
/*ctrl_cmd=*/false); /*ctrl_cmd=*/false);
SendKeyEvent(ui::VKEY_X); SendKeyEvent(ui::VKEY_X);
SendKeyEvent(ui::VKEY_RIGHT, /*alt=*/true, /*shift=*/false, SendKeyEvent(ui::VKEY_RIGHT, /*alt=*/true, /*shift=*/false,
/*ctrl_cmd=*/false); /*ctrl_cmd=*/false);
SendKeyEvent(ui::VKEY_Y); SendKeyEvent(ui::VKEY_Y);
EXPECT_EQ(ASCIIToUTF16("xabcy"), combobox_->GetText()); EXPECT_EQ(ASCIIToUTF16("foo xbary foobar"), combobox_->GetText());
} }
// TODO(edinkadric): This doesn't work anymore. Fix it before submitting.
TEST_F(EditableComboboxTest, CtrlLeftOrRightMovesToBeginningOrEndOfText) { TEST_F(EditableComboboxTest, CtrlLeftOrRightMovesToBeginningOrEndOfText) {
InitEditableCombobox(); InitEditableCombobox();
combobox_->GetTextfieldForTest()->RequestFocus(); combobox_->GetTextfieldForTest()->RequestFocus();
...@@ -296,6 +297,43 @@ TEST_F(EditableComboboxTest, CtrlLeftOrRightMovesToBeginningOrEndOfText) { ...@@ -296,6 +297,43 @@ TEST_F(EditableComboboxTest, CtrlLeftOrRightMovesToBeginningOrEndOfText) {
EXPECT_EQ(ASCIIToUTF16("xabcy"), combobox_->GetText()); EXPECT_EQ(ASCIIToUTF16("xabcy"), combobox_->GetText());
} }
#else
TEST_F(EditableComboboxTest, AltLeftOrRightDoesNothing) {
InitEditableCombobox();
combobox_->GetTextfieldForTest()->RequestFocus();
SendKeyEvent(ui::VKEY_A);
SendKeyEvent(ui::VKEY_B);
SendKeyEvent(ui::VKEY_C);
SendKeyEvent(ui::VKEY_LEFT, /*alt=*/true, /*shift=*/false,
/*ctrl_cmd=*/false);
SendKeyEvent(ui::VKEY_X);
SendKeyEvent(ui::VKEY_LEFT);
SendKeyEvent(ui::VKEY_RIGHT, /*alt=*/true, /*shift=*/false,
/*ctrl_cmd=*/false);
SendKeyEvent(ui::VKEY_Y);
EXPECT_EQ(ASCIIToUTF16("abcyx"), combobox_->GetText());
}
TEST_F(EditableComboboxTest, CtrlLeftOrRightMovesToNextWords) {
InitEditableCombobox();
combobox_->GetTextfieldForTest()->RequestFocus();
combobox_->SetTextForTest(ASCIIToUTF16("foo bar foobar"));
SendKeyEvent(ui::VKEY_LEFT, /*alt=*/false, /*shift=*/false,
/*ctrl_cmd=*/true);
SendKeyEvent(ui::VKEY_LEFT, /*alt=*/false, /*shift=*/false,
/*ctrl_cmd=*/true);
SendKeyEvent(ui::VKEY_X);
SendKeyEvent(ui::VKEY_RIGHT, /*alt=*/false, /*shift=*/false,
/*ctrl_cmd=*/true);
SendKeyEvent(ui::VKEY_Y);
EXPECT_EQ(ASCIIToUTF16("foo xbary foobar"), combobox_->GetText());
}
#endif
TEST_F(EditableComboboxTest, ShiftLeftOrRightSelectsCharInTextfield) { TEST_F(EditableComboboxTest, ShiftLeftOrRightSelectsCharInTextfield) {
InitEditableCombobox(); InitEditableCombobox();
combobox_->GetTextfieldForTest()->RequestFocus(); combobox_->GetTextfieldForTest()->RequestFocus();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment