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

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller.mm

Issue 7003063: Enforce different min size for popups than tabbed browsers on MacOSX. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update window sizing test broken by change. Created 9 years, 6 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 #import "chrome/browser/ui/cocoa/browser_window_controller.h" 5 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
6 6
7 #include <Carbon/Carbon.h> 7 #include <Carbon/Carbon.h>
8 8
9 #include "app/mac/scoped_nsdisable_screen_updates.h" 9 #include "app/mac/scoped_nsdisable_screen_updates.h"
10 #include "app/mac/nsimage_cache.h" 10 #include "app/mac/nsimage_cache.h"
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 // prevents the browser from being able to quit <http://crbug.com/79113>. 267 // prevents the browser from being able to quit <http://crbug.com/79113>.
268 if ([window respondsToSelector:@selector(setRestorable:)]) 268 if ([window respondsToSelector:@selector(setRestorable:)])
269 [window setRestorable:NO]; 269 [window setRestorable:NO];
270 270
271 // Get the most appropriate size for the window, then enforce the 271 // Get the most appropriate size for the window, then enforce the
272 // minimum width and height. The window shim will handle flipping 272 // minimum width and height. The window shim will handle flipping
273 // the coordinates for us so we can use it to save some code. 273 // the coordinates for us so we can use it to save some code.
274 // Note that this may leave a significant portion of the window 274 // Note that this may leave a significant portion of the window
275 // offscreen, but there will always be enough window onscreen to 275 // offscreen, but there will always be enough window onscreen to
276 // drag the whole window back into view. 276 // drag the whole window back into view.
277 NSSize minSize = [[self window] minSize];
278 gfx::Rect desiredContentRect = browser_->GetSavedWindowBounds(); 277 gfx::Rect desiredContentRect = browser_->GetSavedWindowBounds();
279 gfx::Rect windowRect = desiredContentRect; 278 gfx::Rect windowRect = desiredContentRect;
280 if (windowRect.width() < minSize.width) 279 windowRect = [self enforceMinWindowSize:windowRect];
281 windowRect.set_width(minSize.width);
282 if (windowRect.height() < minSize.height)
283 windowRect.set_height(minSize.height);
284 280
285 // When we are given x/y coordinates of 0 on a created popup window, assume 281 // When we are given x/y coordinates of 0 on a created popup window, assume
286 // none were given by the window.open() command. 282 // none were given by the window.open() command.
287 if ((browser_->is_type_popup() || browser_->is_type_panel()) && 283 if ((browser_->is_type_popup() || browser_->is_type_panel()) &&
288 windowRect.x() == 0 && windowRect.y() == 0) { 284 windowRect.x() == 0 && windowRect.y() == 0) {
289 gfx::Size size = windowRect.size(); 285 gfx::Size size = windowRect.size();
290 windowRect.set_origin(WindowSizer::GetDefaultPopupOrigin(size)); 286 windowRect.set_origin(WindowSizer::GetDefaultPopupOrigin(size));
291 } 287 }
292 288
293 // Size and position the window. Note that it is not yet onscreen. Popup 289 // Size and position the window. Note that it is not yet onscreen. Popup
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 [fullscreenButton setAction:@selector(enterFullscreen:)]; 427 [fullscreenButton setAction:@selector(enterFullscreen:)];
432 [fullscreenButton setTarget:self]; 428 [fullscreenButton setTarget:self];
433 } 429 }
434 430
435 // We are done initializing now. 431 // We are done initializing now.
436 initializing_ = NO; 432 initializing_ = NO;
437 } 433 }
438 return self; 434 return self;
439 } 435 }
440 436
437 - (void)awakeFromNib {
438 // Set different minimum sizes on tabbed windows vs non-tabbed, e.g. popups.
439 NSSize minSize = [self isTabbedWindow] ?
440 NSMakeSize(400, 250) : NSMakeSize(100, 100);
441 [[self window] setContentMinSize:minSize];
442 }
443
441 - (void)dealloc { 444 - (void)dealloc {
442 browser_->CloseAllTabs(); 445 browser_->CloseAllTabs();
443 [downloadShelfController_ exiting]; 446 [downloadShelfController_ exiting];
444 447
445 // Explicitly release |fullscreenController_| here, as it may call back to 448 // Explicitly release |fullscreenController_| here, as it may call back to
446 // this BWC in |-dealloc|. We are required to call |-exitFullscreen| before 449 // this BWC in |-dealloc|. We are required to call |-exitFullscreen| before
447 // releasing the controller. 450 // releasing the controller.
448 [fullscreenController_ exitFullscreen]; 451 [fullscreenController_ exitFullscreen];
449 fullscreenController_.reset(); 452 fullscreenController_.reset();
450 453
451 // Under certain testing configurations we may not actually own the browser. 454 // Under certain testing configurations we may not actually own the browser.
452 if (ownsBrowser_ == NO) 455 if (ownsBrowser_ == NO)
453 ignore_result(browser_.release()); 456 ignore_result(browser_.release());
454 457
455 [[NSNotificationCenter defaultCenter] removeObserver:self]; 458 [[NSNotificationCenter defaultCenter] removeObserver:self];
456 459
457 [super dealloc]; 460 [super dealloc];
458 } 461 }
459 462
463 - (gfx::Rect)enforceMinWindowSize:(gfx::Rect)bounds {
464 gfx::Rect checked_bounds = bounds;
465
466 NSSize minSize = [[self window] minSize];
467 if (bounds.width() < minSize.width)
468 checked_bounds.set_width(minSize.width);
469 if (bounds.height() < minSize.height)
470 checked_bounds.set_height(minSize.height);
Nico 2011/06/09 16:24:08 If you use setMinSize instead of setMinContentSize
jennb 2011/06/09 16:44:54 Yes, it's still needed. The .xib file used to set
471
472 return checked_bounds;
473 }
474
460 - (BrowserWindow*)browserWindow { 475 - (BrowserWindow*)browserWindow {
461 return windowShim_.get(); 476 return windowShim_.get();
462 } 477 }
463 478
464 - (ToolbarController*)toolbarController { 479 - (ToolbarController*)toolbarController {
465 return toolbarController_.get(); 480 return toolbarController_.get();
466 } 481 }
467 482
468 - (TabStripController*)tabStripController { 483 - (TabStripController*)tabStripController {
469 return tabStripController_.get(); 484 return tabStripController_.get();
(...skipping 1727 matching lines...) Expand 10 before | Expand all | Expand 10 after
2197 2212
2198 - (BOOL)supportsBookmarkBar { 2213 - (BOOL)supportsBookmarkBar {
2199 return [self supportsWindowFeature:Browser::FEATURE_BOOKMARKBAR]; 2214 return [self supportsWindowFeature:Browser::FEATURE_BOOKMARKBAR];
2200 } 2215 }
2201 2216
2202 - (BOOL)isTabbedWindow { 2217 - (BOOL)isTabbedWindow {
2203 return browser_->is_type_tabbed(); 2218 return browser_->is_type_tabbed();
2204 } 2219 }
2205 2220
2206 @end // @implementation BrowserWindowController(WindowType) 2221 @end // @implementation BrowserWindowController(WindowType)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698