diff options
author | varunjain@chromium.org <varunjain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-18 23:58:02 +0000 |
---|---|---|
committer | varunjain@chromium.org <varunjain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-18 23:58:02 +0000 |
commit | 5139f1ed6c290bd3d91ba7d270aafbe17bd1d73b (patch) | |
tree | 64bfd9771e273de1d6697baac214bf8535a04c06 /ash | |
parent | fc7b744c639fb4a9c25b1dbf5f7553166fdc1801 (diff) | |
download | chromium_src-5139f1ed6c290bd3d91ba7d270aafbe17bd1d73b.zip chromium_src-5139f1ed6c290bd3d91ba7d270aafbe17bd1d73b.tar.gz chromium_src-5139f1ed6c290bd3d91ba7d270aafbe17bd1d73b.tar.bz2 |
Aura: add functionality required by mouse lock to disable tooltips. Also fix a
minor bug in tooltip displaying logic.
BUG=102563
TEST=added new test.
Review URL: http://codereview.chromium.org/9249010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118187 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/tooltips/tooltip_controller.cc | 25 | ||||
-rw-r--r-- | ash/tooltips/tooltip_controller.h | 6 | ||||
-rw-r--r-- | ash/tooltips/tooltip_controller_unittest.cc | 41 |
3 files changed, 69 insertions, 3 deletions
diff --git a/ash/tooltips/tooltip_controller.cc b/ash/tooltips/tooltip_controller.cc index f6cd200..08d2bb4 100644 --- a/ash/tooltips/tooltip_controller.cc +++ b/ash/tooltips/tooltip_controller.cc @@ -203,7 +203,8 @@ class TooltipController::Tooltip { TooltipController::TooltipController() : aura::EventFilter(NULL), tooltip_window_(NULL), - tooltip_(new Tooltip) { + tooltip_(new Tooltip), + tooltips_enabled_(true) { tooltip_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kTooltipTimeoutMs), this, &TooltipController::TooltipTimerFired); @@ -220,6 +221,13 @@ void TooltipController::UpdateTooltip(aura::Window* target) { UpdateIfRequired(); } +void TooltipController::SetTooltipsEnabled(bool enable) { + if (tooltips_enabled_ == enable) + return; + tooltips_enabled_ = enable; + UpdateTooltip(tooltip_window_); +} + bool TooltipController::PreHandleKeyEvent(aura::Window* target, aura::KeyEvent* event) { return false; @@ -288,11 +296,20 @@ void TooltipController::TooltipTimerFired() { } void TooltipController::UpdateIfRequired() { + if (!tooltips_enabled_) { + tooltip_->Hide(); + return; + } string16 tooltip_text; if (tooltip_window_) tooltip_text = *aura::client::GetTooltipText(tooltip_window_); - if (tooltip_text_ != tooltip_text) { + // We add the !tooltip_->IsVisible() below because when we come here from + // TooltipTimerFired(), the tooltip_text may not have changed but we still + // want to update the tooltip because the timer has fired. + // If we come here from UpdateTooltip(), we have already checked for tooltip + // visibility and this check below will have no effect. + if (tooltip_text_ != tooltip_text || !tooltip_->IsVisible()) { tooltip_text_ = tooltip_text; if (tooltip_text_.empty()) { tooltip_->Hide(); @@ -306,5 +323,9 @@ void TooltipController::UpdateIfRequired() { } } +bool TooltipController::IsTooltipVisible() { + return tooltip_->IsVisible(); +} + } // namespace internal } // namespace ash diff --git a/ash/tooltips/tooltip_controller.h b/ash/tooltips/tooltip_controller.h index 2e38895..9de5cee 100644 --- a/ash/tooltips/tooltip_controller.h +++ b/ash/tooltips/tooltip_controller.h @@ -40,6 +40,7 @@ class ASH_EXPORT TooltipController : public aura::client::TooltipClient, // Overridden from aura::client::TooltipClient. virtual void UpdateTooltip(aura::Window* target) OVERRIDE; + virtual void SetTooltipsEnabled(bool enable) OVERRIDE; // Overridden from aura::EventFilter. virtual bool PreHandleKeyEvent(aura::Window* target, @@ -65,6 +66,9 @@ class ASH_EXPORT TooltipController : public aura::client::TooltipClient, // text or the aura::Window. void UpdateIfRequired(); + // Only used in tests. + bool IsTooltipVisible(); + aura::Window* tooltip_window_; string16 tooltip_text_; scoped_ptr<Tooltip> tooltip_; @@ -73,6 +77,8 @@ class ASH_EXPORT TooltipController : public aura::client::TooltipClient, gfx::Point curr_mouse_loc_; + bool tooltips_enabled_; + DISALLOW_COPY_AND_ASSIGN(TooltipController); }; diff --git a/ash/tooltips/tooltip_controller_unittest.cc b/ash/tooltips/tooltip_controller_unittest.cc index 2392a85..16f0c01 100644 --- a/ash/tooltips/tooltip_controller_unittest.cc +++ b/ash/tooltips/tooltip_controller_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -93,6 +93,10 @@ class TooltipControllerTest : public AuraShellTestBase { GetController()->TooltipTimerFired(); } + bool IsTooltipVisible() { + return GetController()->IsTooltipVisible(); + } + private: DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest); }; @@ -101,6 +105,7 @@ TEST_F(TooltipControllerTest, NonNullTooltipClient) { EXPECT_TRUE(aura::client::GetTooltipClient() != NULL); EXPECT_EQ(ASCIIToUTF16(""), GetTooltipText()); EXPECT_EQ(NULL, GetTooltipWindow()); + EXPECT_FALSE(IsTooltipVisible()); } TEST_F(TooltipControllerTest, ViewTooltip) { @@ -125,9 +130,11 @@ TEST_F(TooltipControllerTest, ViewTooltip) { // Fire tooltip timer so tooltip becomes visible. FireTooltipTimer(); + EXPECT_TRUE(IsTooltipVisible()); point.Offset(1, 0); SimulateMouseMoveAtPoint(point); + EXPECT_TRUE(IsTooltipVisible()); EXPECT_TRUE(aura::client::GetTooltipText(window) != NULL); EXPECT_EQ(expected_tooltip, *aura::client::GetTooltipText(window)); EXPECT_EQ(expected_tooltip, GetTooltipText()); @@ -151,9 +158,11 @@ TEST_F(TooltipControllerTest, TooltipsInMultipleViews) { // Fire tooltip timer so tooltip becomes visible. SimulateMouseMoveAtPoint(point); FireTooltipTimer(); + EXPECT_TRUE(IsTooltipVisible()); for (int i = 0; i < 50; i++) { point.Offset(1, 0); SimulateMouseMoveAtPoint(point); + EXPECT_TRUE(IsTooltipVisible()); EXPECT_EQ(window, aura::RootWindow::GetInstance()->GetEventHandlerForPoint(point)); EXPECT_TRUE(aura::client::GetTooltipText(window) != NULL); @@ -165,6 +174,7 @@ TEST_F(TooltipControllerTest, TooltipsInMultipleViews) { for (int i = 0; i < 50; i++) { point.Offset(1, 0); SimulateMouseMoveAtPoint(point); + EXPECT_FALSE(IsTooltipVisible()); EXPECT_EQ(window, aura::RootWindow::GetInstance()->GetEventHandlerForPoint(point)); EXPECT_TRUE(aura::client::GetTooltipText(window) != NULL); @@ -175,5 +185,34 @@ TEST_F(TooltipControllerTest, TooltipsInMultipleViews) { } } +TEST_F(TooltipControllerTest, EnableOrDisableTooltips) { + views::Widget* widget = CreateNewWidget(); + TooltipTestView* view = new TooltipTestView; + AddViewToWidgetAndResize(widget, view); + view->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); + EXPECT_EQ(ASCIIToUTF16(""), GetTooltipText()); + EXPECT_EQ(NULL, GetTooltipWindow()); + + gfx::Point point = gfx::Rect(view->bounds()).CenterPoint(); + SimulateMouseMoveAtPoint(point); + string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); + + // Fire tooltip timer so tooltip becomes visible. + FireTooltipTimer(); + EXPECT_TRUE(IsTooltipVisible()); + + // Diable tooltips and check again. + GetController()->SetTooltipsEnabled(false); + EXPECT_FALSE(IsTooltipVisible()); + FireTooltipTimer(); + EXPECT_FALSE(IsTooltipVisible()); + + // Enable tooltips back and check again. + GetController()->SetTooltipsEnabled(true); + EXPECT_FALSE(IsTooltipVisible()); + FireTooltipTimer(); + EXPECT_TRUE(IsTooltipVisible()); +} + } // namespace test } // namespace ash |