From a1e7e10c0f7b71c571fcf429067821393aff5170 Mon Sep 17 00:00:00 2001 From: Jeffrey Alan Scudder Date: Tue, 13 Jan 2026 03:19:12 +0000 Subject: [PATCH] v0.1.12: Add debug logging for +/- window commands --- ac-electron/main.js | 6 ++++++ ac-electron/package.json | 2 +- ac-electron/renderer/flip-view.html | 14 +++++++++++++- system/public/aesthetic.computer/disks/prompt.mjs | 26 ++++++++++++++++++++++++-- 4 file(s) changed, 44 insertion(s)(+), 4 deletion(s)(-) diff --git a/ac-electron/main.js b/ac-electron/main.js --- a/ac-electron/main.js +++ b/ac-electron/main.js @@ -1985,10 +1985,13 @@ }); // Open/close windows from inside the embedded AC prompt (via webview popup interception) ipcMain.handle('ac-open-window', async (event, { url } = {}) => { + console.log('[main] ac-open-window called with url:', url); const { window: newWindow } = await openDevWindow(); + console.log('[main] openDevWindow returned:', !!newWindow); if (url && newWindow) { newWindow.webContents.once('did-finish-load', () => { if (!newWindow.isDestroyed()) { + console.log('[main] Sending navigate to new window:', url); newWindow.webContents.send('navigate', url); } }); @@ -1997,8 +2000,11 @@ return { success: true }; }); ipcMain.handle('ac-close-window', async (event) => { + console.log('[main] ac-close-window called'); const senderWindow = BrowserWindow.fromWebContents(event.sender); + console.log('[main] sender window found:', !!senderWindow); if (senderWindow && !senderWindow.isDestroyed()) { + console.log('[main] Closing window'); senderWindow.close(); } return { success: true }; diff --git a/ac-electron/package.json b/ac-electron/package.json --- a/ac-electron/package.json +++ b/ac-electron/package.json @@ -1,6 +1,6 @@ { "name": "aesthetic-computer", - "version": "0.1.11", + "version": "0.1.12", "description": "Aesthetic Computer - Creative coding platform", "homepage": "https://aesthetic.computer", "author": "Aesthetic Computer ", diff --git a/ac-electron/renderer/flip-view.html b/ac-electron/renderer/flip-view.html --- a/ac-electron/renderer/flip-view.html +++ b/ac-electron/renderer/flip-view.html @@ -820,14 +820,26 @@ // Handle window.open() from webview (prompt.mjs + and - commands) // Note: Main process also handles this via setWindowOpenHandler webviewEl.addEventListener('new-window', (e) => { - console.log('[flip] new-window event:', e?.url); + console.log('[flip] new-window event received:', e?.url, e); if (e?.preventDefault) e.preventDefault(); const url = e?.url || ''; if (url.startsWith('ac://close')) { + console.log('[flip] Handling ac://close - invoking ac-close-window'); ipcRenderer.invoke('ac-close-window'); return; } + console.log('[flip] Opening new window with url:', url); ipcRenderer.invoke('ac-open-window', { url }); + }); + + // Also try did-create-window (Electron 22+) + webviewEl.addEventListener('did-create-window', (e) => { + console.log('[flip] did-create-window event:', e); + }); + + // And will-navigate for debugging + webviewEl.addEventListener('will-navigate', (e) => { + console.log('[flip] will-navigate:', e?.url); }); // Mark this as the main window and set initial piece diff --git a/system/public/aesthetic.computer/disks/prompt.mjs b/system/public/aesthetic.computer/disks/prompt.mjs --- a/system/public/aesthetic.computer/disks/prompt.mjs +++ b/system/public/aesthetic.computer/disks/prompt.mjs @@ -2147,16 +2147,38 @@ return true; } else if (text === "+") { // New window/tab. In Electron, the host webview wrapper intercepts popups and // opens a new BrowserWindow. - window.open(location.href, "_blank", "noopener"); + const isElectron = /Electron/i.test(navigator.userAgent || ""); + console.log("[prompt] '+' command - opening new window", { + isElectron, + userAgent: navigator.userAgent, + href: location.href + }); + try { + const result = window.open(location.href, "_blank", "noopener"); + console.log("[prompt] window.open result:", result); + } catch (err) { + console.error("[prompt] window.open failed:", err); + } makeFlash($); return true; } else if (text === "-") { const isElectron = /Electron/i.test(navigator.userAgent || ""); + console.log("[prompt] '-' command - closing window", { + isElectron, + userAgent: navigator.userAgent + }); if (isElectron) { // Ask the Electron host to close this BrowserWindow (intercepted as a popup). - window.open("ac://close", "_blank"); + console.log("[prompt] Attempting ac://close popup..."); + try { + const result = window.open("ac://close", "_blank"); + console.log("[prompt] ac://close result:", result); + } catch (err) { + console.error("[prompt] ac://close failed:", err); + } } else { // Browsers will only allow this for script-opened tabs/windows. + console.log("[prompt] Attempting window.close()..."); window.close(); } makeFlash($); -- tangled.sh