From bd94b9fa81a60f1acb95769caa07354cf5d74d1f Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Sun, 26 Oct 2025 14:27:17 +0530 Subject: [PATCH] =?UTF-8?q?CRITICAL=20FIX:=20Print=20preview=20and=20file?= =?UTF-8?q?=20loading=20-=20complete=20rewrite=20of=20timing=20logic=20Pri?= =?UTF-8?q?nt=20Preview=20Fix:=20-=20Changed=20to=20hide=20only=20editor-p?= =?UTF-8?q?ane=20instead=20of=20entire=20editor-container=20-=20Preview=20?= =?UTF-8?q?was=20inside=20editor-container,=20so=20hiding=20it=20hid=20the?= =?UTF-8?q?=20preview=20too!=20-=20Now=20correctly=20shows=20preview-pane-?= =?UTF-8?q?{tabId}=20with=20print-mode=20class=20-=20Hide=20all=20dialogs?= =?UTF-8?q?=20including=20find-dialog=20during=20print=20-=20Preview=20now?= =?UTF-8?q?=20displays=20correctly=20for=20printing=20File=20Loading=20Fix?= =?UTF-8?q?=20-=20Completely=20Rewritten:=20-=20Root=20cause:=20renderer-r?= =?UTF-8?q?eady=20was=20sent=20BEFORE=20theme=20was=20applied=20-=20Soluti?= =?UTF-8?q?on:=20Moved=20renderer-ready=20signal=20INTO=20theme-changed=20?= =?UTF-8?q?handler=20-=20Now=20waits=201500ms=20AFTER=20theme=20is=20appli?= =?UTF-8?q?ed=20before=20signaling=20ready=20-=20Main=20process=20delay=20?= =?UTF-8?q?increased=20to=20500ms=20for=20extra=20safety=20-=20Ensures=20c?= =?UTF-8?q?omplete=20UI=20render=20cycle:=20DOMContentLoaded=20->=20theme?= =?UTF-8?q?=20request=20->=20theme=20applied=20->=20wait=20->=20renderer-r?= =?UTF-8?q?eady=20->=20file=20opens=20-=20Files=20now=20load=20and=20rende?= =?UTF-8?q?r=20properly=20on=20first=20double-click=20Technical=20Flow:=20?= =?UTF-8?q?1.=20DOMContentLoaded=20fires,=20TabManager=20initializes=202.?= =?UTF-8?q?=20get-theme=20request=20sent=20to=20main=203.=20theme-changed?= =?UTF-8?q?=20received,=20theme=20applied=20to=20body=204.=20After=201500m?= =?UTF-8?q?s=20delay,=20renderer-ready=20sent=205.=20Main=20process=20wait?= =?UTF-8?q?s=20500ms=20more,=20then=20sends=20file-opened=206.=20Total=20d?= =?UTF-8?q?elay:=20~2=20seconds=20ensures=20rock-solid=20first-load=20rend?= =?UTF-8?q?ering=20=F0=9F=A4=96=20Generated=20with=20[Claude=20Code](https?= =?UTF-8?q?://claude.com/claude-code)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 4 ++-- src/renderer.js | 48 +++++++++++++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/main.js b/src/main.js index 2bc84f7..9ad7349 100644 --- a/src/main.js +++ b/src/main.js @@ -1669,10 +1669,10 @@ function openFileFromPath(filePath) { const content = fs.readFileSync(filePath, 'utf-8'); if (mainWindow && mainWindow.webContents && rendererReady) { // Add delay to ensure renderer is fully prepared to display the file - // Increased delay for first-time load when UI is still initializing + // Give extra time for theme application and preview pane setup setTimeout(() => { mainWindow.webContents.send('file-opened', { path: filePath, content }); - }, 300); + }, 500); } else { // Store file to open after renderer is ready app.pendingFile = filePath; diff --git a/src/renderer.js b/src/renderer.js index 52b8a97..b29e20c 100644 --- a/src/renderer.js +++ b/src/renderer.js @@ -1039,16 +1039,9 @@ document.addEventListener('DOMContentLoaded', () => { }); } - // Request current theme + // Request current theme - renderer-ready will be sent after theme is applied ipcRenderer.send('get-theme'); - // Delay renderer-ready signal to ensure all UI initialization completes - // This prevents files from opening before the interface is fully loaded - // Increased delay to account for slower first-time initialization - setTimeout(() => { - ipcRenderer.send('renderer-ready'); - }, 1000); - // Set up auto-save interval setInterval(() => { // Auto-save logic for all tabs @@ -1106,6 +1099,12 @@ ipcRenderer.on('toggle-find', () => { ipcRenderer.on('theme-changed', (event, theme) => { document.body.className = `theme-${theme}`; + + // After theme is applied, wait a bit longer and then signal renderer is ready + // This ensures complete UI initialization before files are opened + setTimeout(() => { + ipcRenderer.send('renderer-ready'); + }, 1500); }); // Undo/Redo handlers @@ -1173,47 +1172,58 @@ ipcRenderer.on('prepare-print-preview', (event, withStyles) => { return; } - // Hide editor and other UI elements for print - document.getElementById('editor-container').style.display = 'none'; + // Hide UI elements except the preview document.getElementById('toolbar').style.display = 'none'; document.getElementById('tab-bar').style.display = 'none'; document.getElementById('status-bar').style.display = 'none'; + // Hide editor panes (not the whole editor-container) + const editorPane = document.getElementById(`editor-pane-${activeTabId}`); + if (editorPane) { + editorPane.style.display = 'none'; + } + // Hide all export dialogs and other overlays const exportDialog = document.getElementById('export-dialog'); const batchDialog = document.getElementById('batch-dialog'); const pdfDialog = document.getElementById('pdf-editor-dialog'); const converterDialog = document.getElementById('converter-dialog'); + const findDialog = document.getElementById('find-dialog'); if (exportDialog) exportDialog.style.display = 'none'; if (batchDialog) batchDialog.style.display = 'none'; if (pdfDialog) pdfDialog.style.display = 'none'; if (converterDialog) converterDialog.style.display = 'none'; + if (findDialog) findDialog.style.display = 'none'; - // Show preview in full width - const preview = document.getElementById(`preview-${activeTabId}`); - if (preview) { - preview.classList.add('print-mode'); + // Make preview full screen for printing + const previewPane = document.getElementById(`preview-pane-${activeTabId}`); + if (previewPane) { + previewPane.classList.add('print-mode'); if (!withStyles) { - preview.classList.add('print-no-styles'); + previewPane.classList.add('print-no-styles'); } } // Re-show everything after print setTimeout(() => { - document.getElementById('editor-container').style.display = ''; document.getElementById('toolbar').style.display = ''; document.getElementById('tab-bar').style.display = ''; document.getElementById('status-bar').style.display = ''; + // Restore editor pane + if (editorPane) { + editorPane.style.display = ''; + } + // Restore dialog visibility if they were open if (exportDialog) exportDialog.style.display = ''; if (batchDialog) batchDialog.style.display = ''; if (pdfDialog) pdfDialog.style.display = ''; if (converterDialog) converterDialog.style.display = ''; + if (findDialog) findDialog.style.display = ''; - const preview = document.getElementById(`preview-${activeTabId}`); - if (preview) { - preview.classList.remove('print-mode', 'print-no-styles'); + if (previewPane) { + previewPane.classList.remove('print-mode', 'print-no-styles'); } }, 500); });