summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorvarunjain@chromium.org <varunjain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-18 23:58:02 +0000
committervarunjain@chromium.org <varunjain@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-18 23:58:02 +0000
commit5139f1ed6c290bd3d91ba7d270aafbe17bd1d73b (patch)
tree64bfd9771e273de1d6697baac214bf8535a04c06 /ash
parentfc7b744c639fb4a9c25b1dbf5f7553166fdc1801 (diff)
downloadchromium_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.cc25
-rw-r--r--ash/tooltips/tooltip_controller.h6
-rw-r--r--ash/tooltips/tooltip_controller_unittest.cc41
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