fix: respect setAlwaysOnTop before showInactive on Linux under X11 (#44078)

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
This commit is contained in:
John Beutner 2024-10-18 14:29:52 -04:00 committed by GitHub
parent 738533dec7
commit 35aeab6ecd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 0 deletions

View file

@ -538,6 +538,11 @@ void NativeWindowViews::ShowInactive() {
#if BUILDFLAG(IS_LINUX)
if (global_menu_bar_)
global_menu_bar_->OnWindowMapped();
// On X11, setting Z order before showing the window doesn't take effect,
// so we have to call it again.
if (IsX11())
widget()->SetZOrderLevel(widget()->GetZOrderLevel());
#endif
}

View file

@ -2514,6 +2514,22 @@ describe('BrowserWindow module', () => {
expect(c.isAlwaysOnTop()).to.be.true('child is not always on top');
expect(c._getAlwaysOnTopLevel()).to.equal('screen-saver');
});
it('works when called prior to show', async () => {
w = new BrowserWindow({ show: false });
w.setAlwaysOnTop(true, 'screen-saver');
w.show();
await setTimeout(1000);
expect(w.isAlwaysOnTop()).to.be.true('is not alwaysOnTop');
});
it('works when called prior to showInactive', async () => {
w = new BrowserWindow({ show: false });
w.setAlwaysOnTop(true, 'screen-saver');
w.showInactive();
await setTimeout(1000);
expect(w.isAlwaysOnTop()).to.be.true('is not alwaysOnTop');
});
});
describe('preconnect feature', () => {