fix(electrobun): use setPosition+setSize instead of setFrame, add resize throttle

This commit is contained in:
Hibryda 2026-03-25 02:09:54 +01:00
parent cfb7dafa17
commit 48d32f6f28
2 changed files with 12 additions and 1 deletions

View file

@ -121,7 +121,13 @@ const rpc = BrowserView.defineRPC<PtyRPCSchema>({
"window.getFrame": () => { try { return mainWindow.getFrame(); } catch { return { x: 0, y: 0, width: 1400, height: 900 }; } }, "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.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 }) => { "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: {}, messages: {},

View file

@ -144,8 +144,13 @@
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
} }
let resizeThrottleId = 0;
function onResizeMove(e: MouseEvent) { function onResizeMove(e: MouseEvent) {
if (!isResizing || !resizeReady) return; 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 dx = e.screenX - resizeStartX;
const dy = e.screenY - resizeStartY; const dy = e.screenY - resizeStartY;
let { x, y, width, height } = resizeFrame; let { x, y, width, height } = resizeFrame;