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() { |