Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Unified Diff: ui/views/widget/tooltip_manager_aura.cc

Issue 213833018: Aura tooltips do not move on mouse move in case of many neighboring views with the same label (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Write unit test for the case when a tooltip moves from one view to another with the same tooltip bu… Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/widget/tooltip_manager_aura.cc
diff --git a/ui/views/widget/tooltip_manager_aura.cc b/ui/views/widget/tooltip_manager_aura.cc
index 986ea5d28680579208797a3cf42e3df838de4d4b..47f6e9b90dee7bdc992e3621b0a33b32adc67ef0 100644
--- a/ui/views/widget/tooltip_manager_aura.cc
+++ b/ui/views/widget/tooltip_manager_aura.cc
@@ -11,6 +11,7 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/screen.h"
+#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/wm/public/tooltip_client.h"
@@ -26,7 +27,8 @@ int TooltipManager::GetTooltipHeight() {
////////////////////////////////////////////////////////////////////////////////
// TooltipManagerAura public:
-TooltipManagerAura::TooltipManagerAura(Widget* widget) : widget_(widget) {
+TooltipManagerAura::TooltipManagerAura(Widget* widget)
+ : widget_(widget) {
aura::client::SetTooltipText(GetWindow(), &tooltip_text_);
}
@@ -122,6 +124,7 @@ View* TooltipManagerAura::GetViewUnderPoint(const gfx::Point& point) {
void TooltipManagerAura::UpdateTooltipForTarget(View* target,
const gfx::Point& point,
aura::Window* root_window) {
+ bool related = false;
if (target) {
gfx::Point view_point = point;
View::ConvertPointFromWidget(target, &view_point);
@@ -130,10 +133,31 @@ void TooltipManagerAura::UpdateTooltipForTarget(View* target,
tooltip_text_.clear();
else
tooltip_text_ = new_tooltip_text;
+
+ gfx::Point target_rect_origin_in_screen;
sky 2014/04/10 16:12:08 This is a pain for each site to have to deal with.
+ views::View::ConvertPointToScreen(target, &target_rect_origin_in_screen);
+
+ gfx::Rect target_rect_in_screen(
+ target_rect_origin_in_screen, target->bounds().size());
+
+ const bool bounds_different =
+ target_rect_in_screen != origin_bounds_;
+ const bool target_contains_origin =
+ target_rect_in_screen.Contains(origin_bounds_);
+ const bool origin_contains_target =
+ origin_bounds_.Contains(target_rect_in_screen);
+
+ related =
+ !bounds_different || target_contains_origin || origin_contains_target;
+
+ origin_bounds_ = target_rect_in_screen;
} else {
tooltip_text_.clear();
+ origin_bounds_ = gfx::Rect();
}
- aura::client::GetTooltipClient(root_window)->UpdateTooltip(GetWindow());
+
+ aura::client::GetTooltipClient(root_window)
+ ->UpdateTooltip(GetWindow(), !related);
}
aura::Window* TooltipManagerAura::GetWindow() {

Powered by Google App Engine
This is Rietveld 408576698