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

Side by Side Diff: chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm

Issue 1051953003: Revert of [MacViews] Implement size constraints for app windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/cocoa/apps/native_app_window_cocoa.h" 5 #include "chrome/browser/ui/cocoa/apps/native_app_window_cocoa.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/mac/foundation_util.h" 8 #include "base/mac/foundation_util.h"
9 #include "base/mac/mac_util.h" 9 #include "base/mac/mac_util.h"
10 #include "base/mac/sdk_forward_declarations.h" 10 #include "base/mac/sdk_forward_declarations.h"
11 #include "base/strings/sys_string_conversions.h" 11 #include "base/strings/sys_string_conversions.h"
12 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h" 12 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/cocoa/browser_window_utils.h" 14 #include "chrome/browser/ui/cocoa/browser_window_utils.h"
15 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h" 15 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h"
16 #include "chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa .h" 16 #include "chrome/browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa .h"
17 #include "chrome/browser/ui/cocoa/extensions/extension_view_mac.h" 17 #include "chrome/browser/ui/cocoa/extensions/extension_view_mac.h"
18 #include "chrome/common/chrome_switches.h" 18 #include "chrome/common/chrome_switches.h"
19 #include "content/public/browser/native_web_keyboard_event.h" 19 #include "content/public/browser/native_web_keyboard_event.h"
20 #include "content/public/browser/render_widget_host_view.h" 20 #include "content/public/browser/render_widget_host_view.h"
21 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
22 #include "extensions/common/extension.h" 22 #include "extensions/common/extension.h"
23 #include "skia/ext/skia_utils_mac.h" 23 #include "skia/ext/skia_utils_mac.h"
24 #include "third_party/skia/include/core/SkRegion.h" 24 #include "third_party/skia/include/core/SkRegion.h"
25 #import "ui/gfx/mac/nswindow_frame_controls.h"
26 #include "ui/gfx/skia_util.h" 25 #include "ui/gfx/skia_util.h"
27 26
28 // NOTE: State Before Update. 27 // NOTE: State Before Update.
29 // 28 //
30 // Internal state, such as |is_maximized_|, must be set before the window 29 // Internal state, such as |is_maximized_|, must be set before the window
31 // state is changed so that it is accurate when e.g. a resize results in a call 30 // state is changed so that it is accurate when e.g. a resize results in a call
32 // to |OnNativeWindowChanged|. 31 // to |OnNativeWindowChanged|.
33 32
34 // NOTE: Maximize and Zoom. 33 // NOTE: Maximize and Zoom.
35 // 34 //
36 // Zooming is implemented manually in order to implement maximize functionality 35 // Zooming is implemented manually in order to implement maximize functionality
37 // and to support non resizable windows. The window will be resized explicitly 36 // and to support non resizable windows. The window will be resized explicitly
38 // in the |WindowWillZoom| call. 37 // in the |WindowWillZoom| call.
39 // 38 //
40 // Attempting maximize and restore functionality with non resizable windows 39 // Attempting maximize and restore functionality with non resizable windows
41 // using the native zoom method did not work, even with 40 // using the native zoom method did not work, even with
42 // windowWillUseStandardFrame, as the window would not restore back to the 41 // windowWillUseStandardFrame, as the window would not restore back to the
43 // desired size. 42 // desired size.
44 43
45 using extensions::AppWindow; 44 using extensions::AppWindow;
46 45
47 @interface NSWindow (NSPrivateApis) 46 @interface NSWindow (NSPrivateApis)
48 - (void)setBottomCornerRounded:(BOOL)rounded; 47 - (void)setBottomCornerRounded:(BOOL)rounded;
49 - (BOOL)_isTitleHidden; 48 - (BOOL)_isTitleHidden;
50 @end 49 @end
51 50
52 namespace { 51 namespace {
53 52
53 void SetFullScreenCollectionBehavior(NSWindow* window, bool allow_fullscreen) {
54 NSWindowCollectionBehavior behavior = [window collectionBehavior];
55 if (allow_fullscreen)
56 behavior |= NSWindowCollectionBehaviorFullScreenPrimary;
57 else
58 behavior &= ~NSWindowCollectionBehaviorFullScreenPrimary;
59 [window setCollectionBehavior:behavior];
60 }
61
54 void SetWorkspacesCollectionBehavior(NSWindow* window, bool always_visible) { 62 void SetWorkspacesCollectionBehavior(NSWindow* window, bool always_visible) {
55 NSWindowCollectionBehavior behavior = [window collectionBehavior]; 63 NSWindowCollectionBehavior behavior = [window collectionBehavior];
56 if (always_visible) 64 if (always_visible)
57 behavior |= NSWindowCollectionBehaviorCanJoinAllSpaces; 65 behavior |= NSWindowCollectionBehaviorCanJoinAllSpaces;
58 else 66 else
59 behavior &= ~NSWindowCollectionBehaviorCanJoinAllSpaces; 67 behavior &= ~NSWindowCollectionBehaviorCanJoinAllSpaces;
60 [window setCollectionBehavior:behavior]; 68 [window setCollectionBehavior:behavior];
61 } 69 }
62 70
63 void InitCollectionBehavior(NSWindow* window) { 71 void InitCollectionBehavior(NSWindow* window) {
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 bool fullscreen = (fullscreen_types != AppWindow::FULLSCREEN_TYPE_NONE); 465 bool fullscreen = (fullscreen_types != AppWindow::FULLSCREEN_TYPE_NONE);
458 if (fullscreen == is_fullscreen_) 466 if (fullscreen == is_fullscreen_)
459 return; 467 return;
460 is_fullscreen_ = fullscreen; 468 is_fullscreen_ = fullscreen;
461 469
462 if (base::mac::IsOSLionOrLater()) { 470 if (base::mac::IsOSLionOrLater()) {
463 // If going fullscreen, but the window is constrained (fullscreen UI control 471 // If going fullscreen, but the window is constrained (fullscreen UI control
464 // is disabled), temporarily enable it. It will be disabled again on leaving 472 // is disabled), temporarily enable it. It will be disabled again on leaving
465 // fullscreen. 473 // fullscreen.
466 if (fullscreen && !shows_fullscreen_controls_) 474 if (fullscreen && !shows_fullscreen_controls_)
467 gfx::SetNSWindowCanFullscreen(window(), true); 475 SetFullScreenCollectionBehavior(window(), true);
468 [window() toggleFullScreen:nil]; 476 [window() toggleFullScreen:nil];
469 return; 477 return;
470 } 478 }
471 479
472 DCHECK(base::mac::IsOSSnowLeopard()); 480 DCHECK(base::mac::IsOSSnowLeopard());
473 481
474 // Fade to black. 482 // Fade to black.
475 const CGDisplayReservationInterval kFadeDurationSeconds = 0.6; 483 const CGDisplayReservationInterval kFadeDurationSeconds = 0.6;
476 bool did_fade_out = false; 484 bool did_fade_out = false;
477 CGDisplayFadeReservationToken token; 485 CGDisplayFadeReservationToken token;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 864
857 void NativeAppWindowCocoa::WindowDidEnterFullscreen() { 865 void NativeAppWindowCocoa::WindowDidEnterFullscreen() {
858 is_fullscreen_ = true; 866 is_fullscreen_ = true;
859 app_window_->OSFullscreen(); 867 app_window_->OSFullscreen();
860 app_window_->OnNativeWindowChanged(); 868 app_window_->OnNativeWindowChanged();
861 } 869 }
862 870
863 void NativeAppWindowCocoa::WindowDidExitFullscreen() { 871 void NativeAppWindowCocoa::WindowDidExitFullscreen() {
864 is_fullscreen_ = false; 872 is_fullscreen_ = false;
865 if (!shows_fullscreen_controls_) 873 if (!shows_fullscreen_controls_)
866 gfx::SetNSWindowCanFullscreen(window(), false); 874 SetFullScreenCollectionBehavior(window(), false);
867 875
868 app_window_->Restore(); 876 app_window_->Restore();
869 app_window_->OnNativeWindowChanged(); 877 app_window_->OnNativeWindowChanged();
870 } 878 }
871 879
872 void NativeAppWindowCocoa::WindowWillZoom() { 880 void NativeAppWindowCocoa::WindowWillZoom() {
873 // See top of file NOTE: Maximize and Zoom. 881 // See top of file NOTE: Maximize and Zoom.
874 if (IsMaximized()) 882 if (IsMaximized())
875 Restore(); 883 Restore();
876 else 884 else
(...skipping 30 matching lines...) Expand all
907 gfx::Size NativeAppWindowCocoa::GetContentMaximumSize() const { 915 gfx::Size NativeAppWindowCocoa::GetContentMaximumSize() const {
908 return size_constraints_.GetMaximumSize(); 916 return size_constraints_.GetMaximumSize();
909 } 917 }
910 918
911 void NativeAppWindowCocoa::SetContentSizeConstraints( 919 void NativeAppWindowCocoa::SetContentSizeConstraints(
912 const gfx::Size& min_size, const gfx::Size& max_size) { 920 const gfx::Size& min_size, const gfx::Size& max_size) {
913 // Update the size constraints. 921 // Update the size constraints.
914 size_constraints_.set_minimum_size(min_size); 922 size_constraints_.set_minimum_size(min_size);
915 size_constraints_.set_maximum_size(max_size); 923 size_constraints_.set_maximum_size(max_size);
916 924
925 gfx::Size minimum_size = size_constraints_.GetMinimumSize();
926 [window() setContentMinSize:NSMakeSize(minimum_size.width(),
927 minimum_size.height())];
928
929 gfx::Size maximum_size = size_constraints_.GetMaximumSize();
930 const int kUnboundedSize = extensions::SizeConstraints::kUnboundedSize;
931 CGFloat max_width = maximum_size.width() == kUnboundedSize ?
932 CGFLOAT_MAX : maximum_size.width();
933 CGFloat max_height = maximum_size.height() == kUnboundedSize ?
934 CGFLOAT_MAX : maximum_size.height();
935 [window() setContentMaxSize:NSMakeSize(max_width, max_height)];
936
917 // Update the window controls. 937 // Update the window controls.
918 shows_resize_controls_ = 938 shows_resize_controls_ =
919 is_resizable_ && !size_constraints_.HasFixedSize(); 939 is_resizable_ && !size_constraints_.HasFixedSize();
920 shows_fullscreen_controls_ = 940 shows_fullscreen_controls_ =
921 is_resizable_ && !size_constraints_.HasMaximumSize() && has_frame_; 941 is_resizable_ && !size_constraints_.HasMaximumSize() && has_frame_;
922 942
923 gfx::ApplyNSWindowSizeConstraints(window(), min_size, max_size, 943 if (!is_fullscreen_) {
924 shows_resize_controls_, 944 [window() setStyleMask:GetWindowStyleMask()];
925 shows_fullscreen_controls_); 945
946 // Set the window to participate in Lion Fullscreen mode. Setting this flag
947 // has no effect on Snow Leopard or earlier. UI controls for fullscreen are
948 // only shown for apps that have unbounded size.
949 if (base::mac::IsOSLionOrLater())
950 SetFullScreenCollectionBehavior(window(), shows_fullscreen_controls_);
951 }
952
953 if (has_frame_) {
954 [window() setShowsResizeIndicator:shows_resize_controls_];
955 [[window() standardWindowButton:NSWindowZoomButton]
956 setEnabled:shows_fullscreen_controls_];
957 }
926 } 958 }
927 959
928 void NativeAppWindowCocoa::SetAlwaysOnTop(bool always_on_top) { 960 void NativeAppWindowCocoa::SetAlwaysOnTop(bool always_on_top) {
929 [window() setLevel:(always_on_top ? AlwaysOnTopWindowLevel() : 961 [window() setLevel:(always_on_top ? AlwaysOnTopWindowLevel() :
930 NSNormalWindowLevel)]; 962 NSNormalWindowLevel)];
931 } 963 }
932 964
933 void NativeAppWindowCocoa::SetVisibleOnAllWorkspaces(bool always_visible) { 965 void NativeAppWindowCocoa::SetVisibleOnAllWorkspaces(bool always_visible) {
934 SetWorkspacesCollectionBehavior(window(), always_visible); 966 SetWorkspacesCollectionBehavior(window(), always_visible);
935 } 967 }
(...skipping 17 matching lines...) Expand all
953 } 985 }
954 986
955 void NativeAppWindowCocoa::UpdateRestoredBounds() { 987 void NativeAppWindowCocoa::UpdateRestoredBounds() {
956 if (IsRestored(*this)) 988 if (IsRestored(*this))
957 restored_bounds_ = [window() frame]; 989 restored_bounds_ = [window() frame];
958 } 990 }
959 991
960 void NativeAppWindowCocoa::HideWithoutMarkingHidden() { 992 void NativeAppWindowCocoa::HideWithoutMarkingHidden() {
961 [window() orderOut:window_controller_]; 993 [window() orderOut:window_controller_];
962 } 994 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698