diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index 6f6c6047ce..3be543821f 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -191,6 +191,7 @@ class NativeWindowMac : public NativeWindow, protected: // views::WidgetDelegate: views::View* GetContentsView() override; + bool CanMaximize() const override; // ui::NativeThemeObserver: void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override; diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 4805a16849..23f9bb2698 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -1715,31 +1715,35 @@ void NativeWindowMac::SetStyleMask(bool on, NSUInteger flag) { // we explicitly disable resizing while setting it. ScopedDisableResize disable_resize; - bool was_maximizable = IsMaximizable(); if (on) [window_ setStyleMask:[window_ styleMask] | flag]; else [window_ setStyleMask:[window_ styleMask] & (~flag)]; + // Change style mask will make the zoom button revert to default, probably // a bug of Cocoa or macOS. - SetMaximizable(was_maximizable); + SetMaximizable(maximizable_); } void NativeWindowMac::SetCollectionBehavior(bool on, NSUInteger flag) { - bool was_maximizable = IsMaximizable(); if (on) [window_ setCollectionBehavior:[window_ collectionBehavior] | flag]; else [window_ setCollectionBehavior:[window_ collectionBehavior] & (~flag)]; + // Change collectionBehavior will make the zoom button revert to default, // probably a bug of Cocoa or macOS. - SetMaximizable(was_maximizable); + SetMaximizable(maximizable_); } views::View* NativeWindowMac::GetContentsView() { return root_view_.get(); } +bool NativeWindowMac::CanMaximize() const { + return maximizable_; +} + void NativeWindowMac::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) { base::PostTask( FROM_HERE, {content::BrowserThread::UI}, diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index b4914dbeca..de56b6cf0e 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -3669,6 +3669,18 @@ describe('BrowserWindow module', () => { } }); + // On Linux there is no "resizable" property of a window. + ifit(process.platform !== 'linux')('does affect maximizability when disabled and enabled', () => { + const w = new BrowserWindow({ show: false }); + expect(w.resizable).to.be.true('resizable'); + + expect(w.maximizable).to.be.true('maximizable'); + w.resizable = false; + expect(w.maximizable).to.be.false('not maximizable'); + w.resizable = true; + expect(w.maximizable).to.be.true('maximizable'); + }); + ifit(process.platform === 'win32')('works for a window smaller than 64x64', () => { const w = new BrowserWindow({ show: false,