fix: gate native window reveal on renderer load
Keep BrowserWindow hidden until both ready-to-show and did-finish-load are complete, preventing the incomplete header from reaching the screen. Render a static upload-speed baseline beneath the transparent canvas so the zero line exists independently of renderer timers. Add regression coverage for both reveal event orders, load failures, and the script-independent header baseline.
This commit is contained in:
+19
-2
@@ -15,14 +15,31 @@ function createStartupQuery(config, version) {
|
||||
|
||||
function createStartupWindow(BrowserWindow, options) {
|
||||
const window = new BrowserWindow({ ...options, show: false });
|
||||
window.once('ready-to-show', () => {
|
||||
let nativePaintReady = false;
|
||||
let rendererLoadFinished = false;
|
||||
let revealed = false;
|
||||
const reveal = () => {
|
||||
if (revealed || !nativePaintReady || !rendererLoadFinished) return;
|
||||
revealed = true;
|
||||
window.show();
|
||||
};
|
||||
window.once('ready-to-show', () => {
|
||||
nativePaintReady = true;
|
||||
reveal();
|
||||
});
|
||||
window.webContents.once('did-finish-load', () => {
|
||||
rendererLoadFinished = true;
|
||||
reveal();
|
||||
});
|
||||
|
||||
return {
|
||||
window,
|
||||
load(target, onLoadError, options) {
|
||||
return window.loadFile(target, options).catch(onLoadError);
|
||||
return window.loadFile(target, options).catch((error) => {
|
||||
rendererLoadFinished = true;
|
||||
reveal();
|
||||
return onLoadError(error);
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user