From 416afce88a6167be86aca25b9d1b9eaafa4a2ed0 Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Sun, 26 Oct 2025 14:19:59 +0530 Subject: [PATCH] =?UTF-8?q?Fix=20print=20preview=20to=20show=20content=20a?= =?UTF-8?q?nd=20improve=20file=20loading=20timing=20Print=20Preview=20Fixe?= =?UTF-8?q?s:=20-=20Fixed=20print=20preview=20to=20show=20actual=20preview?= =?UTF-8?q?=20content=20instead=20of=20formatting=20menu=20-=20Changed=20f?= =?UTF-8?q?rom=20generic=20'preview'=20ID=20to=20active=20tab's=20'preview?= =?UTF-8?q?-{tabId}'=20element=20-=20Added=20CSS=20positioning=20to=20make?= =?UTF-8?q?=20preview=20fixed=20and=20full-screen=20during=20print=20-=20H?= =?UTF-8?q?ide=20all=20dialog=20overlays=20(export,=20batch,=20PDF,=20conv?= =?UTF-8?q?erter)=20during=20print=20-=20Restore=20dialogs=20after=20print?= =?UTF-8?q?=20completes=20-=20Enhanced=20print-mode=20CSS=20with=20z-index?= =?UTF-8?q?=20and=20positioning=20for=20proper=20display=20File=20Loading?= =?UTF-8?q?=20Timing=20Improvements:=20-=20Increased=20renderer-ready=20de?= =?UTF-8?q?lay=20from=20500ms=20to=201000ms=20for=20slower=20first=20loads?= =?UTF-8?q?=20-=20Increased=20openFileFromPath=20delay=20from=20100ms=20to?= =?UTF-8?q?=20300ms=20-=20Ensures=20UI=20fully=20initializes=20before=20fi?= =?UTF-8?q?les=20are=20displayed=20-=20Files=20now=20render=20correctly=20?= =?UTF-8?q?on=20first=20double-click=20launch=20=F0=9F=A4=96=20Generated?= =?UTF-8?q?=20with=20[Claude=20Code](https://claude.com/claude-code)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 6 +++--- src/renderer.js | 27 +++++++++++++++++++++++---- src/styles.css | 11 +++++++++++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main.js b/src/main.js index 2b5fb44..2bc84f7 100644 --- a/src/main.js +++ b/src/main.js @@ -1668,11 +1668,11 @@ function openFileFromPath(filePath) { currentFile = filePath; const content = fs.readFileSync(filePath, 'utf-8'); if (mainWindow && mainWindow.webContents && rendererReady) { - // Add a small delay to ensure renderer is fully prepared to display the file - // This prevents timing issues where file opens before UI is ready + // Add delay to ensure renderer is fully prepared to display the file + // Increased delay for first-time load when UI is still initializing setTimeout(() => { mainWindow.webContents.send('file-opened', { path: filePath, content }); - }, 100); + }, 300); } else { // Store file to open after renderer is ready app.pendingFile = filePath; diff --git a/src/renderer.js b/src/renderer.js index 349acdb..52b8a97 100644 --- a/src/renderer.js +++ b/src/renderer.js @@ -1044,9 +1044,10 @@ document.addEventListener('DOMContentLoaded', () => { // 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'); - }, 500); + }, 1000); // Set up auto-save interval setInterval(() => { @@ -1163,7 +1164,9 @@ ipcRenderer.on('print-preview-styled', () => { // Print preview handler - prepare for printing ipcRenderer.on('prepare-print-preview', (event, withStyles) => { - const previewContent = document.getElementById('preview'); + // Get the active tab's preview element + const activeTabId = tabManager ? tabManager.activeTabId : 1; + const previewContent = document.getElementById(`preview-${activeTabId}`); if (!previewContent || !previewContent.innerHTML.trim()) { alert('Nothing to print. Please create or open a document and ensure the preview is visible.'); @@ -1176,8 +1179,18 @@ ipcRenderer.on('prepare-print-preview', (event, withStyles) => { document.getElementById('tab-bar').style.display = 'none'; document.getElementById('status-bar').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'); + if (exportDialog) exportDialog.style.display = 'none'; + if (batchDialog) batchDialog.style.display = 'none'; + if (pdfDialog) pdfDialog.style.display = 'none'; + if (converterDialog) converterDialog.style.display = 'none'; + // Show preview in full width - const preview = document.getElementById('preview'); + const preview = document.getElementById(`preview-${activeTabId}`); if (preview) { preview.classList.add('print-mode'); if (!withStyles) { @@ -1192,7 +1205,13 @@ ipcRenderer.on('prepare-print-preview', (event, withStyles) => { document.getElementById('tab-bar').style.display = ''; document.getElementById('status-bar').style.display = ''; - const preview = document.getElementById('preview'); + // 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 = ''; + + const preview = document.getElementById(`preview-${activeTabId}`); if (preview) { preview.classList.remove('print-mode', 'print-no-styles'); } diff --git a/src/styles.css b/src/styles.css index 1bf5075..f96185f 100644 --- a/src/styles.css +++ b/src/styles.css @@ -2956,6 +2956,17 @@ body.theme-concrete-warm .status-bar { display: block !important; width: 100% !important; max-width: 100% !important; + position: fixed !important; + top: 0 !important; + left: 0 !important; + z-index: 9999 !important; + background: white !important; + padding: 20px !important; +} + +/* Ensure preview panes are visible in print mode */ +#preview-pane-1, #preview-pane-2, #preview-pane-3, #preview-pane-4, #preview-pane-5 { + display: block !important; } .print-no-styles .preview-content {