fix: macOS maximize button shouldn't be disabled just because the window is non-fullscreenable (#40705)

* fix: macOS maximize button shouldn't be disabled just because the window is non-fullscreenable

* add test

* fix test by enabling maximize button if `resizable && (maximizable || fullscreenable)` instead of `(resizable && maximizable) && fullscreenable`
This commit is contained in:
Tamás Zahola 2024-01-05 18:15:35 +01:00 committed by GitHub
parent 22970f573b
commit cc1b64e01c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 3 deletions

View file

@ -235,6 +235,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_;

View file

@ -879,8 +879,7 @@ void NativeWindowMac::SetResizable(bool resizable) {
// 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() const {
@ -908,19 +907,26 @@ bool NativeWindowMac::IsMinimizable() const {
void NativeWindowMac::SetMaximizable(bool maximizable) {
maximizable_ = maximizable;
[[window_ standardWindowButton:NSWindowZoomButton] setEnabled:maximizable];
UpdateZoomButton();
}
bool NativeWindowMac::IsMaximizable() const {
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() const {

View file

@ -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', () => {