fix: crash when calling BrowserWindow.moveTop()
on modal children (#39499)
fix: crash when calling moveTop() on modal children
This commit is contained in:
parent
f7a7085019
commit
1eb398b328
2 changed files with 15 additions and 3 deletions
|
@ -812,7 +812,7 @@ bool NativeWindowMac::MoveAbove(const std::string& sourceId) {
|
||||||
if (!webrtc::GetWindowOwnerPid(window_id))
|
if (!webrtc::GetWindowOwnerPid(window_id))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!parent()) {
|
if (!parent() || is_modal()) {
|
||||||
[window_ orderWindow:NSWindowAbove relativeTo:window_id];
|
[window_ orderWindow:NSWindowAbove relativeTo:window_id];
|
||||||
} else {
|
} else {
|
||||||
NSWindow* other_window = [NSApp windowWithWindowNumber:window_id];
|
NSWindow* other_window = [NSApp windowWithWindowNumber:window_id];
|
||||||
|
@ -823,10 +823,11 @@ bool NativeWindowMac::MoveAbove(const std::string& sourceId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindowMac::MoveTop() {
|
void NativeWindowMac::MoveTop() {
|
||||||
if (!parent())
|
if (!parent() || is_modal()) {
|
||||||
[window_ orderWindow:NSWindowAbove relativeTo:0];
|
[window_ orderWindow:NSWindowAbove relativeTo:0];
|
||||||
else
|
} else {
|
||||||
ReorderChildWindowAbove(window_, nullptr);
|
ReorderChildWindowAbove(window_, nullptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindowMac::SetResizable(bool resizable) {
|
void NativeWindowMac::SetResizable(bool resizable) {
|
||||||
|
|
|
@ -1283,6 +1283,8 @@ describe('BrowserWindow module', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('BrowserWindow.moveTop()', () => {
|
describe('BrowserWindow.moveTop()', () => {
|
||||||
|
afterEach(closeAllWindows);
|
||||||
|
|
||||||
it('should not steal focus', async () => {
|
it('should not steal focus', async () => {
|
||||||
const posDelta = 50;
|
const posDelta = 50;
|
||||||
const wShownInactive = once(w, 'show');
|
const wShownInactive = once(w, 'show');
|
||||||
|
@ -1324,6 +1326,15 @@ describe('BrowserWindow module', () => {
|
||||||
await closeWindow(otherWindow, { assertNotWindows: false });
|
await closeWindow(otherWindow, { assertNotWindows: false });
|
||||||
expect(BrowserWindow.getAllWindows()).to.have.lengthOf(1);
|
expect(BrowserWindow.getAllWindows()).to.have.lengthOf(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not crash when called on a modal child window', async () => {
|
||||||
|
const shown = once(w, 'show');
|
||||||
|
w.show();
|
||||||
|
await shown;
|
||||||
|
|
||||||
|
const child = new BrowserWindow({ modal: true, parent: w });
|
||||||
|
expect(() => { child.moveTop(); }).to.not.throw();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('BrowserWindow.moveAbove(mediaSourceId)', () => {
|
describe('BrowserWindow.moveAbove(mediaSourceId)', () => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue