From 48d32f6f28ae8d2333e43d3aea511b27437ebe01 Mon Sep 17 00:00:00 2001 From: Hibryda Date: Wed, 25 Mar 2026 02:09:54 +0100 Subject: [PATCH] fix(electrobun): use setPosition+setSize instead of setFrame, add resize throttle --- ui-electrobun/src/bun/index.ts | 8 +++++++- ui-electrobun/src/mainview/App.svelte | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ui-electrobun/src/bun/index.ts b/ui-electrobun/src/bun/index.ts index 852adbf..72ee8bf 100644 --- a/ui-electrobun/src/bun/index.ts +++ b/ui-electrobun/src/bun/index.ts @@ -121,7 +121,13 @@ const rpc = BrowserView.defineRPC({ "window.getFrame": () => { try { return mainWindow.getFrame(); } catch { return { x: 0, y: 0, width: 1400, height: 900 }; } }, "window.setPosition": ({ x, y }: { x: number; y: number }) => { try { mainWindow.setPosition(x, y); return { ok: true }; } catch { return { ok: false }; } }, "window.setFrame": ({ x, y, width, height }: { x: number; y: number; width: number; height: number }) => { - try { mainWindow.setFrame(x, y, width, height); return { ok: true }; } catch (err) { console.error("[window.setFrame]", err); return { ok: false }; } + try { + // Use separate setPosition + setSize — setFrame's C implementation + // may not resize on GTK with titleBarStyle:"hidden" + mainWindow.setPosition(x, y); + mainWindow.setSize(width, height); + return { ok: true }; + } catch (err) { console.error("[window.setFrame]", err); return { ok: false }; } }, }, messages: {}, diff --git a/ui-electrobun/src/mainview/App.svelte b/ui-electrobun/src/mainview/App.svelte index 88a89cb..2315313 100644 --- a/ui-electrobun/src/mainview/App.svelte +++ b/ui-electrobun/src/mainview/App.svelte @@ -144,8 +144,13 @@ e.preventDefault(); e.stopPropagation(); } + let resizeThrottleId = 0; function onResizeMove(e: MouseEvent) { if (!isResizing || !resizeReady) return; + // Throttle to ~30fps to avoid overwhelming GTK + const now = Date.now(); + if (now - resizeThrottleId < 33) return; + resizeThrottleId = now; const dx = e.screenX - resizeStartX; const dy = e.screenY - resizeStartY; let { x, y, width, height } = resizeFrame;