diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index 6ce521b5e95e4..777b63a66aafc 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -238,6 +238,8 @@ class NativeWindowMac : public NativeWindow, void InternalSetParentWindow(NativeWindow* parent, bool attach); void SetForwardMouseMessages(bool forward); + void UpdateZoomButton(); + ElectronNSWindow* window_; // Weak ref, managed by widget_. ElectronNSWindowDelegate* __strong window_delegate_; diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index cddd87cecbf59..738b9c9deb23e 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -887,8 +887,7 @@ void ReorderChildWindowAbove(NSWindow* child_window, NSWindow* other_window) { // the maximize button and ensure fullscreenability matches user setting. SetCanResize(resizable); SetFullScreenable(was_fullscreenable); - [[window_ standardWindowButton:NSWindowZoomButton] - setEnabled:resizable ? was_fullscreenable : false]; + UpdateZoomButton(); } bool NativeWindowMac::IsResizable() { @@ -916,19 +915,26 @@ void ReorderChildWindowAbove(NSWindow* child_window, NSWindow* other_window) { void NativeWindowMac::SetMaximizable(bool maximizable) { maximizable_ = maximizable; - [[window_ standardWindowButton:NSWindowZoomButton] setEnabled:maximizable]; + UpdateZoomButton(); } bool NativeWindowMac::IsMaximizable() { return [[window_ standardWindowButton:NSWindowZoomButton] isEnabled]; } +void NativeWindowMac::UpdateZoomButton() { + [[window_ standardWindowButton:NSWindowZoomButton] + setEnabled:IsResizable() && (CanMaximize() || IsFullScreenable())]; +} + void NativeWindowMac::SetFullScreenable(bool fullscreenable) { SetCollectionBehavior(fullscreenable, NSWindowCollectionBehaviorFullScreenPrimary); // On EL Capitan this flag is required to hide fullscreen button. SetCollectionBehavior(!fullscreenable, NSWindowCollectionBehaviorFullScreenAuxiliary); + + UpdateZoomButton(); } bool NativeWindowMac::IsFullScreenable() { diff --git a/spec/api-browser-window-spec.ts b/spec/api-browser-window-spec.ts index 050e05c3ea1e6..a76215278aee3 100644 --- a/spec/api-browser-window-spec.ts +++ b/spec/api-browser-window-spec.ts @@ -5611,6 +5611,19 @@ describe('BrowserWindow module', () => { expect(w2.isFullScreenable()).to.be.false('isFullScreenable'); expect(w3.isFullScreenable()).to.be.false('isFullScreenable'); }); + + it('does not disable maximize button if window is resizable', () => { + const w = new BrowserWindow({ + resizable: true, + fullscreenable: false + }); + + expect(w.isMaximizable()).to.be.true('isMaximizable'); + + w.setResizable(false); + + expect(w.isMaximizable()).to.be.false('isMaximizable'); + }); }); ifdescribe(process.platform === 'darwin')('isHiddenInMissionControl state', () => {