feat(electrobun): native C resize library (Wails pattern)
New: agor-pty/native/agor_resize.c — C shared library that: - Connects button-press-event on GtkWindow + WebView children in C - Stores mouseButton, xroot, yroot, dragTime from real GTK events - Exports agor_resize_start(edge) for Bun FFI Build: gcc -shared -fPIC -o libagor-resize.so agor_resize.c $(pkg-config --cflags --libs gtk+-3.0) New: ui-electrobun/src/bun/native-resize.ts — Bun FFI wrapper App.svelte: simplified to just edge detection + RPC call
This commit is contained in:
parent
de40bcbcac
commit
178e560068
5 changed files with 244 additions and 62 deletions
|
|
@ -109,14 +109,11 @@ const rpc = BrowserView.defineRPC<PtyRPCSchema>({
|
|||
...miscHandlers,
|
||||
|
||||
// GTK native drag/resize — delegates to window manager (zero CPU)
|
||||
"window.beginResize": ({ edge, button, rootX, rootY }: { edge: string; button: number; rootX: number; rootY: number }) => {
|
||||
"window.beginResize": ({ edge }: { edge: string }) => {
|
||||
try {
|
||||
const { beginResizeDrag, edgeStringToGdk } = require("./gtk-window.ts");
|
||||
const gdkEdge = edgeStringToGdk(edge);
|
||||
if (gdkEdge === null) return { ok: false, error: `Unknown edge: ${edge}` };
|
||||
console.log(`[resize] edge=${edge} gdkEdge=${gdkEdge} btn=${button} rootX=${rootX} rootY=${rootY} ptr=${(mainWindow as any).ptr}`);
|
||||
const ok = beginResizeDrag((mainWindow as any).ptr, gdkEdge, button, rootX, rootY);
|
||||
console.log(`[resize] result: ${ok}`);
|
||||
// Uses native C library — stored mouse state from real GTK event
|
||||
const { startNativeResize } = require("./native-resize.ts");
|
||||
const ok = startNativeResize(edge);
|
||||
return { ok };
|
||||
} catch (err) { console.error("[window.beginResize]", err); return { ok: false }; }
|
||||
},
|
||||
|
|
@ -240,11 +237,12 @@ mainWindow = new BrowserWindow({
|
|||
},
|
||||
});
|
||||
|
||||
// GTK window setup — only log resizable status, skip all FFI modifications
|
||||
// (forceSmallMinSize and wrapWebViewInScrolledWindow caused crashes)
|
||||
// Native resize via C shared library (libagor-resize.so)
|
||||
// Owns GTK signal connections in C — no JSCallback boundary crossing
|
||||
try {
|
||||
console.log("[gtk] Window ptr:", (mainWindow as any).ptr);
|
||||
} catch (e) { console.error("[gtk] ptr access failed:", e); }
|
||||
const { initNativeResize } = require("./native-resize.ts");
|
||||
initNativeResize((mainWindow as any).ptr, 8);
|
||||
} catch (e) { console.error("[native-resize] init failed:", e); }
|
||||
|
||||
// Prevent GTK's false Ctrl+click detection from closing the window on initial load.
|
||||
// WebKitGTK reports stale modifier state (0x14 = Ctrl+Alt) after SIGTERM of previous instance,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue