Commit 64b4f35c authored by Elly Fong-Jones's avatar Elly Fong-Jones Committed by Commit Bot

views: have WidgetDelegate update widget size constraints

Currently clients of the SetCan{Maximize,Minimize,Resize} setters need
to remember to call Widget::OnSizeConstraintsChanged afterwards, which
is obviously dangerous. Just call it from inside the setters, and
then we can stop calling it everywhere else. OnSizeConstraintsChanged
is idempotent (though a bit expensive) so temporarily having two calls
to it won't hurt anything.

This change also fixes ViewEventTestBase::GetWidget() to tolerate
being called early in the object's lifecycle.

Bug: 1075649
Change-Id: I11dcf39e6b1ad86f8d5f5adfa973e5fd339dd36f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2485195
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
Reviewed-by: default avatarPeter Boström <pbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819017}
parent 6ac0b659
...@@ -66,9 +66,11 @@ class TestBaseWidgetDelegate : public views::WidgetDelegate { ...@@ -66,9 +66,11 @@ class TestBaseWidgetDelegate : public views::WidgetDelegate {
// views::WidgetDelegate: // views::WidgetDelegate:
void WindowClosing() override { harness_->window_ = nullptr; } void WindowClosing() override { harness_->window_ = nullptr; }
views::Widget* GetWidget() override { return contents_->GetWidget(); } views::Widget* GetWidget() override {
return contents_ ? contents_->GetWidget() : nullptr;
}
const views::Widget* GetWidget() const override { const views::Widget* GetWidget() const override {
return contents_->GetWidget(); return contents_ ? contents_->GetWidget() : nullptr;
} }
views::View* GetContentsView() override { views::View* GetContentsView() override {
// This will first be called by Widget::Init(), which passes the returned // This will first be called by Widget::Init(), which passes the returned
......
...@@ -251,15 +251,21 @@ void WidgetDelegate::SetAccessibleTitle(base::string16 title) { ...@@ -251,15 +251,21 @@ void WidgetDelegate::SetAccessibleTitle(base::string16 title) {
} }
void WidgetDelegate::SetCanMaximize(bool can_maximize) { void WidgetDelegate::SetCanMaximize(bool can_maximize) {
params_.can_maximize = can_maximize; std::exchange(params_.can_maximize, can_maximize);
if (GetWidget() && params_.can_maximize != can_maximize)
GetWidget()->OnSizeConstraintsChanged();
} }
void WidgetDelegate::SetCanMinimize(bool can_minimize) { void WidgetDelegate::SetCanMinimize(bool can_minimize) {
params_.can_minimize = can_minimize; std::exchange(params_.can_minimize, can_minimize);
if (GetWidget() && params_.can_minimize != can_minimize)
GetWidget()->OnSizeConstraintsChanged();
} }
void WidgetDelegate::SetCanResize(bool can_resize) { void WidgetDelegate::SetCanResize(bool can_resize) {
params_.can_resize = can_resize; std::exchange(params_.can_resize, can_resize);
if (GetWidget() && params_.can_resize != can_resize)
GetWidget()->OnSizeConstraintsChanged();
} }
void WidgetDelegate::SetOwnedByWidget(bool owned) { void WidgetDelegate::SetOwnedByWidget(bool owned) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment