blob: 7635904cf0de4afccba60c86d8363a3802e5d033 [file] [log] [blame]
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_VIEWS_AERO_TOOLTIP_MANAGER_H__
#define CHROME_VIEWS_AERO_TOOLTIP_MANAGER_H__
#include "base/ref_counted.h"
#include "base/task.h"
#include "chrome/views/tooltip_manager.h"
namespace views {
///////////////////////////////////////////////////////////////////////////////
// AeroTooltipManager
//
// Default Windows tooltips are broken when using our custom window frame
// - as soon as the tooltip receives a WM_MOUSEMOVE event, it starts spewing
// NCHITTEST messages at its parent window (us). These messages have random
// x/y coordinates and can't be ignored, as the DwmDefWindowProc uses
// NCHITTEST messages to determine how to highlight the caption buttons
// (the buttons then flicker as the hit tests sent by the user's mouse
// trigger different effects to those sent by the tooltip).
//
// So instead, we have to partially implement tooltips ourselves using
// TTF_TRACKed tooltips.
//
// TODO(glen): Resolve this with Microsoft.
class AeroTooltipManager : public TooltipManager {
public:
AeroTooltipManager(Widget* widget, HWND parent);
virtual ~AeroTooltipManager();
virtual void OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param);
virtual void OnMouseLeave();
private:
void Init();
void OnTimer();
class InitialTimer : public base::RefCounted<InitialTimer> {
public:
InitialTimer(AeroTooltipManager* manager, int time);
void Disown();
void Execute();
private:
AeroTooltipManager* manager_;
};
int initial_delay_;
scoped_refptr<InitialTimer> initial_timer_;
};
} // namespace views
#endif // #ifndef CHROME_VIEWS_AERO_TOOLTIP_MANAGER_H__