Index: views/widget/aero_tooltip_manager.h |
diff --git a/views/widget/aero_tooltip_manager.h b/views/widget/aero_tooltip_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9f322fd58167478137dc30941145696165dc0278 |
--- /dev/null |
+++ b/views/widget/aero_tooltip_manager.h |
@@ -0,0 +1,60 @@ |
+// Copyright (c) 2011 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 VIEWS_WIDGET_AERO_TOOLTIP_MANAGER_H_ |
+#define VIEWS_WIDGET_AERO_TOOLTIP_MANAGER_H_ |
+#pragma once |
+ |
+#include "base/memory/ref_counted.h" |
+#include "views/widget/tooltip_manager_win.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 TooltipManagerWin { |
+ public: |
+ explicit AeroTooltipManager(Widget* widget); |
+ virtual ~AeroTooltipManager(); |
+ |
+ virtual void OnMouse(UINT u_msg, WPARAM w_param, LPARAM l_param); |
+ |
+ private: |
+ void OnTimer(); |
+ |
+ class InitialTimer : public base::RefCounted<InitialTimer> { |
+ public: |
+ explicit InitialTimer(AeroTooltipManager* manager); |
+ void Start(int time); |
+ void Disown(); |
+ void Execute(); |
+ |
+ private: |
+ friend class base::RefCounted<InitialTimer>; |
+ |
+ ~InitialTimer() {} |
+ |
+ AeroTooltipManager* manager_; |
+ }; |
+ |
+ int initial_delay_; |
+ scoped_refptr<InitialTimer> initial_timer_; |
+}; |
+ |
+} // namespace views |
+ |
+#endif // #ifndef VIEWS_WIDGET_AERO_TOOLTIP_MANAGER_H_ |