Merge pull request #6736 from electron/maximizable-state

Always restore maximizable state after changing window behavior/style
This commit is contained in:
Cheng Zhao 2016-08-05 17:25:22 +09:00 коммит произвёл GitHub
Родитель 8a33464d41 23203daf95
Коммит 3be68ba136
2 изменённых файлов: 18 добавлений и 9 удалений

Просмотреть файл

@ -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)
})
})