fix: close attached sheet on window close (#28967)
This commit is contained in:
parent
41bb3f1321
commit
3d6343ed51
2 changed files with 18 additions and 6 deletions
|
@ -473,6 +473,12 @@ void NativeWindowMac::Close() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a sheet is attached to the window when we call
|
||||||
|
// [window_ performClose:nil], the window won't close properly
|
||||||
|
// even after the user has ended the sheet.
|
||||||
|
// Ensure it's closed before calling [window_ performClose:nil].
|
||||||
|
SetEnabled(true);
|
||||||
|
|
||||||
[window_ performClose:nil];
|
[window_ performClose:nil];
|
||||||
|
|
||||||
// Closing a sheet doesn't trigger windowShouldClose,
|
// Closing a sheet doesn't trigger windowShouldClose,
|
||||||
|
@ -540,8 +546,7 @@ void NativeWindowMac::Hide() {
|
||||||
// If a sheet is attached to the window when we call [window_ orderOut:nil],
|
// If a sheet is attached to the window when we call [window_ orderOut:nil],
|
||||||
// the sheet won't be able to show again on the same window.
|
// the sheet won't be able to show again on the same window.
|
||||||
// Ensure it's closed before calling [window_ orderOut:nil].
|
// Ensure it's closed before calling [window_ orderOut:nil].
|
||||||
if ([window_ attachedSheet])
|
SetEnabled(true);
|
||||||
[window_ endSheet:[window_ attachedSheet]];
|
|
||||||
|
|
||||||
if (is_modal() && parent()) {
|
if (is_modal() && parent()) {
|
||||||
[window_ orderOut:nil];
|
[window_ orderOut:nil];
|
||||||
|
@ -575,14 +580,14 @@ bool NativeWindowMac::IsEnabled() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindowMac::SetEnabled(bool enable) {
|
void NativeWindowMac::SetEnabled(bool enable) {
|
||||||
if (enable) {
|
if (!enable) {
|
||||||
[window_ endSheet:[window_ attachedSheet]];
|
|
||||||
} else {
|
|
||||||
[window_ beginSheet:window_
|
[window_ beginSheet:window_
|
||||||
completionHandler:^(NSModalResponse returnCode) {
|
completionHandler:^(NSModalResponse returnCode) {
|
||||||
NSLog(@"modal enabled");
|
NSLog(@"modal enabled");
|
||||||
return;
|
return;
|
||||||
}];
|
}];
|
||||||
|
} else if ([window_ attachedSheet]) {
|
||||||
|
[window_ endSheet:[window_ attachedSheet]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import * as os from 'os';
|
||||||
import * as qs from 'querystring';
|
import * as qs from 'querystring';
|
||||||
import * as http from 'http';
|
import * as http from 'http';
|
||||||
import { AddressInfo } from 'net';
|
import { AddressInfo } from 'net';
|
||||||
import { app, BrowserWindow, BrowserView, ipcMain, OnBeforeSendHeadersListenerDetails, protocol, screen, webContents, session, WebContents, BrowserWindowConstructorOptions } from 'electron/main';
|
import { app, BrowserWindow, BrowserView, dialog, ipcMain, OnBeforeSendHeadersListenerDetails, protocol, screen, webContents, session, WebContents, BrowserWindowConstructorOptions } from 'electron/main';
|
||||||
|
|
||||||
import { emittedOnce, emittedUntil, emittedNTimes } from './events-helpers';
|
import { emittedOnce, emittedUntil, emittedNTimes } from './events-helpers';
|
||||||
import { ifit, ifdescribe, defer, delay } from './spec-helpers';
|
import { ifit, ifdescribe, defer, delay } from './spec-helpers';
|
||||||
|
@ -102,6 +102,13 @@ describe('BrowserWindow module', () => {
|
||||||
w = null as unknown as BrowserWindow;
|
w = null as unknown as BrowserWindow;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should work if called when a messageBox is showing', async () => {
|
||||||
|
const closed = emittedOnce(w, 'closed');
|
||||||
|
dialog.showMessageBox(w, { message: 'Hello Error' });
|
||||||
|
w.close();
|
||||||
|
await closed;
|
||||||
|
});
|
||||||
|
|
||||||
it('should emit unload handler', async () => {
|
it('should emit unload handler', async () => {
|
||||||
await w.loadFile(path.join(fixtures, 'api', 'unload.html'));
|
await w.loadFile(path.join(fixtures, 'api', 'unload.html'));
|
||||||
const closed = emittedOnce(w, 'closed');
|
const closed = emittedOnce(w, 'closed');
|
||||||
|
|
Loading…
Reference in a new issue