15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_DELEGATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/views_export.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Canvas;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Insets;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Path;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Size;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Accelerator;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class KeyEvent;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MouseEvent;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TouchEvent;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InputMethod;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Implemented by the object that uses the HWNDMessageHandler to handle
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notifications from the underlying HWND and service requests for data.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VIEWS_EXPORT HWNDMessageHandlerDelegate {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsWidgetWindow() const = 0;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(beng): resolve this more satisfactorily vis-a-vis ShouldUseNativeFrame
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //             to avoid confusion.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsUsingCustomFrame() const = 0;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SchedulePaint() = 0;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnableInactiveRendering() = 0;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsInactiveRenderingDisabled() = 0;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanResize() const = 0;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanMaximize() const = 0;
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanMinimize() const = 0;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanActivate() const = 0;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool WidgetSizeIsClientSize() const = 0;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the delegate represents a modal window.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsModal() const = 0;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the show state that should be used for the application's first
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetInitialShowState() const = 0;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool WillProcessWorkAreaChange() const = 0;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetNonClientComponent(const gfx::Point& point) const = 0;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetWindowMask(const gfx::Size& size, gfx::Path* mask) = 0;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the delegate modifies |insets| to define a custom client
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // area for the window, false if the default client area should be used. If
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // false is returned, |insets| is not modified.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetClientAreaInsets(gfx::Insets* insets) const = 0;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the minimum and maximum size the window can be resized to by the
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // user.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetMinMaxSize(gfx::Size* min_size,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             gfx::Size* max_size) const = 0;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the current size of the RootView.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Size GetRootViewSize() const = 0;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResetWindowControls() = 0;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void PaintLayeredWindow(gfx::Canvas* canvas) = 0;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual InputMethod* GetInputMethod() = 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::NativeViewAccessible GetNativeViewAccessible() = 0;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if the window should handle standard system commands, such as
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // close, minimize, maximize.
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TODO(benwells): Remove this once bubbles don't have two widgets
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // implementing them on non-aura windows. http://crbug.com/189112.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHandleSystemCommands() const = 0;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(beng): Investigate migrating these methods to On* prefixes once
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // HWNDMessageHandler is the WindowImpl.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when another app was activated.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleAppDeactivated() = 0;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the window was activated or deactivated. |active| reflects the
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // new state.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleActivationChanged(bool active) = 0;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when a well known "app command" from the system was performed.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the command was handled.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleAppCommand(short command) = 0;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called from WM_CANCELMODE.
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void HandleCancelMode() = 0;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the window has lost mouse capture.
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleCaptureLost() = 0;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the user tried to close the window.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleClose() = 0;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when a command defined by the application was performed. Returns
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // true if the command was handled.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleCommand(int command) = 0;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when an accelerator is invoked.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleAccelerator(const ui::Accelerator& accelerator) = 0;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the HWND is created.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleCreate() = 0;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the HWND is being destroyed, before any child HWNDs are
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // destroyed.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleDestroying() = 0;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called after the HWND is destroyed, after all child HWNDs have been
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // destroyed.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleDestroyed() = 0;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the HWND is to be focused for the first time. This is called
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when the window is shown for the first time. Returns true if the delegate
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // set focus and no default processing should be done by the message handler.
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool HandleInitialFocus(ui::WindowShowState show_state) = 0;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when display settings are adjusted on the system.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleDisplayChange() = 0;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the user begins or ends a size/move operation using the window
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // manager.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleBeginWMSizeMove() = 0;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleEndWMSizeMove() = 0;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the window's position changed.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleMove() = 0;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the system's work area has changed.
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleWorkAreaChanged() = 0;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Called when the window's visibility is changing. |visible| holds the new
1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // state.
1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void HandleVisibilityChanging(bool visible) = 0;
1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the window's visibility changed. |visible| holds the new state.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleVisibilityChanged(bool visible) = 0;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the window's client size changed. |new_size| holds the new
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // size.
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleClientSizeChanged(const gfx::Size& new_size) = 0;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the window's frame has changed.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleFrameChanged() = 0;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when focus shifted to this HWND from |last_focused_window|.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleNativeFocus(HWND last_focused_window) = 0;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when focus shifted from the HWND to a different window.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleNativeBlur(HWND focused_window) = 0;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when a mouse event is received. Returns true if the event was
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // handled by the delegate.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleMouseEvent(const ui::MouseEvent& event) = 0;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when a translated key event is received (i.e. post IME translation.)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the event was handled by the delegate.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleKeyEvent(const ui::KeyEvent& event) = 0;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when an untranslated key event is received (i.e. pre-IME
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // translation). Returns true if the event was sent to the input method.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleUntranslatedKeyEvent(const ui::KeyEvent& event) = 0;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Called when a touch event is received.
18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void HandleTouchEvent(const ui::TouchEvent& event) = 0;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when an IME message needs to be processed by the delegate. Returns
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // true if the event was handled and no default processing should be
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // performed.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleIMEMessage(UINT message,
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                WPARAM w_param,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                LPARAM l_param,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                LRESULT* result) = 0;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when the system input language changes.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleInputLanguageChange(DWORD character_set,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         HKL input_language_id) = 0;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to compel the delegate to paint |invalid_rect| accelerated. Returns
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // true if accelerated painting was performed.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandlePaintAccelerated(const gfx::Rect& invalid_rect) = 0;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to compel the delegate to paint using the software path.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandlePaint(gfx::Canvas* canvas) = 0;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to forward a WM_NOTIFY message to the tooltip manager.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HandleTooltipNotify(int w_param,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   NMHDR* l_param,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   LRESULT* l_result) = 0;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Invoked on entering/exiting a menu loop.
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void HandleMenuLoop(bool in_menu_loop) = 0;
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Catch-all message handling and filtering. Called before
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // HWNDMessageHandler's built-in handling, which may pre-empt some
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // expectations in Views/Aura if messages are consumed. Returns true if the
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // message was consumed by the delegate and should not be processed further
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // by the HWNDMessageHandler. In this case, |result| is returned. |result| is
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not modified otherwise.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PreHandleMSG(UINT message,
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            WPARAM w_param,
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            LPARAM l_param,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            LRESULT* result) = 0;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Like PreHandleMSG, but called after HWNDMessageHandler's built-in handling
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // has run and after DefWindowProc.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void PostHandleMSG(UINT message,
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             WPARAM w_param,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             LPARAM l_param) = 0;
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called when a scroll event is received. Returns true if the event was
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // handled by the delegate.
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool HandleScrollEvent(const ui::ScrollEvent& event) = 0;
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Called when the window size is about to change.
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void HandleWindowSizeChanging() = 0;
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~HWNDMessageHandlerDelegate() {}
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_DELEGATE_H_
242