Chromium Code Reviews| 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() { |