Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Side by Side Diff: chrome/browser/ui/views/frame/browser_frame.cc

Issue 7015051: Re-land: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/frame/browser_frame.h" 5 #include "chrome/browser/ui/views/frame/browser_frame.h"
6 6
7 #include "base/command_line.h"
8 #include "chrome/browser/themes/theme_service.h"
9 #include "chrome/browser/themes/theme_service_factory.h"
10 #include "chrome/browser/ui/browser_list.h"
7 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" 11 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
8 #include "chrome/browser/ui/views/frame/browser_root_view.h" 12 #include "chrome/browser/ui/views/frame/browser_root_view.h"
9 #include "chrome/browser/ui/views/frame/browser_view.h" 13 #include "chrome/browser/ui/views/frame/browser_view.h"
10 #include "chrome/browser/ui/views/frame/native_browser_frame.h" 14 #include "chrome/browser/ui/views/frame/native_browser_frame.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "ui/base/theme_provider.h"
11 #include "views/widget/native_widget.h" 17 #include "views/widget/native_widget.h"
12 #include "views/widget/widget.h" 18 #include "views/widget/widget.h"
13 #include "views/window/native_window.h" 19 #include "views/window/native_window.h"
14 #include "views/window/window.h" 20 #include "views/window/window.h"
15 21
22 #if defined(OS_WIN)
23 #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
24 #endif
25
16 //////////////////////////////////////////////////////////////////////////////// 26 ////////////////////////////////////////////////////////////////////////////////
17 // BrowserFrame, public: 27 // BrowserFrame, public:
18 28
29 BrowserFrame::BrowserFrame(BrowserView* browser_view)
30 : native_browser_frame_(NULL),
31 root_view_(NULL),
32 browser_frame_view_(NULL),
33 browser_view_(browser_view) {
34 browser_view_->set_frame(this);
35 set_is_secondary_widget(false);
36 }
37
19 BrowserFrame::~BrowserFrame() { 38 BrowserFrame::~BrowserFrame() {
20 } 39 }
21 40
22 views::Window* BrowserFrame::GetWindow() { 41 void BrowserFrame::InitBrowserFrame() {
23 return native_browser_frame_->AsNativeWindow()->GetWindow(); 42 native_browser_frame_ =
43 NativeBrowserFrame::CreateNativeBrowserFrame(this, browser_view_);
44 views::Window::InitParams params(browser_view_);
45 params.native_window = native_browser_frame_->AsNativeWindow();
46 params.widget_init_params.native_widget =
47 params.native_window->AsNativeWidget();
48 InitWindow(params);
49 #if defined(OS_CHROMEOS)
50 // On ChromeOS we always want top-level windows to appear active.
51 if (!browser_view_->IsBrowserTypePopup())
52 DisableInactiveRendering();
53 #endif
24 } 54 }
25 55
26 int BrowserFrame::GetMinimizeButtonOffset() const { 56 int BrowserFrame::GetMinimizeButtonOffset() const {
27 return native_browser_frame_->GetMinimizeButtonOffset(); 57 return native_browser_frame_->GetMinimizeButtonOffset();
28 } 58 }
29 59
30 gfx::Rect BrowserFrame::GetBoundsForTabStrip(views::View* tabstrip) const { 60 gfx::Rect BrowserFrame::GetBoundsForTabStrip(views::View* tabstrip) const {
31 return browser_frame_view_->GetBoundsForTabStrip(tabstrip); 61 return browser_frame_view_->GetBoundsForTabStrip(tabstrip);
32 } 62 }
33 63
34 int BrowserFrame::GetHorizontalTabStripVerticalOffset(bool restored) const { 64 int BrowserFrame::GetHorizontalTabStripVerticalOffset(bool restored) const {
35 return browser_frame_view_->GetHorizontalTabStripVerticalOffset(restored); 65 return browser_frame_view_->GetHorizontalTabStripVerticalOffset(restored);
36 } 66 }
37 67
38 void BrowserFrame::UpdateThrobber(bool running) { 68 void BrowserFrame::UpdateThrobber(bool running) {
39 browser_frame_view_->UpdateThrobber(running); 69 browser_frame_view_->UpdateThrobber(running);
40 } 70 }
41 71
42 ui::ThemeProvider* BrowserFrame::GetThemeProviderForFrame() const { 72 bool BrowserFrame::AlwaysUseNativeFrame() const {
43 return native_browser_frame_->GetThemeProviderForFrame(); 73 // App panel windows draw their own frame.
44 } 74 if (browser_view_->IsBrowserTypePanel())
75 return false;
45 76
46 bool BrowserFrame::AlwaysUseNativeFrame() const { 77 // We don't theme popup or app windows, so regardless of whether or not a
47 return native_browser_frame_->AlwaysUseNativeFrame(); 78 // theme is active for normal browser windows, we don't want to use the custom
79 // frame for popups/apps.
80 if (!browser_view_->IsBrowserTypeNormal() && ShouldUseNativeFrame())
81 return true;
82
83 // Otherwise, we use the native frame when we're told we should by the theme
84 // provider (e.g. no custom theme is active).
85 return GetThemeProvider()->ShouldUseNativeFrame();
48 } 86 }
49 87
50 views::View* BrowserFrame::GetFrameView() const { 88 views::View* BrowserFrame::GetFrameView() const {
51 return browser_frame_view_; 89 return browser_frame_view_;
52 } 90 }
53 91
54 void BrowserFrame::TabStripDisplayModeChanged() { 92 void BrowserFrame::TabStripDisplayModeChanged() {
93 if (GetRootView()->has_children()) {
94 // Make sure the child of the root view gets Layout again.
95 GetRootView()->GetChildViewAt(0)->InvalidateLayout();
96 }
97 GetRootView()->Layout();
55 native_browser_frame_->TabStripDisplayModeChanged(); 98 native_browser_frame_->TabStripDisplayModeChanged();
56 } 99 }
57 100
58 //////////////////////////////////////////////////////////////////////////////// 101 ///////////////////////////////////////////////////////////////////////////////
59 // BrowserFrame, NativeBrowserFrameDelegate implementation: 102 // BrowserFrameWin, views::Window overrides:
60 103
61 views::RootView* BrowserFrame::DelegateCreateRootView() { 104 bool BrowserFrame::IsMaximized() const {
105 #if defined(OS_CHROMEOS)
106 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeosFrame)) {
107 return !IsFullscreen() &&
108 (!browser_view_->IsBrowserTypePopup() || Window::IsMaximized());
109 }
110 #endif
111 return Window::IsMaximized();
112 }
113
114 views::RootView* BrowserFrame::CreateRootView() {
62 root_view_ = new BrowserRootView( 115 root_view_ = new BrowserRootView(
63 browser_view_, 116 browser_view_,
64 native_browser_frame_->AsNativeWindow()->AsNativeWidget()->GetWidget()); 117 native_browser_frame_->AsNativeWindow()->AsNativeWidget()->GetWidget());
65 return root_view_; 118 return root_view_;
66 } 119 }
67 120
68 views::NonClientFrameView* BrowserFrame::DelegateCreateFrameViewForWindow() { 121 views::NonClientFrameView* BrowserFrame::CreateFrameViewForWindow() {
69 browser_frame_view_ = 122 #if defined(OS_WIN)
70 native_browser_frame_->CreateBrowserNonClientFrameView(); 123 if (AlwaysUseNativeFrame()) {
124 browser_frame_view_ = new GlassBrowserFrameView(this, browser_view_);
125 } else {
126 #endif
127 browser_frame_view_ =
128 browser::CreateBrowserNonClientFrameView(this, browser_view_);
129 #if defined(OS_WIN)
130 }
131 #endif
71 return browser_frame_view_; 132 return browser_frame_view_;
72 } 133 }
73 134
135 bool BrowserFrame::GetAccelerator(int command_id,
136 ui::Accelerator* accelerator) {
137 return browser_view_->GetAccelerator(command_id, accelerator);
138 }
74 139
75 //////////////////////////////////////////////////////////////////////////////// 140 ThemeProvider* BrowserFrame::GetThemeProvider() const {
76 // BrowserFrame, protected: 141 return ThemeServiceFactory::GetForProfile(
142 browser_view_->browser()->profile());
143 }
77 144
78 BrowserFrame::BrowserFrame(BrowserView* browser_view) 145 void BrowserFrame::OnNativeWindowActivationChanged(bool active) {
79 : native_browser_frame_(NULL), 146 if (active) {
80 root_view_(NULL), 147 // When running under remote desktop, if the remote desktop client is not
81 browser_frame_view_(NULL), 148 // active on the users desktop, then none of the windows contained in the
82 browser_view_(browser_view) { 149 // remote desktop will be activated. However, WindowWin::Activate will
150 // still bring this browser window to the foreground. We explicitly set
151 // ourselves as the last active browser window to ensure that we get treated
152 // as such by the rest of Chrome.
153 BrowserList::SetLastActive(browser_view_->browser());
154 }
155 Window::OnNativeWindowActivationChanged(active);
83 } 156 }
157
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/browser_frame.h ('k') | chrome/browser/ui/views/frame/browser_frame_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698