fix(electrobun): remove all -webkit-app-region, use JS window drag on AGOR title

This commit is contained in:
Hibryda 2026-03-20 06:50:47 +01:00
parent fe441a86fe
commit 03e1f18282
6 changed files with 73 additions and 22 deletions

View file

@ -232246,6 +232246,14 @@ var rpc = BrowserView.defineRPC({
return { x: 0, y: 0, width: 1400, height: 900 }; return { x: 0, y: 0, width: 1400, height: 900 };
} }
}, },
"window.setPosition": ({ x, y }) => {
try {
mainWindow.setPosition(x, y);
return { ok: true };
} catch {
return { ok: false };
}
},
"keybindings.getAll": () => { "keybindings.getAll": () => {
try { try {
return { keybindings: settingsDb.getKeybindings() }; return { keybindings: settingsDb.getKeybindings() };

View file

@ -4,8 +4,8 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Svelte App</title> <title>Svelte App</title>
<script type="module" crossorigin src="/assets/index-OTfWrRGk.js"></script> <script type="module" crossorigin src="/assets/index-DyX_7OUK.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DsPvEluY.css"> <link rel="stylesheet" crossorigin href="/assets/index-CYr5v29h.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View file

@ -308,6 +308,15 @@ const rpc = BrowserView.defineRPC<PtyRPCSchema>({
} }
}, },
"window.setPosition": ({ x, y }: { x: number; y: number }) => {
try {
mainWindow.setPosition(x, y);
return { ok: true };
} catch {
return { ok: false };
}
},
// ── Keybinding handlers ────────────────────────────────────────────── // ── Keybinding handlers ──────────────────────────────────────────────
"keybindings.getAll": () => { "keybindings.getAll": () => {

View file

@ -205,6 +205,39 @@
return () => clearInterval(id); return () => clearInterval(id);
}); });
// ── JS-based window drag (replaces broken -webkit-app-region on WebKitGTK) ──
let isDraggingWindow = false;
let dragStartX = 0;
let dragStartY = 0;
let winStartX = 0;
let winStartY = 0;
function onDragStart(e: MouseEvent) {
isDraggingWindow = true;
dragStartX = e.screenX;
dragStartY = e.screenY;
appRpc?.request["window.getFrame"]({}).then((frame: any) => {
winStartX = frame.x;
winStartY = frame.y;
}).catch(() => {});
window.addEventListener('mousemove', onDragMove);
window.addEventListener('mouseup', onDragEnd);
}
function onDragMove(e: MouseEvent) {
if (!isDraggingWindow) return;
const dx = e.screenX - dragStartX;
const dy = e.screenY - dragStartY;
appRpc?.request["window.setPosition"]?.({ x: winStartX + dx, y: winStartY + dy })?.catch?.(() => {});
}
function onDragEnd() {
isDraggingWindow = false;
window.removeEventListener('mousemove', onDragMove);
window.removeEventListener('mouseup', onDragEnd);
saveWindowFrame();
}
// ── Window frame persistence (debounced 500ms) ───────────────── // ── Window frame persistence (debounced 500ms) ─────────────────
let frameSaveTimer: ReturnType<typeof setTimeout> | null = null; let frameSaveTimer: ReturnType<typeof setTimeout> | null = null;
function saveWindowFrame() { function saveWindowFrame() {
@ -275,7 +308,8 @@
<!-- Left sidebar icon rail --> <!-- Left sidebar icon rail -->
<aside class="sidebar" role="navigation" aria-label="Primary navigation"> <aside class="sidebar" role="navigation" aria-label="Primary navigation">
<!-- AGOR vertical title --> <!-- AGOR vertical title -->
<div class="agor-title" aria-hidden="true">AGOR</div> <!-- svelte-ignore a11y_no_static_element_interactions -->
<div class="agor-title" aria-hidden="true" onmousedown={onDragStart}>AGOR</div>
<!-- Group icons — numbered circles --> <!-- Group icons — numbered circles -->
<div class="sidebar-groups" role="list" aria-label="Project groups"> <div class="sidebar-groups" role="list" aria-label="Project groups">
@ -512,7 +546,7 @@
padding: 1rem 0; padding: 1rem 0;
user-select: none; user-select: none;
flex-shrink: 0; flex-shrink: 0;
-webkit-app-region: drag; /* Only AGOR title is draggable — safe, small area */ /* NO -webkit-app-region — broken on WebKitGTK (captures all clicks in window) */
cursor: grab; cursor: grab;
} }
@ -695,7 +729,7 @@
transition: background 0.12s, color 0.12s; transition: background 0.12s, color 0.12s;
padding: 0; padding: 0;
font-family: var(--ui-font-family); font-family: var(--ui-font-family);
-webkit-app-region: no-drag; /* no-drag not needed — all -webkit-app-region removed */
} }
.wc-btn:hover { background: var(--ctp-surface0); color: var(--ctp-text); } .wc-btn:hover { background: var(--ctp-surface0); color: var(--ctp-text); }