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_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <windows.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <vector> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 175e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h" 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/win/scoped_gdi_object.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/win_util.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/accessibility/ax_enums.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_types.h" 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/win/window_event_target.h" 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/events/event.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/gfx/sequential_id_generator.h" 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/win/window_impl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/ime/input_method_delegate.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/views_export.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Canvas; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageSkia; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Insets; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui { 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ViewProp; 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FullscreenHandler; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HWNDMessageHandlerDelegate; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InputMethod; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These two messages aren't defined in winuser.h, but they are sent to windows 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with captions. They appear to paint the window caption and frame. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Unfortunately if you override the standard non-client rendering as we do 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with CustomFrameWindow, sometimes Windows (not deterministically 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reproducibly but definitely frequently) will send these messages to the 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window and paint the standard caption/title over the top of the custom one. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// So we need to handle these messages in CustomFrameWindow to prevent this 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from happening. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int WM_NCUAHDRAWCAPTION = 0xAE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int WM_NCUAHDRAWFRAME = 0xAF; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// IsMsgHandled() and BEGIN_SAFE_MSG_MAP_EX are a modified version of 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// BEGIN_MSG_MAP_EX. The main difference is it adds a WeakPtrFactory member 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// (|weak_factory_|) that is used in _ProcessWindowMessage() and changing 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// IsMsgHandled() from a member function to a define that checks if the weak 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// factory is still valid in addition to the member. Together these allow for 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// |this| to be deleted during dispatch. 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define IsMsgHandled() !ref.get() || msg_handled_ 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define BEGIN_SAFE_MSG_MAP_EX(the_class) \ 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: \ 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::WeakPtrFactory<the_class> weak_factory_; \ 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BOOL msg_handled_; \ 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)\ 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: \ 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) /* "handled" management for cracked handlers */ \ 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetMsgHandled(BOOL handled) { \ 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) msg_handled_ = handled; \ 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } \ 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BOOL ProcessWindowMessage(HWND hwnd, \ 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UINT msg, \ 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WPARAM w_param, \ 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LPARAM l_param, \ 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LRESULT& l_result, \ 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DWORD msg_map_id = 0) { \ 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr()); \ 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BOOL old_msg_handled = msg_handled_; \ 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BOOL ret = _ProcessWindowMessage(hwnd, msg, w_param, l_param, l_result, \ 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) msg_map_id); \ 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (ref.get()) \ 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) msg_handled_ = old_msg_handled; \ 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return ret; \ 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } \ 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BOOL _ProcessWindowMessage(HWND hWnd, \ 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UINT uMsg, \ 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WPARAM wParam, \ 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LPARAM lParam, \ 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LRESULT& lResult, \ 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DWORD dwMsgMapID) { \ 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr()); \ 961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BOOL bHandled = TRUE; \ 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) hWnd; \ 981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) uMsg; \ 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) wParam; \ 1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) lParam; \ 1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) lResult; \ 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bHandled; \ 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switch(dwMsgMapID) { \ 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case 0: 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An object that handles messages for a HWND that implements the views 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "Custom Frame" look. The purpose of this class is to isolate the windows- 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specific message handling from the code that wraps it. It is intended to be 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// used by both a views::NativeWidget and an aura::WindowTreeHost 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implementation. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(beng): This object should eventually *become* the WindowImpl. 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class VIEWS_EXPORT HWNDMessageHandler : 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public gfx::WindowImpl, 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public internal::InputMethodDelegate, 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public ui::WindowEventTarget { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~HWNDMessageHandler(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(HWND parent, const gfx::Rect& bounds); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitModalType(ui::ModalType modal_type); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Close(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseNow(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect GetWindowBoundsInScreen() const; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect GetClientAreaBoundsInScreen() const; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect GetRestoredBounds() const; 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This accounts for the case where the widget size is the client size. 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect GetClientAreaBounds() const; 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetWindowPlacement(gfx::Rect* bounds, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WindowShowState* show_state) const; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Sets the bounds of the HWND to |bounds_in_pixels|. If the HWND size is not 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // changed, |force_size_changed| determines if we should pretend it is. 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetBounds(const gfx::Rect& bounds_in_pixels, bool force_size_changed); 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSize(const gfx::Size& size); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CenterWindow(const gfx::Size& size); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRegion(HRGN rgn); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StackAbove(HWND other_hwnd); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StackAtTop(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Show(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowWindowWithState(ui::WindowShowState show_state); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowMaximizedWithBounds(const gfx::Rect& bounds); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Hide(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Maximize(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Minimize(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Restore(); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Activate(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Deactivate(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAlwaysOnTop(bool on_top); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsVisible() const; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsActive() const; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsMinimized() const; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsMaximized() const; 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool IsAlwaysOnTop() const; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool RunMoveLoop(const gfx::Vector2d& drag_offset, bool hide_on_escape); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EndMoveLoop(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the HWND its client area has changed. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendFrameChanged(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FlashFrame(bool flash); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearNativeFocus(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCapture(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReleaseCapture(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasCapture() const; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FullscreenHandler* fullscreen_handler() { return fullscreen_handler_.get(); } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetVisibilityChangedAnimationsEnabled(bool enabled); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns true if the title changed. 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool SetTitle(const base::string16& title); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCursor(HCURSOR cursor); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FrameTypeChanged(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SchedulePaintInRect(const gfx::Rect& rect); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetOpacity(BYTE opacity); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetWindowIcons(const gfx::ImageSkia& window_icon, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::ImageSkia& app_icon); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_remove_standard_frame(bool remove_standard_frame) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) remove_standard_frame_ = remove_standard_frame; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_use_system_default_icon(bool use_system_default_icon) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) use_system_default_icon_ = use_system_default_icon; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void SetFullscreen(bool fullscreen); 20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Updates the window style to reflect whether it can be resized or maximized. 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SizeConstraintsChanged(); 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::set<DWORD> TouchIDs; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from internal::InputMethodDelegate: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DispatchKeyEventPostIME(const ui::KeyEvent& key) OVERRIDE; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from WindowImpl: 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual HICON GetDefaultWindowIcon() const OVERRIDE; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LRESULT OnWndProc(UINT message, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param) OVERRIDE; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Overridden from WindowEventTarget 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual LRESULT HandleMouseMessage(unsigned int message, 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WPARAM w_param, 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LPARAM l_param, 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool* handled) OVERRIDE; 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual LRESULT HandleKeyboardMessage(unsigned int message, 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WPARAM w_param, 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LPARAM l_param, 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool* handled) OVERRIDE; 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual LRESULT HandleTouchMessage(unsigned int message, 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WPARAM w_param, 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LPARAM l_param, 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool* handled) OVERRIDE; 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual LRESULT HandleScrollMessage(unsigned int message, 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WPARAM w_param, 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LPARAM l_param, 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool* handled) OVERRIDE; 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual LRESULT HandleNcHitTestMessage(unsigned int message, 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WPARAM w_param, 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LPARAM l_param, 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool* handled) OVERRIDE; 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Returns the auto-hide edges of the appbar. See 2480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // ViewsDelegate::GetAppbarAutohideEdges() for details. If the edges change, 2490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // OnAppbarAutohideEdgesChanged() is called. 250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int GetAppbarAutohideEdges(HMONITOR monitor); 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Callback if the autohide edges have changed. See 2530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // ViewsDelegate::GetAppbarAutohideEdges() for details. 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void OnAppbarAutohideEdgesChanged(); 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Can be called after the delegate has had the opportunity to set focus and 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // did not do so. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetInitialFocus(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called after the WM_ACTIVATE message has been processed by the default 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // windows procedure. 26268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void PostProcessActivateMessage(int activation_state, bool minimized); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enables disabled owner windows that may have been disabled due to this 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window's modality. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RestoreEnabledIfNecessary(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Executes the specified SC_command. 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExecuteSystemMenuCommand(int command); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start tracking all mouse events so that this window gets sent mouse leave 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messages too. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TrackMouseEvents(DWORD mouse_tracking_flags); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Responds to the client area changing size, either at window creation time 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or subsequently. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClientAreaSizeChanged(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the insets of the client area relative to the non-client area of 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the window. 281bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool GetClientAreaInsets(gfx::Insets* insets) const; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resets the window region for the current widget bounds if necessary. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |force| is true, the window region is reset to NULL even for native 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // frame windows. 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ResetWindowRegion(bool force, bool redraw); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Enables or disables rendering of the non-client (glass) area by DWM, 289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // under Vista and above, depending on whether the caller has requested a 290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // custom frame. 291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void UpdateDwmNcRenderingPolicy(); 292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls DefWindowProc, safely wrapping the call in a ScopedRedrawLock to 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prevent frame flicker. DefWindowProc handling can otherwise render the 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // classic-look window title bar directly. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT DefWindowProcWithRedrawLock(UINT message, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lock or unlock the window from being able to redraw itself in response to 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // updates to its invalid region. 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ScopedRedrawLock; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LockUpdates(bool force); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UnlockUpdates(bool force); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stops ignoring SetWindowPos() requests (see below). 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StopIgnoringPosChanges() { ignore_window_pos_changes_ = false; } 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Synchronously updates the invalid contents of the Widget. Valid for 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // layered windows only. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RedrawLayeredWindowContents(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Attempts to force the window to be redrawn, ensuring that it gets 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // onscreen. 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void ForceRedrawWindow(int attempts); 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message Handlers ---------------------------------------------------------- 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BEGIN_SAFE_MSG_MAP_EX(HWNDMessageHandler) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Range handlers must go first! 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange) 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_RANGE_HANDLER_EX(WM_NCMOUSEMOVE, 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WM_NCXBUTTONDBLCLK, 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OnMouseRange) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CustomFrameWindow hacks 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_NCUAHDRAWCAPTION, OnNCUAHDrawCaption) 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_NCUAHDRAWFRAME, OnNCUAHDrawFrame) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Vista and newer 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_DWMCOMPOSITIONCHANGED, OnDwmCompositionChanged) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non-atlcrack.h handlers 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mouse events. 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_MOUSEACTIVATE, OnMouseActivate) 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_MOUSELEAVE, OnMouseRange) 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_NCMOUSELEAVE, OnMouseRange) 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_SETCURSOR, OnSetCursor); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Key events. 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_KEYDOWN, OnKeyEvent) 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_KEYUP, OnKeyEvent) 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_SYSKEYDOWN, OnKeyEvent) 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_SYSKEYUP, OnKeyEvent) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IME Events. 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_IME_SETCONTEXT, OnImeMessages) 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_IME_STARTCOMPOSITION, OnImeMessages) 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_IME_COMPOSITION, OnImeMessages) 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_IME_ENDCOMPOSITION, OnImeMessages) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_IME_REQUEST, OnImeMessages) 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_IME_NOTIFY, OnImeMessages) 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_CHAR, OnImeMessages) 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_SYSCHAR, OnImeMessages) 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Scroll events 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_VSCROLL, OnScrollMessage) 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_HSCROLL, OnScrollMessage) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Touch Events. 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_TOUCH, OnTouchEvent) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Uses the general handler macro since the specific handler macro 366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // MSG_WM_NCACTIVATE would convert WPARAM type to BOOL type. The high 367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // word of WPARAM could be set when the window is minimized or restored. 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MESSAGE_HANDLER_EX(WM_NCACTIVATE, OnNCActivate) 369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This list is in _ALPHABETICAL_ order! OR I WILL HURT YOU. 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_ACTIVATEAPP(OnActivateApp) 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_APPCOMMAND(OnAppCommand) 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_CANCELMODE(OnCancelMode) 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_CAPTURECHANGED(OnCaptureChanged) 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_CLOSE(OnClose) 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_COMMAND(OnCommand) 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_CREATE(OnCreate) 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_DESTROY(OnDestroy) 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_DISPLAYCHANGE(OnDisplayChange) 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_ENTERMENULOOP(OnEnterMenuLoop) 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_EXITMENULOOP(OnExitMenuLoop) 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_ENTERSIZEMOVE(OnEnterSizeMove) 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_ERASEBKGND(OnEraseBkgnd) 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_EXITSIZEMOVE(OnExitSizeMove) 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_GETMINMAXINFO(OnGetMinMaxInfo) 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_INITMENU(OnInitMenu) 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_INPUTLANGCHANGE(OnInputLangChange) 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_KILLFOCUS(OnKillFocus) 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_MOVE(OnMove) 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_MOVING(OnMoving) 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_NCCALCSIZE(OnNCCalcSize) 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_NCHITTEST(OnNCHitTest) 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_NCPAINT(OnNCPaint) 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_NOTIFY(OnNotify) 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_PAINT(OnPaint) 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_SETFOCUS(OnSetFocus) 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_SETICON(OnSetIcon) 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_SETTEXT(OnSetText) 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_SETTINGCHANGE(OnSettingChange) 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_SIZE(OnSize) 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_SYSCOMMAND(OnSysCommand) 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_THEMECHANGED(OnThemeChanged) 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_WINDOWPOSCHANGED(OnWindowPosChanged) 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_WINDOWPOSCHANGING(OnWindowPosChanging) 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_MSG_WM_WTSSESSION_CHANGE(OnSessionChange) 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CR_END_MSG_MAP() 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message Handlers. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This list is in _ALPHABETICAL_ order! 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): Once this object becomes the WindowImpl, these methods can 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be made private. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnActivateApp(BOOL active, DWORD thread_id); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(beng): return BOOL is temporary until this object becomes a 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WindowImpl. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOOL OnAppCommand(HWND window, short command, WORD device, int keystate); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnCancelMode(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCaptureChanged(HWND window); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnClose(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCommand(UINT notification_code, int command, HWND window); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnCreate(CREATESTRUCT* create_struct); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDestroy(); 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnDisplayChange(UINT bits_per_pixel, const gfx::Size& screen_size); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnDwmCompositionChanged(UINT msg, WPARAM w_param, LPARAM l_param); 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnEnterMenuLoop(BOOL from_track_popup_menu); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnEnterSizeMove(); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnEraseBkgnd(HDC dc); 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnExitMenuLoop(BOOL is_shortcut_menu); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExitSizeMove(); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetMinMaxInfo(MINMAXINFO* minmax_info); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnGetObject(UINT message, WPARAM w_param, LPARAM l_param); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnImeMessages(UINT message, WPARAM w_param, LPARAM l_param); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnInitMenu(HMENU menu); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnInputLangChange(DWORD character_set, HKL input_language_id); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnKeyEvent(UINT message, WPARAM w_param, LPARAM l_param); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnKillFocus(HWND focused_window); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnMouseActivate(UINT message, WPARAM w_param, LPARAM l_param); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param); 4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnMove(const gfx::Point& point); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMoving(UINT param, const RECT* new_bounds); 440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LRESULT OnNCActivate(UINT message, WPARAM w_param, LPARAM l_param); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnNCCalcSize(BOOL mode, LPARAM l_param); 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LRESULT OnNCHitTest(const gfx::Point& point); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnNCPaint(HRGN rgn); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnNCUAHDrawCaption(UINT message, WPARAM w_param, LPARAM l_param); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnNCUAHDrawFrame(UINT message, WPARAM w_param, LPARAM l_param); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnNotify(int w_param, NMHDR* l_param); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnPaint(HDC dc); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnReflectedMessage(UINT message, WPARAM w_param, LPARAM l_param); 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LRESULT OnScrollMessage(UINT message, WPARAM w_param, LPARAM l_param); 4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnSessionChange(WPARAM status_code, PWTSSESSION_NOTIFICATION session_id); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnSetCursor(UINT message, WPARAM w_param, LPARAM l_param); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetFocus(HWND last_focused_window); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnSetIcon(UINT size_type, HICON new_icon); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnSetText(const wchar_t* text); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSettingChange(UINT flags, const wchar_t* section); 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnSize(UINT param, const gfx::Size& size); 4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnSysCommand(UINT notification_code, const gfx::Point& point); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnThemeChanged(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT OnTouchEvent(UINT message, WPARAM w_param, LPARAM l_param); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnWindowPosChanging(WINDOWPOS* window_pos); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnWindowPosChanged(WINDOWPOS* window_pos); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) typedef std::vector<ui::TouchEvent> TouchEvents; 4643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Helper to handle the list of touch events passed in. We need this because 4653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // touch events on windows don't fire if we enter a modal loop in the context 4663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // of a touch event. 4673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void HandleTouchEvents(const TouchEvents& touch_events); 4683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Resets the flag which indicates that we are in the context of a touch down 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // event. 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void ResetTouchDownContext(); 472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Helper to handle mouse events. 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The |message|, |w_param|, |l_param| parameters identify the Windows mouse 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // message and its parameters respectively. 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The |track_mouse| parameter indicates if we should track the mouse. 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LRESULT HandleMouseEventInternal(UINT message, 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WPARAM w_param, 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LPARAM l_param, 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool track_mouse); 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 482c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Returns true if the mouse message passed in is an OS synthesized mouse 483c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // message. 484c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // |message| identifies the mouse message. 485c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // |message_time| is the time when the message occurred. 486c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // |l_param| indicates the location of the mouse message. 487c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool IsSynthesizedMouseMessage(unsigned int message, 488c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int message_time, 489c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch LPARAM l_param); 490c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 49103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Provides functionality to transition a frame to DWM. 49203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void PerformDwmTransition(); 49303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HWNDMessageHandlerDelegate* delegate_; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<FullscreenHandler> fullscreen_handler_; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Set to true in Close() and false is CloseNow(). 49958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool waiting_for_close_now_; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool remove_standard_frame_; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_system_default_icon_; 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether all ancestors have been enabled. This is only used if is_modal_ is 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool restored_enabled_; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 509a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The current cursor. 510a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) HCURSOR current_cursor_; 511a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last cursor that was active before the current one was selected. Saved 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // so that we can restore it. 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HCURSOR previous_cursor_; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Event handling ------------------------------------------------------------ 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The flags currently being used with TrackMouseEvent to track mouse 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messages. 0 if there is no active tracking. The value of this member is 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used when tracking is canceled. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD active_mouse_tracking_flags_; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to true when the user presses the right mouse button on the caption 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // area. We need this so we can correctly show the context menu on mouse-up. 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_right_mouse_pressed_on_caption_; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The set of touch devices currently down. 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TouchIDs touch_ids_; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ScopedRedrawLock ---------------------------------------------------------- 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Represents the number of ScopedRedrawLocks active against this widget. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is greater than zero, the widget should be locked against updates. 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int lock_updates_count_; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Window resizing ----------------------------------------------------------- 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When true, this flag makes us discard incoming SetWindowPos() requests that 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only change our position/size. (We still allow changes to Z-order, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // activation, etc.) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ignore_window_pos_changes_; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The last-seen monitor containing us, and its rect and work area. These are 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used to catch updates to the rect and work area and react accordingly. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HMONITOR last_monitor_; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect last_monitor_rect_, last_work_area_; 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Layered windows ----------------------------------------------------------- 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should we keep an off-screen buffer? This is false by default, set to true 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when WS_EX_LAYERED is specified before the native window is created. 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: this is intended to be used with a layered window (a window with an 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extended window style of WS_EX_LAYERED). If you are using a layered window 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and NOT changing the layered alpha or anything else, then leave this value 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // alone. OTOH if you are invoking SetLayeredWindowAttributes then you'll 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // most likely want to set this to false, or after changing the alpha toggle 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the extended style bit to false than back to true. See MSDN for more 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // details. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_layered_buffer_; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default alpha to be applied to the layered window. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BYTE layered_alpha_; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A canvas that contains the window contents in the case of a layered 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gfx::Canvas> layered_window_contents_; 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We must track the invalid rect ourselves, for two reasons: 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For layered windows, Windows will not do this properly with 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InvalidateRect()/GetUpdateRect(). (In fact, it'll return misleading 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // information from GetUpdateRect()). 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We also need to keep track of the invalid rectangle for the RootView should 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we need to paint the non-client area. The data supplied to WM_NCPAINT seems 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be insufficient. 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect invalid_rect_; 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Set to true when waiting for RedrawLayeredWindowContents(). 57958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool waiting_for_redraw_layered_window_contents_; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True the first time nccalc is called on a sizable widget 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_first_nccalc_; 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 584a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Copy of custom window region specified via SetRegion(), if any. 585a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::win::ScopedRegion custom_window_region_; 586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If > 0 indicates a menu is running (we're showing a native menu). 5885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int menu_depth_; 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // A factory used to lookup appbar autohide edges. 591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::WeakPtrFactory<HWNDMessageHandler> autohide_factory_; 592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 593d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Generates touch-ids for touch-events. 594d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::SequentialIDGenerator id_generator_; 5953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Indicates if the window needs the WS_VSCROLL and WS_HSCROLL styles. 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_scroll_styles_; 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Set to true if we are in the context of a sizing operation. 6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool in_size_loop_; 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 602a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Stores a pointer to the WindowEventTarget interface implemented by this 603a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // class. Allows callers to retrieve the interface pointer. 604a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<ui::ViewProp> prop_window_target_; 605a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 606cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Number of active touch down contexts. This is incremented on touch down 607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // events and decremented later using a delayed task. 608a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // We need this to ignore WM_MOUSEACTIVATE messages generated in response to 609a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // touch input. This is fine because activation still works correctly via 610a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // native SetFocus calls invoked in the views code. 611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int touch_down_contexts_; 612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 613c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Time the last touch message was received. Used to flag mouse messages 614c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // synthesized by Windows for touch which are not flagged by the OS as 615c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // synthesized mouse messages. For more information please refer to 616c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the IsMouseEventFromTouch function. 617c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static long last_touch_message_time_; 618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 619a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Time the last WM_MOUSEHWHEEL message is received. Please refer to the 620a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // HandleMouseEventInternal function as to why this is needed. 621a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch long last_mouse_hwheel_time_; 622a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 62303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // On Windows Vista and beyond, if we are transitioning from custom frame 62403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // to Aero(glass) we delay setting the DWM related properties in full 62503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // screen mode as DWM is not supported in full screen windows. We perform 62603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // the DWM related operations when the window comes out of fullscreen mode. 62703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // This member variable is set to true if the window is transitioning to 62803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // glass. Defaults to false. 62903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool dwm_transition_desired_; 63003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HWNDMessageHandler); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ 637