diff options
Diffstat (limited to 'ash/tooltips/tooltip_controller.cc')
-rw-r--r-- | ash/tooltips/tooltip_controller.cc | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/ash/tooltips/tooltip_controller.cc b/ash/tooltips/tooltip_controller.cc index df4f862..937ebc7 100644 --- a/ash/tooltips/tooltip_controller.cc +++ b/ash/tooltips/tooltip_controller.cc @@ -185,7 +185,6 @@ TooltipController::TooltipController( tooltip_window_(NULL), tooltip_window_at_mouse_press_(NULL), mouse_pressed_(false), - tooltip_(new Tooltip), tooltips_enabled_(true) { tooltip_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kTooltipTimeoutMs), @@ -200,7 +199,7 @@ TooltipController::~TooltipController() { void TooltipController::UpdateTooltip(aura::Window* target) { // If tooltip is visible, we may want to hide it. If it is not, we are ok. - if (tooltip_window_ == target && tooltip_->IsVisible()) + if (tooltip_window_ == target && GetTooltip()->IsVisible()) UpdateIfRequired(); // If we had stopped the tooltip timer for some reason, we must restart it if @@ -251,7 +250,7 @@ bool TooltipController::PreHandleMouseEvent(aura::Window* target, // We update the tooltip if it is visible, or if we force-hid it due to a // mouse press. - if (tooltip_->IsVisible() || tooltip_window_at_mouse_press_) + if (GetTooltip()->IsVisible() || tooltip_window_at_mouse_press_) UpdateIfRequired(); break; case ui::ET_MOUSE_PRESSED: @@ -259,7 +258,7 @@ bool TooltipController::PreHandleMouseEvent(aura::Window* target, tooltip_window_at_mouse_press_ = target; if (target) tooltip_text_at_mouse_press_ = aura::client::GetTooltipText(target); - tooltip_->Hide(); + GetTooltip()->Hide(); break; case ui::ET_MOUSE_RELEASED: mouse_pressed_ = false; @@ -269,8 +268,8 @@ bool TooltipController::PreHandleMouseEvent(aura::Window* target, mouse_pressed_ = false; case ui::ET_MOUSEWHEEL: // Hide the tooltip for click, release, drag, wheel events. - if (tooltip_->IsVisible()) - tooltip_->Hide(); + if (GetTooltip()->IsVisible()) + GetTooltip()->Hide(); break; default: break; @@ -284,8 +283,8 @@ ui::TouchStatus TooltipController::PreHandleTouchEvent( // TODO(varunjain): need to properly implement tooltips for // touch events. // Hide the tooltip for touch events. - if (tooltip_->IsVisible()) - tooltip_->Hide(); + if (GetTooltip()->IsVisible()) + GetTooltip()->Hide(); if (tooltip_window_) tooltip_window_->RemoveObserver(this); tooltip_window_ = NULL; @@ -394,7 +393,7 @@ void TooltipController::TooltipTimerFired() { } void TooltipController::TooltipShownTimerFired() { - tooltip_->Hide(); + GetTooltip()->Hide(); // Since the user presumably no longer needs the tooltip, we also stop the // tooltip timer so that tooltip does not pop back up. We will restart this @@ -405,7 +404,7 @@ void TooltipController::TooltipShownTimerFired() { void TooltipController::UpdateIfRequired() { if (!tooltips_enabled_ || mouse_pressed_ || IsDragDropInProgress() || !aura::Env::GetInstance()->cursor_manager()->cursor_visible()) { - tooltip_->Hide(); + GetTooltip()->Hide(); return; } @@ -418,29 +417,29 @@ void TooltipController::UpdateIfRequired() { if (tooltip_window_at_mouse_press_) { if (tooltip_window_ == tooltip_window_at_mouse_press_ && tooltip_text == tooltip_text_at_mouse_press_) { - tooltip_->Hide(); + GetTooltip()->Hide(); return; } tooltip_window_at_mouse_press_ = NULL; } - // We add the !tooltip_->IsVisible() below because when we come here from + // We add the !GetTooltip()->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()) { + if (tooltip_text_ != tooltip_text || !GetTooltip()->IsVisible()) { tooltip_shown_timer_.Stop(); tooltip_text_ = tooltip_text; if (tooltip_text_.empty()) { - tooltip_->Hide(); + GetTooltip()->Hide(); } else { string16 tooltip_text(tooltip_text_); gfx::Point widget_loc = curr_mouse_loc_; widget_loc = widget_loc.Add( tooltip_window_->GetBoundsInScreen().origin()); - tooltip_->SetText(tooltip_text, widget_loc); - tooltip_->Show(); + GetTooltip()->SetText(tooltip_text, widget_loc); + GetTooltip()->Show(); tooltip_shown_timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kTooltipShownTimeoutMs), this, &TooltipController::TooltipShownTimerFired); @@ -449,12 +448,18 @@ void TooltipController::UpdateIfRequired() { } bool TooltipController::IsTooltipVisible() { - return tooltip_->IsVisible(); + return GetTooltip()->IsVisible(); } bool TooltipController::IsDragDropInProgress() { return drag_drop_client_->IsDragDropInProgress(); } +TooltipController::Tooltip* TooltipController::GetTooltip() { + if (!tooltip_.get()) + tooltip_.reset(new Tooltip); + return tooltip_.get(); +} + } // namespace internal } // namespace ash |