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

Side by Side Diff: ui/views/widget/native_widget_mac.mm

Issue 1059853007: Mac/Linux: Ensure window size constraints propagate to the window server during Init (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cracked the case on Windows 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/views/widget/native_widget_mac.h" 5 #include "ui/views/widget/native_widget_mac.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #include "base/mac/foundation_util.h" 9 #include "base/mac/foundation_util.h"
10 #include "base/mac/scoped_nsobject.h" 10 #include "base/mac/scoped_nsobject.h"
(...skipping 16 matching lines...) Expand all
27 if (params.remove_standard_frame) 27 if (params.remove_standard_frame)
28 return NSBorderlessWindowMask; 28 return NSBorderlessWindowMask;
29 29
30 if (params.type == Widget::InitParams::TYPE_WINDOW) { 30 if (params.type == Widget::InitParams::TYPE_WINDOW) {
31 return NSTitledWindowMask | NSClosableWindowMask | 31 return NSTitledWindowMask | NSClosableWindowMask |
32 NSMiniaturizableWindowMask | NSResizableWindowMask; 32 NSMiniaturizableWindowMask | NSResizableWindowMask;
33 } 33 }
34 return NSBorderlessWindowMask; 34 return NSBorderlessWindowMask;
35 } 35 }
36 36
37 gfx::Size WindowSizeForClientAreaSize(NSWindow* window, const gfx::Size& size) {
38 NSRect content_rect = NSMakeRect(0, 0, size.width(), size.height());
39 NSRect frame_rect = [window frameRectForContentRect:content_rect];
40 return gfx::Size(NSWidth(frame_rect), NSHeight(frame_rect));
41 }
42
43 } // namespace 37 } // namespace
44 38
45 //////////////////////////////////////////////////////////////////////////////// 39 ////////////////////////////////////////////////////////////////////////////////
46 // NativeWidgetMac, public: 40 // NativeWidgetMac, public:
47 41
48 NativeWidgetMac::NativeWidgetMac(internal::NativeWidgetDelegate* delegate) 42 NativeWidgetMac::NativeWidgetMac(internal::NativeWidgetDelegate* delegate)
49 : delegate_(delegate), 43 : delegate_(delegate),
50 bridge_(new BridgedNativeWidget(this)), 44 bridge_(new BridgedNativeWidget(this)),
51 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) { 45 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) {
52 } 46 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 // NativeWidgetMac, internal::NativeWidgetPrivate implementation: 78 // NativeWidgetMac, internal::NativeWidgetPrivate implementation:
85 79
86 void NativeWidgetMac::InitNativeWidget(const Widget::InitParams& params) { 80 void NativeWidgetMac::InitNativeWidget(const Widget::InitParams& params) {
87 ownership_ = params.ownership; 81 ownership_ = params.ownership;
88 base::scoped_nsobject<NSWindow> window([CreateNSWindow(params) retain]); 82 base::scoped_nsobject<NSWindow> window([CreateNSWindow(params) retain]);
89 [window setReleasedWhenClosed:NO]; // Owned by scoped_nsobject. 83 [window setReleasedWhenClosed:NO]; // Owned by scoped_nsobject.
90 bridge_->Init(window, params); 84 bridge_->Init(window, params);
91 85
92 delegate_->OnNativeWidgetCreated(true); 86 delegate_->OnNativeWidgetCreated(true);
93 87
94 OnSizeConstraintsChanged();
95
96 bridge_->SetFocusManager(GetWidget()->GetFocusManager()); 88 bridge_->SetFocusManager(GetWidget()->GetFocusManager());
97 89
98 DCHECK(GetWidget()->GetRootView()); 90 DCHECK(GetWidget()->GetRootView());
99 bridge_->SetRootView(GetWidget()->GetRootView()); 91 bridge_->SetRootView(GetWidget()->GetRootView());
100 92
101 // "Infer" must be handled by ViewsDelegate::OnBeforeWidgetInit(). 93 // "Infer" must be handled by ViewsDelegate::OnBeforeWidgetInit().
102 DCHECK_NE(Widget::InitParams::INFER_OPACITY, params.opacity); 94 DCHECK_NE(Widget::InitParams::INFER_OPACITY, params.opacity);
103 bool translucent = params.opacity == Widget::InitParams::TRANSLUCENT_WINDOW; 95 bool translucent = params.opacity == Widget::InitParams::TRANSLUCENT_WINDOW;
104 bridge_->CreateLayer(params.layer_type, translucent); 96 bridge_->CreateLayer(params.layer_type, translucent);
105 } 97 }
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 191
200 internal::InputMethodDelegate* NativeWidgetMac::GetInputMethodDelegate() { 192 internal::InputMethodDelegate* NativeWidgetMac::GetInputMethodDelegate() {
201 return bridge_.get(); 193 return bridge_.get();
202 } 194 }
203 195
204 ui::InputMethod* NativeWidgetMac::GetHostInputMethod() { 196 ui::InputMethod* NativeWidgetMac::GetHostInputMethod() {
205 return bridge_ ? bridge_->GetHostInputMethod() : NULL; 197 return bridge_ ? bridge_->GetHostInputMethod() : NULL;
206 } 198 }
207 199
208 void NativeWidgetMac::CenterWindow(const gfx::Size& size) { 200 void NativeWidgetMac::CenterWindow(const gfx::Size& size) {
209 SetSize(WindowSizeForClientAreaSize(GetNativeWindow(), size)); 201 SetSize(
202 BridgedNativeWidget::GetWindowSizeForClientSize(GetNativeWindow(), size));
210 // Note that this is not the precise center of screen, but it is the standard 203 // Note that this is not the precise center of screen, but it is the standard
211 // location for windows like dialogs to appear on screen for Mac. 204 // location for windows like dialogs to appear on screen for Mac.
212 // TODO(tapted): If there is a parent window, center in that instead. 205 // TODO(tapted): If there is a parent window, center in that instead.
213 [GetNativeWindow() center]; 206 [GetNativeWindow() center];
214 } 207 }
215 208
216 void NativeWidgetMac::GetWindowPlacement( 209 void NativeWidgetMac::GetWindowPlacement(
217 gfx::Rect* bounds, 210 gfx::Rect* bounds,
218 ui::WindowShowState* show_state) const { 211 ui::WindowShowState* show_state) const {
219 *bounds = GetRestoredBounds(); 212 *bounds = GetRestoredBounds();
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 void NativeWidgetMac::SetVisibilityAnimationTransition( 501 void NativeWidgetMac::SetVisibilityAnimationTransition(
509 Widget::VisibilityTransition transition) { 502 Widget::VisibilityTransition transition) {
510 NOTIMPLEMENTED(); 503 NOTIMPLEMENTED();
511 } 504 }
512 505
513 ui::NativeTheme* NativeWidgetMac::GetNativeTheme() const { 506 ui::NativeTheme* NativeWidgetMac::GetNativeTheme() const {
514 return ui::NativeTheme::instance(); 507 return ui::NativeTheme::instance();
515 } 508 }
516 509
517 void NativeWidgetMac::OnRootViewLayout() { 510 void NativeWidgetMac::OnRootViewLayout() {
518 NOTIMPLEMENTED(); 511 // Ensure possible changes to the non-client view (e.g. Minimum/Maximum size)
512 // propagate through to the NSWindow properties.
513 OnSizeConstraintsChanged();
519 } 514 }
520 515
521 bool NativeWidgetMac::IsTranslucentWindowOpacitySupported() const { 516 bool NativeWidgetMac::IsTranslucentWindowOpacitySupported() const {
522 return false; 517 return false;
523 } 518 }
524 519
525 void NativeWidgetMac::OnSizeConstraintsChanged() { 520 void NativeWidgetMac::OnSizeConstraintsChanged() {
526 bridge_->OnSizeConstraintsChanged(); 521 bridge_->OnSizeConstraintsChanged();
527 } 522 }
528 523
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 } 632 }
638 633
639 // static 634 // static
640 gfx::FontList NativeWidgetPrivate::GetWindowTitleFontList() { 635 gfx::FontList NativeWidgetPrivate::GetWindowTitleFontList() {
641 NOTIMPLEMENTED(); 636 NOTIMPLEMENTED();
642 return gfx::FontList(); 637 return gfx::FontList();
643 } 638 }
644 639
645 } // namespace internal 640 } // namespace internal
646 } // namespace views 641 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc ('k') | ui/views/widget/widget_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698