diff options
author | skuhne@chromium.org <skuhne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-24 17:12:33 +0000 |
---|---|---|
committer | skuhne@chromium.org <skuhne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-24 17:12:33 +0000 |
commit | 891414750ddf08ea9a808d32c9859f0359da3ae6 (patch) | |
tree | 03961028992ff8199dfc3e092313aaf561f3ed80 /ash | |
parent | 920a1688f3a73ad505255f394abbfab5573a8bb2 (diff) | |
download | chromium_src-891414750ddf08ea9a808d32c9859f0359da3ae6.zip chromium_src-891414750ddf08ea9a808d32c9859f0359da3ae6.tar.gz chromium_src-891414750ddf08ea9a808d32c9859f0359da3ae6.tar.bz2 |
Addresses right mouse button click while left button drag is leaving button
BUG=143755
TEST=unit test
Review URL: https://chromiumcodereview.appspot.com/10867025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153235 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/custom_frame_view_ash_unittest.cc | 57 | ||||
-rw-r--r-- | ash/wm/workspace/frame_maximize_button.cc | 15 |
2 files changed, 68 insertions, 4 deletions
diff --git a/ash/wm/custom_frame_view_ash_unittest.cc b/ash/wm/custom_frame_view_ash_unittest.cc index ff303bf..3dec675 100644 --- a/ash/wm/custom_frame_view_ash_unittest.cc +++ b/ash/wm/custom_frame_view_ash_unittest.cc @@ -397,5 +397,62 @@ TEST_F(CustomFrameViewAshTest, MaximizeKeepFocus) { EXPECT_EQ(active, window->GetFocusManager()->GetFocusedWindow()); } +// Test that only the left button will activate the maximize button. +TEST_F(CustomFrameViewAshTest, OnlyLeftButtonMaximizes) { + views::Widget* widget = CreateWidget(); + aura::Window* window = widget->GetNativeWindow(); + CustomFrameViewAsh* frame = custom_frame_view_ash(widget); + CustomFrameViewAsh::TestApi test(frame); + ash::FrameMaximizeButton* maximize_button = test.maximize_button(); + maximize_button->set_bubble_appearance_delay_ms(0); + gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint(); + gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100); + + aura::test::EventGenerator generator(window->GetRootWindow(), off_pos); + EXPECT_FALSE(maximize_button->maximizer()); + EXPECT_TRUE(ash::wm::IsWindowNormal(window)); + EXPECT_FALSE(ash::wm::IsWindowMaximized(window)); + + // Move the mouse cursor over the button. + generator.MoveMouseTo(button_pos); + EXPECT_TRUE(maximize_button->maximizer()); + EXPECT_FALSE(maximize_button->phantom_window_open()); + + // After pressing the left button the button should get triggered. + generator.PressLeftButton(); + RunAllPendingInMessageLoop(); + EXPECT_TRUE(maximize_button->is_snap_enabled()); + EXPECT_FALSE(ash::wm::IsWindowMaximized(window)); + + // Pressing the right button then should cancel the operation. + generator.PressRightButton(); + RunAllPendingInMessageLoop(); + EXPECT_FALSE(maximize_button->maximizer()); + + // After releasing the second button the window shouldn't be maximized. + generator.ReleaseRightButton(); + generator.ReleaseLeftButton(); + RunAllPendingInMessageLoop(); + EXPECT_FALSE(ash::wm::IsWindowMaximized(window)); + + // Second experiment: Starting with right should also not trigger. + generator.MoveMouseTo(off_pos); + generator.MoveMouseTo(button_pos); + EXPECT_TRUE(maximize_button->maximizer()); + + // Pressing first the right button should not activate. + generator.PressRightButton(); + RunAllPendingInMessageLoop(); + EXPECT_FALSE(maximize_button->is_snap_enabled()); + + // Pressing then additionally the left button shouldn't activate either. + generator.PressLeftButton(); + RunAllPendingInMessageLoop(); + EXPECT_FALSE(maximize_button->is_snap_enabled()); + generator.ReleaseRightButton(); + generator.ReleaseLeftButton(); + EXPECT_FALSE(ash::wm::IsWindowMaximized(window)); +} + } // namespace internal } // namespace ash diff --git a/ash/wm/workspace/frame_maximize_button.cc b/ash/wm/workspace/frame_maximize_button.cc index d76a71d..32064d2 100644 --- a/ash/wm/workspace/frame_maximize_button.cc +++ b/ash/wm/workspace/frame_maximize_button.cc @@ -189,9 +189,15 @@ void FrameMaximizeButton::OnWindowDestroying(aura::Window* window) { } bool FrameMaximizeButton::OnMousePressed(const ui::MouseEvent& event) { - is_snap_enabled_ = event.IsLeftMouseButton(); - if (is_snap_enabled_) - ProcessStartEvent(event); + // If we are already in a mouse click / drag operation, a second button down + // call will cancel (this addresses crbug.com/143755). + if (is_snap_enabled_) { + Cancel(false); + } else { + is_snap_enabled_ = event.IsOnlyLeftMouseButton(); + if (is_snap_enabled_) + ProcessStartEvent(event); + } ImageButton::OnMousePressed(event); return true; } @@ -240,7 +246,8 @@ bool FrameMaximizeButton::OnMouseDragged(const ui::MouseEvent& event) { void FrameMaximizeButton::OnMouseReleased(const ui::MouseEvent& event) { maximizer_.reset(); - if (!ProcessEndEvent(event)) + bool snap_was_enabled = is_snap_enabled_; + if (!ProcessEndEvent(event) && snap_was_enabled) ImageButton::OnMouseReleased(event); // At this point |this| might be already destroyed. } |