summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorskuhne@chromium.org <skuhne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-24 17:12:33 +0000
committerskuhne@chromium.org <skuhne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-24 17:12:33 +0000
commit891414750ddf08ea9a808d32c9859f0359da3ae6 (patch)
tree03961028992ff8199dfc3e092313aaf561f3ed80 /ash
parent920a1688f3a73ad505255f394abbfab5573a8bb2 (diff)
downloadchromium_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.cc57
-rw-r--r--ash/wm/workspace/frame_maximize_button.cc15
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.
}