// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by: Jacob Edwards * Andrea Azzarone */ #include "TooltipManager.h" #include "unity-shared/UnitySettings.h" namespace unity { namespace launcher { namespace { const unsigned int TOOLTIPS_SHOW_TIMEOUT_LENGTH = 500; } TooltipManager::TooltipManager() : skip_timeout_(false) {} void TooltipManager::MouseMoved(AbstractLauncherIcon::Ptr const& icon_under_mouse) { if (icon_ == icon_under_mouse) return; StopTimer(); if (icon_) { if (Settings::Instance().launcher_position() == LauncherPosition::LEFT) icon_->HideTooltip(); else icon_->PromptHideTooltip(); } icon_ = icon_under_mouse; if (!icon_) return; AbstractLauncherIcon::IconType type = icon_->GetIconType(); if ((type == AbstractLauncherIcon::IconType::HOME || type == AbstractLauncherIcon::IconType::HUD) && icon_->GetQuirk(AbstractLauncherIcon::Quirk::ACTIVE)) { Reset(); return; } if (!skip_timeout_) ResetTimer(icon_); else if (skip_timeout_) icon_->ShowTooltip(); } void TooltipManager::IconClicked() { Reset(); } void TooltipManager::SetHover(bool hovered) { if (!hovered) Reset(); } void TooltipManager::Reset() { StopTimer(); if (icon_) icon_->HideTooltip(); icon_ = AbstractLauncherIcon::Ptr(); skip_timeout_ = false; } void TooltipManager::ResetTimer(AbstractLauncherIcon::Ptr const& icon_under_mouse) { hover_timer_.reset(new glib::Timeout(TOOLTIPS_SHOW_TIMEOUT_LENGTH)); hover_timer_->Run([this, icon_under_mouse] () { skip_timeout_ = true; icon_under_mouse->ShowTooltip(); return false; }); } void TooltipManager::StopTimer() { hover_timer_.reset(); } } }