| OLD | NEW |
| 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 "views/widget/widget.h" | 5 #include "views/widget/widget.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "ui/base/l10n/l10n_font_util.h" | 10 #include "ui/base/l10n/l10n_font_util.h" |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 delegate(NULL), | 102 delegate(NULL), |
| 103 child(false), | 103 child(false), |
| 104 transient(false), | 104 transient(false), |
| 105 transparent(false), | 105 transparent(false), |
| 106 accept_events(true), | 106 accept_events(true), |
| 107 can_activate(true), | 107 can_activate(true), |
| 108 keep_on_top(false), | 108 keep_on_top(false), |
| 109 ownership(NATIVE_WIDGET_OWNS_WIDGET), | 109 ownership(NATIVE_WIDGET_OWNS_WIDGET), |
| 110 mirror_origin_in_rtl(false), | 110 mirror_origin_in_rtl(false), |
| 111 has_dropshadow(false), | 111 has_dropshadow(false), |
| 112 maximize(false), | 112 show_state(ui::SHOW_STATE_DEFAULT), |
| 113 double_buffer(false), | 113 double_buffer(false), |
| 114 parent(NULL), | 114 parent(NULL), |
| 115 parent_widget(NULL), | 115 parent_widget(NULL), |
| 116 native_widget(NULL), | 116 native_widget(NULL), |
| 117 top_level(false) { | 117 top_level(false) { |
| 118 } | 118 } |
| 119 | 119 |
| 120 Widget::InitParams::InitParams(Type type) | 120 Widget::InitParams::InitParams(Type type) |
| 121 : type(type), | 121 : type(type), |
| 122 delegate(NULL), | 122 delegate(NULL), |
| 123 child(type == TYPE_CONTROL), | 123 child(type == TYPE_CONTROL), |
| 124 transient(type == TYPE_POPUP || type == TYPE_MENU), | 124 transient(type == TYPE_POPUP || type == TYPE_MENU), |
| 125 transparent(false), | 125 transparent(false), |
| 126 accept_events(true), | 126 accept_events(true), |
| 127 can_activate(type != TYPE_POPUP && type != TYPE_MENU), | 127 can_activate(type != TYPE_POPUP && type != TYPE_MENU), |
| 128 keep_on_top(type == TYPE_MENU), | 128 keep_on_top(type == TYPE_MENU), |
| 129 ownership(NATIVE_WIDGET_OWNS_WIDGET), | 129 ownership(NATIVE_WIDGET_OWNS_WIDGET), |
| 130 mirror_origin_in_rtl(false), | 130 mirror_origin_in_rtl(false), |
| 131 has_dropshadow(false), | 131 has_dropshadow(false), |
| 132 maximize(false), | 132 show_state(ui::SHOW_STATE_DEFAULT), |
| 133 double_buffer(false), | 133 double_buffer(false), |
| 134 parent(NULL), | 134 parent(NULL), |
| 135 parent_widget(NULL), | 135 parent_widget(NULL), |
| 136 native_widget(NULL), | 136 native_widget(NULL), |
| 137 top_level(false) { | 137 top_level(false) { |
| 138 } | 138 } |
| 139 | 139 |
| 140 //////////////////////////////////////////////////////////////////////////////// | 140 //////////////////////////////////////////////////////////////////////////////// |
| 141 // Widget, public: | 141 // Widget, public: |
| 142 | 142 |
| 143 // static | 143 // static |
| 144 Widget::InitParams Widget::WindowInitParams() { | 144 Widget::InitParams Widget::WindowInitParams() { |
| 145 return InitParams(InitParams::TYPE_WINDOW); | 145 return InitParams(InitParams::TYPE_WINDOW); |
| 146 } | 146 } |
| 147 | 147 |
| 148 Widget::Widget() | 148 Widget::Widget() |
| 149 : is_mouse_button_pressed_(false), | 149 : is_mouse_button_pressed_(false), |
| 150 last_mouse_event_was_move_(false), | 150 last_mouse_event_was_move_(false), |
| 151 native_widget_(NULL), | 151 native_widget_(NULL), |
| 152 widget_delegate_(NULL), | 152 widget_delegate_(NULL), |
| 153 non_client_view_(NULL), | 153 non_client_view_(NULL), |
| 154 dragged_view_(NULL), | 154 dragged_view_(NULL), |
| 155 event_stack_(), | 155 event_stack_(), |
| 156 ownership_(InitParams::NATIVE_WIDGET_OWNS_WIDGET), | 156 ownership_(InitParams::NATIVE_WIDGET_OWNS_WIDGET), |
| 157 is_secondary_widget_(true), | 157 is_secondary_widget_(true), |
| 158 frame_type_(FRAME_TYPE_DEFAULT), | 158 frame_type_(FRAME_TYPE_DEFAULT), |
| 159 disable_inactive_rendering_(false), | 159 disable_inactive_rendering_(false), |
| 160 widget_closed_(false), | 160 widget_closed_(false), |
| 161 saved_maximized_state_(false), | 161 saved_show_state_(ui::SHOW_STATE_DEFAULT), |
| 162 minimum_size_(100, 100), | 162 minimum_size_(100, 100), |
| 163 focus_on_creation_(true), | 163 focus_on_creation_(true), |
| 164 is_top_level_(false) { | 164 is_top_level_(false), |
| 165 native_widget_initialized_(false) { |
| 165 } | 166 } |
| 166 | 167 |
| 167 Widget::~Widget() { | 168 Widget::~Widget() { |
| 168 while (!event_stack_.empty()) { | 169 while (!event_stack_.empty()) { |
| 169 event_stack_.top()->reset(); | 170 event_stack_.top()->reset(); |
| 170 event_stack_.pop(); | 171 event_stack_.pop(); |
| 171 } | 172 } |
| 172 | 173 |
| 173 DestroyRootView(); | 174 DestroyRootView(); |
| 174 if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET) | 175 if (ownership_ == InitParams::WIDGET_OWNS_NATIVE_WIDGET) |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 } | 305 } |
| 305 native_widget_->InitNativeWidget(params); | 306 native_widget_->InitNativeWidget(params); |
| 306 if (params.type == InitParams::TYPE_WINDOW) { | 307 if (params.type == InitParams::TYPE_WINDOW) { |
| 307 non_client_view_ = new NonClientView; | 308 non_client_view_ = new NonClientView; |
| 308 non_client_view_->SetFrameView(CreateNonClientFrameView()); | 309 non_client_view_->SetFrameView(CreateNonClientFrameView()); |
| 309 // Create the ClientView, add it to the NonClientView and add the | 310 // Create the ClientView, add it to the NonClientView and add the |
| 310 // NonClientView to the RootView. This will cause everything to be parented. | 311 // NonClientView to the RootView. This will cause everything to be parented. |
| 311 non_client_view_->set_client_view(widget_delegate_->CreateClientView(this)); | 312 non_client_view_->set_client_view(widget_delegate_->CreateClientView(this)); |
| 312 SetContentsView(non_client_view_); | 313 SetContentsView(non_client_view_); |
| 313 SetInitialBounds(params.bounds); | 314 SetInitialBounds(params.bounds); |
| 314 if (params.maximize) | 315 if (params.show_state == ui::SHOW_STATE_MAXIMIZED) |
| 315 Maximize(); | 316 Maximize(); |
| 317 else if (params.show_state == ui::SHOW_STATE_MINIMIZED) |
| 318 Minimize(); |
| 316 UpdateWindowTitle(); | 319 UpdateWindowTitle(); |
| 317 } | 320 } |
| 321 native_widget_initialized_ = true; |
| 318 } | 322 } |
| 319 | 323 |
| 320 // Unconverted methods (see header) -------------------------------------------- | 324 // Unconverted methods (see header) -------------------------------------------- |
| 321 | 325 |
| 322 gfx::NativeView Widget::GetNativeView() const { | 326 gfx::NativeView Widget::GetNativeView() const { |
| 323 return native_widget_->GetNativeView(); | 327 return native_widget_->GetNativeView(); |
| 324 } | 328 } |
| 325 | 329 |
| 326 gfx::NativeWindow Widget::GetNativeWindow() const { | 330 gfx::NativeWindow Widget::GetNativeWindow() const { |
| 327 return native_widget_->GetNativeWindow(); | 331 return native_widget_->GetNativeWindow(); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 // It appears we can hit this code path if you close a modal dialog then | 443 // It appears we can hit this code path if you close a modal dialog then |
| 440 // close the last browser before the destructor is hit, which triggers | 444 // close the last browser before the destructor is hit, which triggers |
| 441 // invoking Close again. | 445 // invoking Close again. |
| 442 return; | 446 return; |
| 443 } | 447 } |
| 444 | 448 |
| 445 bool can_close = true; | 449 bool can_close = true; |
| 446 if (non_client_view_) | 450 if (non_client_view_) |
| 447 can_close = non_client_view_->CanClose(); | 451 can_close = non_client_view_->CanClose(); |
| 448 if (can_close) { | 452 if (can_close) { |
| 449 SaveWindowPosition(); | 453 SaveWindowPlacement(); |
| 450 | 454 |
| 451 // During tear-down the top-level focus manager becomes unavailable to | 455 // During tear-down the top-level focus manager becomes unavailable to |
| 452 // GTK tabbed panes and their children, so normal deregistration via | 456 // GTK tabbed panes and their children, so normal deregistration via |
| 453 // |FormManager::ViewRemoved()| calls are fouled. We clear focus here | 457 // |FormManager::ViewRemoved()| calls are fouled. We clear focus here |
| 454 // to avoid these redundant steps and to avoid accessing deleted views | 458 // to avoid these redundant steps and to avoid accessing deleted views |
| 455 // that may have been in focus. | 459 // that may have been in focus. |
| 456 if (is_top_level() && focus_manager_.get()) | 460 if (is_top_level() && focus_manager_.get()) |
| 457 focus_manager_->SetFocusedView(NULL); | 461 focus_manager_->SetFocusedView(NULL); |
| 458 | 462 |
| 459 native_widget_->Close(); | 463 native_widget_->Close(); |
| 460 widget_closed_ = true; | 464 widget_closed_ = true; |
| 461 } | 465 } |
| 462 } | 466 } |
| 463 | 467 |
| 464 void Widget::CloseNow() { | 468 void Widget::CloseNow() { |
| 465 native_widget_->CloseNow(); | 469 native_widget_->CloseNow(); |
| 466 } | 470 } |
| 467 | 471 |
| 468 void Widget::EnableClose(bool enable) { | 472 void Widget::EnableClose(bool enable) { |
| 469 if (non_client_view_) | 473 if (non_client_view_) |
| 470 non_client_view_->EnableClose(enable); | 474 non_client_view_->EnableClose(enable); |
| 471 native_widget_->EnableClose(enable); | 475 native_widget_->EnableClose(enable); |
| 472 } | 476 } |
| 473 | 477 |
| 474 void Widget::Show() { | 478 void Widget::Show() { |
| 475 if (non_client_view_) { | 479 if (non_client_view_) { |
| 476 if (saved_maximized_state_ && !initial_restored_bounds_.IsEmpty()) { | 480 if (saved_show_state_ == ui::SHOW_STATE_MAXIMIZED && |
| 481 !initial_restored_bounds_.IsEmpty()) { |
| 477 native_widget_->ShowMaximizedWithBounds(initial_restored_bounds_); | 482 native_widget_->ShowMaximizedWithBounds(initial_restored_bounds_); |
| 478 } else { | 483 } else { |
| 479 native_widget_->ShowWithState(saved_maximized_state_ ? | 484 native_widget_->ShowWithWindowState(saved_show_state_); |
| 480 internal::NativeWidgetPrivate::SHOW_MAXIMIZED : | |
| 481 internal::NativeWidgetPrivate::SHOW_RESTORED); | |
| 482 } | 485 } |
| 483 // |saved_maximized_state_| only applies the first time the window is shown. | 486 // |saved_show_state_| only applies the first time the window is shown. |
| 484 // If we don't reset the value the window will be shown maximized every time | 487 // If we don't reset the value the window may be shown maximized every time |
| 485 // it is subsequently shown after being hidden. | 488 // it is subsequently shown after being hidden. |
| 486 saved_maximized_state_ = false; | 489 saved_show_state_ = ui::SHOW_STATE_NORMAL; |
| 487 } else { | 490 } else { |
| 488 native_widget_->Show(); | 491 native_widget_->Show(); |
| 489 } | 492 } |
| 490 } | 493 } |
| 491 | 494 |
| 492 void Widget::Hide() { | 495 void Widget::Hide() { |
| 493 native_widget_->Hide(); | 496 native_widget_->Hide(); |
| 494 } | 497 } |
| 495 | 498 |
| 496 void Widget::ShowInactive() { | 499 void Widget::ShowInactive() { |
| 497 // If this gets called with saved_maximized_state_ == true, call SetBounds() | 500 // If this gets called with saved_show_state_ == ui::SHOW_STATE_MAXIMIZED, |
| 498 // with the restored bounds to set the correct size. This normally should | 501 // call SetBounds()with the restored bounds to set the correct size. This |
| 499 // not happen, but if it does we should avoid showing unsized windows. | 502 // normally should not happen, but if it does we should avoid showing unsized |
| 500 if (saved_maximized_state_ && !initial_restored_bounds_.IsEmpty()) { | 503 // windows. |
| 504 if (saved_show_state_ == ui::SHOW_STATE_MAXIMIZED && |
| 505 !initial_restored_bounds_.IsEmpty()) { |
| 501 SetBounds(initial_restored_bounds_); | 506 SetBounds(initial_restored_bounds_); |
| 502 saved_maximized_state_ = false; | 507 saved_show_state_ = ui::SHOW_STATE_NORMAL; |
| 503 } | 508 } |
| 504 native_widget_->ShowWithState(internal::NativeWidgetPrivate::SHOW_INACTIVE); | 509 native_widget_->ShowWithWindowState(ui::SHOW_STATE_INACTIVE); |
| 505 } | 510 } |
| 506 | 511 |
| 507 void Widget::Activate() { | 512 void Widget::Activate() { |
| 508 native_widget_->Activate(); | 513 native_widget_->Activate(); |
| 509 } | 514 } |
| 510 | 515 |
| 511 void Widget::Deactivate() { | 516 void Widget::Deactivate() { |
| 512 native_widget_->Deactivate(); | 517 native_widget_->Deactivate(); |
| 513 } | 518 } |
| 514 | 519 |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 } | 823 } |
| 819 | 824 |
| 820 void Widget::EnableInactiveRendering() { | 825 void Widget::EnableInactiveRendering() { |
| 821 disable_inactive_rendering_ = false; | 826 disable_inactive_rendering_ = false; |
| 822 if (non_client_view_) | 827 if (non_client_view_) |
| 823 non_client_view_->DisableInactiveRendering(false); | 828 non_client_view_->DisableInactiveRendering(false); |
| 824 } | 829 } |
| 825 | 830 |
| 826 void Widget::OnNativeWidgetActivationChanged(bool active) { | 831 void Widget::OnNativeWidgetActivationChanged(bool active) { |
| 827 if (!active) { | 832 if (!active) { |
| 828 SaveWindowPosition(); | 833 SaveWindowPlacement(); |
| 829 | 834 |
| 830 // Close any open menus. | 835 // Close any open menus. |
| 831 MenuController* menu_controller = MenuController::GetActiveInstance(); | 836 MenuController* menu_controller = MenuController::GetActiveInstance(); |
| 832 if (menu_controller) | 837 if (menu_controller) |
| 833 menu_controller->OnWidgetActivationChanged(); | 838 menu_controller->OnWidgetActivationChanged(); |
| 834 } | 839 } |
| 835 | 840 |
| 836 FOR_EACH_OBSERVER(Observer, observers_, | 841 FOR_EACH_OBSERVER(Observer, observers_, |
| 837 OnWidgetActivationChanged(this, active)); | 842 OnWidgetActivationChanged(this, active)); |
| 838 } | 843 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 widget_delegate_->DeleteDelegate(); | 884 widget_delegate_->DeleteDelegate(); |
| 880 widget_delegate_ = NULL; | 885 widget_delegate_ = NULL; |
| 881 } | 886 } |
| 882 | 887 |
| 883 gfx::Size Widget::GetMinimumSize() { | 888 gfx::Size Widget::GetMinimumSize() { |
| 884 return non_client_view_ ? non_client_view_->GetMinimumSize() : gfx::Size(); | 889 return non_client_view_ ? non_client_view_->GetMinimumSize() : gfx::Size(); |
| 885 } | 890 } |
| 886 | 891 |
| 887 void Widget::OnNativeWidgetSizeChanged(const gfx::Size& new_size) { | 892 void Widget::OnNativeWidgetSizeChanged(const gfx::Size& new_size) { |
| 888 root_view_->SetSize(new_size); | 893 root_view_->SetSize(new_size); |
| 894 |
| 895 // Size changed notifications can fire prior to full initialization |
| 896 // i.e. during session restore. Avoid saving session state during these |
| 897 // startup procedures. |
| 898 if (native_widget_initialized_) |
| 899 SaveWindowPlacement(); |
| 889 } | 900 } |
| 890 | 901 |
| 891 void Widget::OnNativeWidgetBeginUserBoundsChange() { | 902 void Widget::OnNativeWidgetBeginUserBoundsChange() { |
| 892 widget_delegate_->OnWindowBeginUserBoundsChange(); | 903 widget_delegate_->OnWindowBeginUserBoundsChange(); |
| 893 } | 904 } |
| 894 | 905 |
| 895 void Widget::OnNativeWidgetEndUserBoundsChange() { | 906 void Widget::OnNativeWidgetEndUserBoundsChange() { |
| 896 widget_delegate_->OnWindowEndUserBoundsChange(); | 907 widget_delegate_->OnWindowEndUserBoundsChange(); |
| 897 } | 908 } |
| 898 | 909 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1048 //////////////////////////////////////////////////////////////////////////////// | 1059 //////////////////////////////////////////////////////////////////////////////// |
| 1049 // Widget, private: | 1060 // Widget, private: |
| 1050 | 1061 |
| 1051 // static | 1062 // static |
| 1052 ui::Compositor*(*Widget::compositor_factory_)() = NULL; | 1063 ui::Compositor*(*Widget::compositor_factory_)() = NULL; |
| 1053 | 1064 |
| 1054 bool Widget::ShouldReleaseCaptureOnMouseReleased() const { | 1065 bool Widget::ShouldReleaseCaptureOnMouseReleased() const { |
| 1055 return true; | 1066 return true; |
| 1056 } | 1067 } |
| 1057 | 1068 |
| 1058 void Widget::SaveWindowPosition() { | 1069 void Widget::SaveWindowPlacement() { |
| 1059 // The window delegate does the actual saving for us. It seems like (judging | 1070 // The window delegate does the actual saving for us. It seems like (judging |
| 1060 // by go/crash) that in some circumstances we can end up here after | 1071 // by go/crash) that in some circumstances we can end up here after |
| 1061 // WM_DESTROY, at which point the window delegate is likely gone. So just | 1072 // WM_DESTROY, at which point the window delegate is likely gone. So just |
| 1062 // bail. | 1073 // bail. |
| 1063 if (!widget_delegate_) | 1074 if (!widget_delegate_) |
| 1064 return; | 1075 return; |
| 1065 | 1076 |
| 1066 bool maximized = false; | 1077 ui::WindowShowState show_state = ui::SHOW_STATE_NORMAL; |
| 1067 gfx::Rect bounds; | 1078 gfx::Rect bounds; |
| 1068 native_widget_->GetWindowBoundsAndMaximizedState(&bounds, &maximized); | 1079 native_widget_->GetWindowPlacement(&bounds, &show_state); |
| 1069 widget_delegate_->SaveWindowPlacement(bounds, maximized); | 1080 widget_delegate_->SaveWindowPlacement(bounds, show_state); |
| 1070 } | 1081 } |
| 1071 | 1082 |
| 1072 void Widget::SetInitialBounds(const gfx::Rect& bounds) { | 1083 void Widget::SetInitialBounds(const gfx::Rect& bounds) { |
| 1073 if (!non_client_view_) | 1084 if (!non_client_view_) |
| 1074 return; | 1085 return; |
| 1075 | 1086 |
| 1076 gfx::Rect saved_bounds; | 1087 gfx::Rect saved_bounds; |
| 1077 if (GetSavedBounds(&saved_bounds, &saved_maximized_state_)) { | 1088 if (GetSavedWindowPlacement(&saved_bounds, &saved_show_state_)) { |
| 1078 if (saved_maximized_state_) { | 1089 if (saved_show_state_ == ui::SHOW_STATE_MAXIMIZED) { |
| 1079 // If we're going to maximize, wait until Show is invoked to set the | 1090 // If we're going to maximize, wait until Show is invoked to set the |
| 1080 // bounds. That way we avoid a noticable resize. | 1091 // bounds. That way we avoid a noticable resize. |
| 1081 initial_restored_bounds_ = saved_bounds; | 1092 initial_restored_bounds_ = saved_bounds; |
| 1082 } else { | 1093 } else { |
| 1083 SetBounds(saved_bounds); | 1094 SetBounds(saved_bounds); |
| 1084 } | 1095 } |
| 1085 } else { | 1096 } else { |
| 1086 if (bounds.IsEmpty()) { | 1097 if (bounds.IsEmpty()) { |
| 1087 // No initial bounds supplied, so size the window to its content and | 1098 // No initial bounds supplied, so size the window to its content and |
| 1088 // center over its parent. | 1099 // center over its parent. |
| 1089 native_widget_->CenterWindow(non_client_view_->GetPreferredSize()); | 1100 native_widget_->CenterWindow(non_client_view_->GetPreferredSize()); |
| 1090 } else { | 1101 } else { |
| 1091 // Use the supplied initial bounds. | 1102 // Use the supplied initial bounds. |
| 1092 SetBoundsConstrained(bounds, NULL); | 1103 SetBoundsConstrained(bounds, NULL); |
| 1093 } | 1104 } |
| 1094 } | 1105 } |
| 1095 } | 1106 } |
| 1096 | 1107 |
| 1097 bool Widget::GetSavedBounds(gfx::Rect* bounds, bool* maximize) { | 1108 bool Widget::GetSavedWindowPlacement(gfx::Rect* bounds, |
| 1109 ui::WindowShowState* show_state) { |
| 1098 // First we obtain the window's saved show-style and store it. We need to do | 1110 // First we obtain the window's saved show-style and store it. We need to do |
| 1099 // this here, rather than in Show() because by the time Show() is called, | 1111 // this here, rather than in Show() because by the time Show() is called, |
| 1100 // the window's size will have been reset (below) and the saved maximized | 1112 // the window's size will have been reset (below) and the saved maximized |
| 1101 // state will have been lost. Sadly there's no way to tell on Windows when | 1113 // state will have been lost. Sadly there's no way to tell on Windows when |
| 1102 // a window is restored from maximized state, so we can't more accurately | 1114 // a window is restored from maximized state, so we can't more accurately |
| 1103 // track maximized state independently of sizing information. | 1115 // track maximized state independently of sizing information. |
| 1104 widget_delegate_->GetSavedMaximizedState(maximize); | |
| 1105 | 1116 |
| 1106 // Restore the window's placement from the controller. | 1117 // Restore the window's placement from the controller. |
| 1107 if (widget_delegate_->GetSavedWindowBounds(bounds)) { | 1118 if (widget_delegate_->GetSavedWindowPlacement(bounds, show_state)) { |
| 1108 if (!widget_delegate_->ShouldRestoreWindowSize()) { | 1119 if (!widget_delegate_->ShouldRestoreWindowSize()) { |
| 1109 bounds->set_size(non_client_view_->GetPreferredSize()); | 1120 bounds->set_size(non_client_view_->GetPreferredSize()); |
| 1110 } else { | 1121 } else { |
| 1111 // Make sure the bounds are at least the minimum size. | 1122 // Make sure the bounds are at least the minimum size. |
| 1112 if (bounds->width() < minimum_size_.width()) | 1123 if (bounds->width() < minimum_size_.width()) |
| 1113 bounds->set_width(minimum_size_.width()); | 1124 bounds->set_width(minimum_size_.width()); |
| 1114 | 1125 |
| 1115 if (bounds->height() < minimum_size_.height()) | 1126 if (bounds->height() < minimum_size_.height()) |
| 1116 bounds->set_height(minimum_size_.height()); | 1127 bounds->set_height(minimum_size_.height()); |
| 1117 } | 1128 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1134 | 1145 |
| 1135 //////////////////////////////////////////////////////////////////////////////// | 1146 //////////////////////////////////////////////////////////////////////////////// |
| 1136 // internal::NativeWidgetPrivate, NativeWidget implementation: | 1147 // internal::NativeWidgetPrivate, NativeWidget implementation: |
| 1137 | 1148 |
| 1138 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { | 1149 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { |
| 1139 return this; | 1150 return this; |
| 1140 } | 1151 } |
| 1141 | 1152 |
| 1142 } // namespace internal | 1153 } // namespace internal |
| 1143 } // namespace views | 1154 } // namespace views |
| OLD | NEW |