Commit 3d3a5267 authored by Alex Newcomer's avatar Alex Newcomer Committed by Commit Bot

cros: Don't dismiss AppList on right click/two finger tap

UX request:
- Don't dismiss AppList if the right click/two finger tap
  is on the shield of the AppList.

- Added a test.

Bug: 805937
Change-Id: Id38b5872c3836680d08adbcb84922fe62201be19
Reviewed-on: https://chromium-review.googlesource.com/887282Reviewed-by: default avatarJenny Zhang <jennyz@chromium.org>
Commit-Queue: Alex Newcomer <newcomer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532023}
parent f77dd408
...@@ -755,26 +755,43 @@ TEST_F(AppListPresenterDelegateTest, WhitespaceQuery) { ...@@ -755,26 +755,43 @@ TEST_F(AppListPresenterDelegateTest, WhitespaceQuery) {
EXPECT_EQ(app_list::AppListViewState::PEEKING, view->app_list_state()); EXPECT_EQ(app_list::AppListViewState::PEEKING, view->app_list_state());
} }
// Tests that an unhandled tap/click in Peeking mode closes the app // Tests that an unhandled two finger tap/right click does not close the app
// list. // list, and an unhandled one finger tap/left click closes the app list in
// Peeking mode.
TEST_P(AppListPresenterDelegateTest, UnhandledEventOnPeeking) { TEST_P(AppListPresenterDelegateTest, UnhandledEventOnPeeking) {
app_list_presenter_impl()->ShowAndRunLoop(GetPrimaryDisplayId()); app_list_presenter_impl()->ShowAndRunLoop(GetPrimaryDisplayId());
app_list::AppListView* view = app_list_presenter_impl()->GetView(); app_list::AppListView* view = app_list_presenter_impl()->GetView();
ASSERT_EQ(app_list::AppListViewState::PEEKING, view->app_list_state()); ASSERT_EQ(app_list::AppListViewState::PEEKING, view->app_list_state());
// Tap or click in the empty space below the searchbox. The app list should // Two finger tap or right click in the empty space below the searchbox. The
// close. // app list should not close.
gfx::Point empty_space = gfx::Point empty_space =
view->search_box_view()->GetBoundsInScreen().bottom_left(); view->search_box_view()->GetBoundsInScreen().bottom_left();
empty_space.Offset(0, 10); empty_space.Offset(0, 10);
ui::test::EventGenerator& generator = GetEventGenerator(); ui::test::EventGenerator& generator = GetEventGenerator();
if (TestMouseEventParam()) {
generator.MoveMouseTo(empty_space);
generator.PressRightButton();
generator.ReleaseRightButton();
} else {
ui::TouchEvent two_finger_tap(
ui::ET_GESTURE_TWO_FINGER_TAP, empty_space, base::TimeTicks::Now(),
ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH));
generator.Dispatch(&two_finger_tap);
}
EXPECT_EQ(app_list::AppListViewState::PEEKING, view->app_list_state());
EXPECT_TRUE(app_list_presenter_impl()->IsVisible());
// One finger tap or left click in the empty space below the searchbox. The
// app list should close.
if (TestMouseEventParam()) { if (TestMouseEventParam()) {
generator.MoveMouseTo(empty_space); generator.MoveMouseTo(empty_space);
generator.ClickLeftButton(); generator.ClickLeftButton();
generator.ReleaseLeftButton();
} else { } else {
generator.GestureTapAt(empty_space); generator.GestureTapAt(empty_space);
} }
EXPECT_EQ(app_list::AppListViewState::CLOSED, view->app_list_state()); EXPECT_EQ(app_list::AppListViewState::CLOSED, view->app_list_state());
EXPECT_FALSE(app_list_presenter_impl()->IsVisible()); EXPECT_FALSE(app_list_presenter_impl()->IsVisible());
} }
......
...@@ -521,6 +521,14 @@ void AppListView::HandleClickOrTap(ui::LocatedEvent* event) { ...@@ -521,6 +521,14 @@ void AppListView::HandleClickOrTap(ui::LocatedEvent* event) {
return; return;
} }
// No-op if the event was a right-click or two-finger tap.
if ((event->IsGestureEvent() &&
event->AsGestureEvent()->type() == ui::ET_GESTURE_TWO_FINGER_TAP) ||
(event->IsMouseEvent() &&
event->AsMouseEvent()->IsOnlyRightMouseButton())) {
return;
}
if (!search_box_view_->is_search_box_active()) { if (!search_box_view_->is_search_box_active()) {
Dismiss(); Dismiss();
return; return;
......
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