mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
fix: crash when calling BrowserWindow.moveTop() on modal children (#39527)
fix: crash when calling moveTop() on modal children Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
@@ -814,7 +814,7 @@ bool NativeWindowMac::MoveAbove(const std::string& sourceId) {
|
||||
if (!webrtc::GetWindowOwnerPid(window_id))
|
||||
return false;
|
||||
|
||||
if (!parent()) {
|
||||
if (!parent() || is_modal()) {
|
||||
[window_ orderWindow:NSWindowAbove relativeTo:window_id];
|
||||
} else {
|
||||
NSWindow* other_window = [NSApp windowWithWindowNumber:window_id];
|
||||
@@ -825,10 +825,11 @@ bool NativeWindowMac::MoveAbove(const std::string& sourceId) {
|
||||
}
|
||||
|
||||
void NativeWindowMac::MoveTop() {
|
||||
if (!parent())
|
||||
if (!parent() || is_modal()) {
|
||||
[window_ orderWindow:NSWindowAbove relativeTo:0];
|
||||
else
|
||||
} else {
|
||||
ReorderChildWindowAbove(window_, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void NativeWindowMac::SetResizable(bool resizable) {
|
||||
|
||||
@@ -1284,6 +1284,8 @@ describe('BrowserWindow module', () => {
|
||||
});
|
||||
|
||||
describe('BrowserWindow.moveTop()', () => {
|
||||
afterEach(closeAllWindows);
|
||||
|
||||
it('should not steal focus', async () => {
|
||||
const posDelta = 50;
|
||||
const wShownInactive = once(w, 'show');
|
||||
@@ -1325,6 +1327,15 @@ describe('BrowserWindow module', () => {
|
||||
await closeWindow(otherWindow, { assertNotWindows: false });
|
||||
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)', () => {
|
||||
|
||||
Reference in New Issue
Block a user