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

Side by Side Diff: chrome/browser/window_sizer.cc

Issue 79070: createWindow api call. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 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
« no previous file with comments | « chrome/browser/window_sizer.h ('k') | chrome/common/temp_scaffolding_stubs.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/window_sizer.h" 5 #include "chrome/browser/window_sizer.h"
6 6
7 #include <atlbase.h> 7 #include <atlbase.h>
8 #include <atlapp.h> 8 #include <atlapp.h>
9 #include <atlmisc.h> 9 #include <atlmisc.h>
10 10
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 } 81 }
82 82
83 DISALLOW_COPY_AND_ASSIGN(DefaultMonitorInfoProvider); 83 DISALLOW_COPY_AND_ASSIGN(DefaultMonitorInfoProvider);
84 }; 84 };
85 85
86 /////////////////////////////////////////////////////////////////////////////// 86 ///////////////////////////////////////////////////////////////////////////////
87 // An implementation of WindowSizer::StateProvider that gets the last active 87 // An implementation of WindowSizer::StateProvider that gets the last active
88 // and persistent state from the browser window and the user's profile. 88 // and persistent state from the browser window and the user's profile.
89 class DefaultStateProvider : public WindowSizer::StateProvider { 89 class DefaultStateProvider : public WindowSizer::StateProvider {
90 public: 90 public:
91 explicit DefaultStateProvider(const std::wstring& app_name) 91 explicit DefaultStateProvider(const std::wstring& app_name, Browser* browser)
92 : app_name_(app_name) { 92 : app_name_(app_name),
93 browser_(browser) {
93 } 94 }
94 95
95 // Overridden from WindowSizer::StateProvider: 96 // Overridden from WindowSizer::StateProvider:
96 virtual bool GetPersistentState(gfx::Rect* bounds, bool* maximized) const { 97 virtual bool GetPersistentState(gfx::Rect* bounds, bool* maximized) const {
97 DCHECK(bounds && maximized); 98 DCHECK(bounds && maximized);
98 99
99 std::wstring key(prefs::kBrowserWindowPlacement); 100 std::wstring key(prefs::kBrowserWindowPlacement);
100 if (!app_name_.empty()) { 101 if (!app_name_.empty()) {
101 key.append(L"_"); 102 key.append(L"_");
102 key.append(app_name_); 103 key.append(app_name_);
(...skipping 15 matching lines...) Expand all
118 bounds->SetRect(left, top, std::max(0, right - left), 119 bounds->SetRect(left, top, std::max(0, right - left),
119 std::max(0, bottom - top)); 120 std::max(0, bottom - top));
120 return has_prefs; 121 return has_prefs;
121 } 122 }
122 123
123 virtual bool GetLastActiveWindowState(gfx::Rect* bounds) const { 124 virtual bool GetLastActiveWindowState(gfx::Rect* bounds) const {
124 // Applications are always restored with the same position. 125 // Applications are always restored with the same position.
125 if (!app_name_.empty()) 126 if (!app_name_.empty())
126 return false; 127 return false;
127 128
128 BrowserList::const_reverse_iterator it = BrowserList::begin_last_active(); 129 // If a reference browser is set, use its window. Otherwise find last
129 BrowserList::const_reverse_iterator end = BrowserList::end_last_active(); 130 // active.
130 for (; it != end; ++it) { 131 BrowserWindow* window = NULL;
131 Browser* last_active = *it; 132 if (browser_) {
132 if (last_active && last_active->type() == Browser::TYPE_NORMAL) { 133 window = browser_->window();
133 BrowserWindow* window = last_active->window(); 134 DCHECK(window);
134 DCHECK(window); 135 } else {
135 *bounds = window->GetNormalBounds(); 136 BrowserList::const_reverse_iterator it = BrowserList::begin_last_active();
136 return true; 137 BrowserList::const_reverse_iterator end = BrowserList::end_last_active();
138 for (; (it != end); ++it) {
139 Browser* last_active = *it;
140 if (last_active && last_active->type() == Browser::TYPE_NORMAL) {
141 window = last_active->window();
142 DCHECK(window);
143 break;
144 }
137 } 145 }
138 } 146 }
139 147
148 if (window) {
149 *bounds = window->GetNormalBounds();
150 return true;
151 }
152
140 return false; 153 return false;
141 } 154 }
142 155
143 private: 156 private:
144 std::wstring app_name_; 157 std::wstring app_name_;
145 158
159 // If set, is used as the reference browser for GetLastActiveWindowState.
160 Browser* browser_;
146 DISALLOW_EVIL_CONSTRUCTORS(DefaultStateProvider); 161 DISALLOW_EVIL_CONSTRUCTORS(DefaultStateProvider);
147 }; 162 };
148 163
149 /////////////////////////////////////////////////////////////////////////////// 164 ///////////////////////////////////////////////////////////////////////////////
150 // WindowSizer, public: 165 // WindowSizer, public:
151 166
152 WindowSizer::WindowSizer( 167 WindowSizer::WindowSizer(
153 StateProvider* state_provider, 168 StateProvider* state_provider,
154 MonitorInfoProvider* monitor_info_provider) { 169 MonitorInfoProvider* monitor_info_provider) {
155 Init(state_provider, monitor_info_provider); 170 Init(state_provider, monitor_info_provider);
156 } 171 }
157 172
158 WindowSizer::~WindowSizer() { 173 WindowSizer::~WindowSizer() {
159 if (state_provider_) 174 if (state_provider_)
160 delete state_provider_; 175 delete state_provider_;
161 if (monitor_info_provider_) 176 if (monitor_info_provider_)
162 delete monitor_info_provider_; 177 delete monitor_info_provider_;
163 } 178 }
164 179
165 // static 180 // static
166 void WindowSizer::GetBrowserWindowBounds(const std::wstring& app_name, 181 void WindowSizer::GetBrowserWindowBounds(const std::wstring& app_name,
167 const gfx::Rect& specified_bounds, 182 const gfx::Rect& specified_bounds,
183 Browser* browser,
168 gfx::Rect* window_bounds, 184 gfx::Rect* window_bounds,
169 bool* maximized) { 185 bool* maximized) {
170 const WindowSizer sizer(new DefaultStateProvider(app_name), 186 const WindowSizer sizer(new DefaultStateProvider(app_name, browser),
171 new DefaultMonitorInfoProvider); 187 new DefaultMonitorInfoProvider);
172 sizer.DetermineWindowBounds(specified_bounds, window_bounds, maximized); 188 sizer.DetermineWindowBounds(specified_bounds, window_bounds, maximized);
173 } 189 }
174 190
175 gfx::Point WindowSizer::GetDefaultPopupOrigin(const gfx::Size& size) { 191 gfx::Point WindowSizer::GetDefaultPopupOrigin(const gfx::Size& size) {
176 RECT area; 192 RECT area;
177 SystemParametersInfo(SPI_GETWORKAREA, 0, &area, 0); 193 SystemParametersInfo(SPI_GETWORKAREA, 0, &area, 0);
178 gfx::Point corner(area.left, area.top); 194 gfx::Point corner(area.left, area.top);
179 195
180 if (Browser* b = BrowserList::GetLastActive()) { 196 if (Browser* b = BrowserList::GetLastActive()) {
(...skipping 13 matching lines...) Expand all
194 ); 210 );
195 } 211 }
196 } 212 }
197 return corner; 213 return corner;
198 } 214 }
199 215
200 /////////////////////////////////////////////////////////////////////////////// 216 ///////////////////////////////////////////////////////////////////////////////
201 // WindowSizer, private: 217 // WindowSizer, private:
202 218
203 WindowSizer::WindowSizer(const std::wstring& app_name) { 219 WindowSizer::WindowSizer(const std::wstring& app_name) {
204 Init(new DefaultStateProvider(app_name), 220 Init(new DefaultStateProvider(app_name, NULL),
205 new DefaultMonitorInfoProvider); 221 new DefaultMonitorInfoProvider);
206 } 222 }
207 223
208 void WindowSizer::Init(StateProvider* state_provider, 224 void WindowSizer::Init(StateProvider* state_provider,
209 MonitorInfoProvider* monitor_info_provider) { 225 MonitorInfoProvider* monitor_info_provider) {
210 state_provider_ = state_provider; 226 state_provider_ = state_provider;
211 monitor_info_provider_ = monitor_info_provider; 227 monitor_info_provider_ = monitor_info_provider;
212 } 228 }
213 229
214 void WindowSizer::DetermineWindowBounds(const gfx::Rect& specified_bounds, 230 void WindowSizer::DetermineWindowBounds(const gfx::Rect& specified_bounds,
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 // Now that we've tried to correct the x/y position to something reasonable, 369 // Now that we've tried to correct the x/y position to something reasonable,
354 // see if the window is still too tall or wide to fit, and resize it if need 370 // see if the window is still too tall or wide to fit, and resize it if need
355 // be. 371 // be.
356 if ((bottom_offscreen || top_offscreen) && 372 if ((bottom_offscreen || top_offscreen) &&
357 bounds->bottom() > work_area.bottom()) 373 bounds->bottom() > work_area.bottom())
358 bounds->set_height(work_area.height() - 2 * kWindowTilePixels); 374 bounds->set_height(work_area.height() - 2 * kWindowTilePixels);
359 if ((left_offscreen || right_offscreen) && 375 if ((left_offscreen || right_offscreen) &&
360 bounds->right() > work_area.right()) 376 bounds->right() > work_area.right())
361 bounds->set_width(work_area.width() - 2 * kWindowTilePixels); 377 bounds->set_width(work_area.width() - 2 * kWindowTilePixels);
362 } 378 }
OLDNEW
« no previous file with comments | « chrome/browser/window_sizer.h ('k') | chrome/common/temp_scaffolding_stubs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698