// 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. #include "chrome/browser/ui/views/constrained_window_views.h" #include "ui/views/widget/native_widget_win.h" namespace { bool IsNonClientHitTestCode(UINT hittest) { return hittest != HTCLIENT && hittest != HTNOWHERE && hittest != HTCLOSE; } } class NativeConstrainedWindowWin : public NativeConstrainedWindow, public views::NativeWidgetWin { public: explicit NativeConstrainedWindowWin(NativeConstrainedWindowDelegate* delegate) : views::NativeWidgetWin(delegate->AsNativeWidgetDelegate()), delegate_(delegate) { } virtual ~NativeConstrainedWindowWin() { } private: // Overridden from NativeConstrainedWindow: virtual views::NativeWidget* AsNativeWidget() OVERRIDE { return this; } // Overridden from views::NativeWidgetWin: virtual void OnFinalMessage(HWND window) OVERRIDE { delegate_->OnNativeConstrainedWindowDestroyed(); NativeWidgetWin::OnFinalMessage(window); } virtual bool PreHandleMSG(UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) OVERRIDE { if (message == WM_MOUSEACTIVATE && IsNonClientHitTestCode(static_cast(LOWORD(l_param)))) { delegate_->OnNativeConstrainedWindowMouseActivate(); } return false; } NativeConstrainedWindowDelegate* delegate_; DISALLOW_COPY_AND_ASSIGN(NativeConstrainedWindowWin); }; //////////////////////////////////////////////////////////////////////////////// // NativeConstrainedWindow, public: // static NativeConstrainedWindow* NativeConstrainedWindow::CreateNativeConstrainedWindow( NativeConstrainedWindowDelegate* delegate) { return new NativeConstrainedWindowWin(delegate); }