Merge pull request #6736 from electron/maximizable-state
Always restore maximizable state after changing window behavior/style
This commit is contained in:
Коммит
3be68ba136
|
@ -591,11 +591,9 @@ NativeWindowMac::NativeWindowMac(
|
|||
|
||||
InstallView();
|
||||
|
||||
// Disable zoom button if window is not resizable.
|
||||
// Set maximizable state last to ensure zoom button does not get reset
|
||||
// by calls to other APIs.
|
||||
if (!maximizable)
|
||||
SetMaximizable(false);
|
||||
SetMaximizable(maximizable);
|
||||
}
|
||||
|
||||
NativeWindowMac::~NativeWindowMac() {
|
||||
|
@ -1178,27 +1176,25 @@ void NativeWindowMac::UpdateDraggableRegionViews(
|
|||
}
|
||||
|
||||
void NativeWindowMac::SetStyleMask(bool on, NSUInteger flag) {
|
||||
bool zoom_button_enabled = IsMaximizable();
|
||||
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.
|
||||
if (!zoom_button_enabled)
|
||||
SetMaximizable(false);
|
||||
SetMaximizable(was_maximizable);
|
||||
}
|
||||
|
||||
void NativeWindowMac::SetCollectionBehavior(bool on, NSUInteger flag) {
|
||||
bool zoom_button_enabled = IsMaximizable();
|
||||
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.
|
||||
if (!zoom_button_enabled)
|
||||
SetMaximizable(false);
|
||||
SetMaximizable(was_maximizable);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
@ -738,6 +738,10 @@ describe('browser-window module', function () {
|
|||
w.destroy()
|
||||
w = new BrowserWindow({show: false, resizable: false})
|
||||
assert.equal(w.isResizable(), false)
|
||||
|
||||
if (process.platform === 'darwin') {
|
||||
assert.equal(w.isMaximizable(), true)
|
||||
}
|
||||
})
|
||||
|
||||
it('can be changed with setResizable method', function () {
|
||||
|
@ -846,6 +850,15 @@ describe('browser-window module', function () {
|
|||
assert.equal(w.isMaximizable(), false)
|
||||
w.setClosable(false)
|
||||
assert.equal(w.isMaximizable(), false)
|
||||
|
||||
w.setMaximizable(true)
|
||||
assert.equal(w.isMaximizable(), true)
|
||||
w.setClosable(true)
|
||||
assert.equal(w.isMaximizable(), true)
|
||||
w.setFullScreenable(false)
|
||||
assert.equal(w.isMaximizable(), true)
|
||||
w.setResizable(false)
|
||||
assert.equal(w.isMaximizable(), true)
|
||||
})
|
||||
})
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче