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 CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_WIN_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_frame.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/minimize_button_metrics_win.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/native_browser_frame.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/image_button.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/native_widget_win.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserView; 170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class BrowserWindowPropertyManager; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NativeMenuWin; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserFrameWin 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserFrameWin is a NativeWidgetWin subclass that provides the window frame 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for the Chrome browser window. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserFrameWin : public views::NativeWidgetWin, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public NativeBrowserFrame, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public views::ButtonListener { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserFrameWin(BrowserFrame* browser_frame, BrowserView* browser_view); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BrowserFrameWin(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserView* browser_view() const { return browser_view_; } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Explicitly sets how windows are shown. Use a value of -1 to give the 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default behavior. This is used during testing and not generally useful 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // otherwise. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetShowState(int state); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::NativeWidgetWin: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetInitialShowState() const OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetClientAreaInsets(gfx::Insets* insets) const OVERRIDE; 470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual void HandleCreate() OVERRIDE; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HandleFrameChanged() OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PreHandleMSG(UINT message, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT* result) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PostHandleMSG(UINT message, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WPARAM w_param, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LPARAM l_param) OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldUseNativeFrame() const OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ShowMaximizedWithBounds( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& restored_bounds) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ShowWithWindowState(ui::WindowShowState show_state) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Close() OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void FrameTypeChanged() OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetFullscreen(bool fullscreen) OVERRIDE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Activate() OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from NativeBrowserFrame: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual views::NativeWidget* AsNativeWidget() OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const views::NativeWidget* AsNativeWidget() const OVERRIDE; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool UsesNativeSystemMenu() const OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetMinimizeButtonOffset() const OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overriden from views::ImageButton override: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Event& event) OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the DWM with the frame bounds. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateDWMFrame(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles metro navigation and search requests. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleMetroNavSearchRequest(WPARAM w_param, LPARAM l_param); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns information about the currently displayed tab in metro mode. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetMetroCurrentTabInfo(WPARAM w_param); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensures that the window frame follows the Windows 8 metro app guidelines, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // i.e. no system menu, etc. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AdjustFrameForImmersiveMode(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the frame is closed. Only applies to Windows 8 metro mode. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseImmersiveFrame(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::NativeMenuWin* GetSystemMenu(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The BrowserView is our ClientView. This is a pointer to it. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserView* browser_view_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserFrame* browser_frame_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The wrapped system menu itself. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<views::NativeMenuWin> system_menu_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MinimizeButtonMetrics minimize_button_metrics_; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<BrowserWindowPropertyManager> browser_window_property_manager_; 1060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserFrameWin); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Helper function to create the incognito/normal browser window switcher. 1117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)views::Button* MakeWindowSwitcherButton(views::ButtonListener* listener, 1127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool is_off_the_record); 1137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_WIN_H_ 115