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

Side by Side Diff: ui/views/corewm/tooltip_controller.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: Change the unique id of tooltip text from void** to void* Created 6 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/corewm/tooltip_controller.h" 5 #include "ui/views/corewm/tooltip_controller.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 return NULL; 108 return NULL;
109 } 109 }
110 110
111 } // namespace 111 } // namespace
112 112
113 //////////////////////////////////////////////////////////////////////////////// 113 ////////////////////////////////////////////////////////////////////////////////
114 // TooltipController public: 114 // TooltipController public:
115 115
116 TooltipController::TooltipController(scoped_ptr<Tooltip> tooltip) 116 TooltipController::TooltipController(scoped_ptr<Tooltip> tooltip)
117 : tooltip_window_(NULL), 117 : tooltip_window_(NULL),
118 tooltip_id_(NULL),
118 tooltip_window_at_mouse_press_(NULL), 119 tooltip_window_at_mouse_press_(NULL),
119 tooltip_(tooltip.Pass()), 120 tooltip_(tooltip.Pass()),
120 tooltips_enabled_(true) { 121 tooltips_enabled_(true) {
121 tooltip_timer_.Start(FROM_HERE, 122 tooltip_timer_.Start(FROM_HERE,
122 base::TimeDelta::FromMilliseconds(kTooltipTimeoutMs), 123 base::TimeDelta::FromMilliseconds(kTooltipTimeoutMs),
123 this, &TooltipController::TooltipTimerFired); 124 this, &TooltipController::TooltipTimerFired);
124 } 125 }
125 126
126 TooltipController::~TooltipController() { 127 TooltipController::~TooltipController() {
127 if (tooltip_window_) 128 if (tooltip_window_)
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 // it until there is a change in the tooltip. 276 // it until there is a change in the tooltip.
276 if (tooltip_window_at_mouse_press_) { 277 if (tooltip_window_at_mouse_press_) {
277 if (tooltip_window_ == tooltip_window_at_mouse_press_ && 278 if (tooltip_window_ == tooltip_window_at_mouse_press_ &&
278 tooltip_text == tooltip_text_at_mouse_press_) { 279 tooltip_text == tooltip_text_at_mouse_press_) {
279 tooltip_->Hide(); 280 tooltip_->Hide();
280 return; 281 return;
281 } 282 }
282 tooltip_window_at_mouse_press_ = NULL; 283 tooltip_window_at_mouse_press_ = NULL;
283 } 284 }
284 285
286 // If the uniqueness indicator is different from the previously encountered
287 // one, we should force tooltip update
288 const void* tooltip_id = aura::client::GetTooltipId(tooltip_window_);
289 bool ids_differ = false;
290 if (tooltip_id) {
sky 2014/06/02 15:39:47 Why the if here? Can't you always compare tooltip_
291 ids_differ = tooltip_id_ != tooltip_id;
292 tooltip_id_ = tooltip_id;
293 } else {
294 tooltip_id_ = NULL;
295 }
296
285 // We add the !tooltip_->IsVisible() below because when we come here from 297 // We add the !tooltip_->IsVisible() below because when we come here from
286 // TooltipTimerFired(), the tooltip_text may not have changed but we still 298 // TooltipTimerFired(), the tooltip_text may not have changed but we still
287 // want to update the tooltip because the timer has fired. 299 // want to update the tooltip because the timer has fired.
288 // If we come here from UpdateTooltip(), we have already checked for tooltip 300 // If we come here from UpdateTooltip(), we have already checked for tooltip
289 // visibility and this check below will have no effect. 301 // visibility and this check below will have no effect.
290 if (tooltip_text_ != tooltip_text || !tooltip_->IsVisible()) { 302 if (tooltip_text_ != tooltip_text || !tooltip_->IsVisible() || ids_differ) {
291 tooltip_shown_timer_.Stop(); 303 tooltip_shown_timer_.Stop();
292 tooltip_text_ = tooltip_text; 304 tooltip_text_ = tooltip_text;
293 base::string16 trimmed_text(tooltip_text_); 305 base::string16 trimmed_text(tooltip_text_);
294 views::TooltipManager::TrimTooltipText(&trimmed_text); 306 views::TooltipManager::TrimTooltipText(&trimmed_text);
295 // If the string consists entirely of whitespace, then don't both showing it 307 // If the string consists entirely of whitespace, then don't both showing it
296 // (an empty tooltip is useless). 308 // (an empty tooltip is useless).
297 base::string16 whitespace_removed_text; 309 base::string16 whitespace_removed_text;
298 base::TrimWhitespace(trimmed_text, base::TRIM_ALL, 310 base::TrimWhitespace(trimmed_text, base::TRIM_ALL,
299 &whitespace_removed_text); 311 &whitespace_removed_text);
300 if (whitespace_removed_text.empty()) { 312 if (whitespace_removed_text.empty()) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 return; 363 return;
352 if (tooltip_window_) 364 if (tooltip_window_)
353 tooltip_window_->RemoveObserver(this); 365 tooltip_window_->RemoveObserver(this);
354 tooltip_window_ = target; 366 tooltip_window_ = target;
355 if (tooltip_window_) 367 if (tooltip_window_)
356 tooltip_window_->AddObserver(this); 368 tooltip_window_->AddObserver(this);
357 } 369 }
358 370
359 } // namespace corewm 371 } // namespace corewm
360 } // namespace views 372 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698