agent: dogfood polish 2026/04/19 — Linux native chrome + History redesign + mic picker cleanup
Second dogfood sprint. Headline fix: Linux now uses native KWin/Mutter decorations instead of fragile frameless `startResizeDragging`, which collapsed diagonal corner resize to a single axis and made drag feel laggy. macOS / Windows keep custom chrome via `useCustomChrome` gate. Other changes: - Cross-window preferences sync via `kon:preferences-changed` Tauri event — theme and font changes propagate live to float/viewer. - Hotkey recorder rewritten to use capture-phase document listener gated by $effect; button focus was unreliable in webkit2gtk. - History page redesigned for cognitive-load hygiene: title-first compact row, inline title input, Edit popout opening /viewer in edit mode, clipboard export as .md with YAML frontmatter, manual tag chips + + Add tag input, header tag filter (cap 7), global Starred filter, `tag:xyz` search syntax. - `deriveAutoTags` kept as empty hook for post-Task-7 LLM topic tags; research found all previous auto-tag chips redundant with row UI. - Viewer window adds edit mode with debounced-save textarea; native title renamed to "Kon - Transcription Editor". - Window minimums updated per GNOME HIG + WCAG reflow research: main 960x600, float 360x480, editor 560x520. - Microphone picker filters raw ALSA strings (hw:, plughw:, front:, sysdefault:, null) and dedupes by CARD=X. New `description` field on DeviceInfo reads /proc/asound/cards so Blue Yeti shows as "Blue Microphones" instead of the short "Microphones" card name. - GPU reporting fixed: get_runtime_capabilities now returns accelerators=[cpu,vulkan] and whisper.supports_gpu=true, matching the transcribe-rs whisper-vulkan feature linked unconditionally. - ResizeHandles kept for macOS/Windows frameless: 12px edges, 20px corners via CSS vars, pointerdown + setPointerCapture, corners above edges in z-order, rendered as sibling (not child) of the animated layout root so `position: fixed` is viewport-relative. - Dueling drag-region handlers removed — `data-tauri-drag-region` and manual `startDragging()` were stacked on the same elements; kept the manual handler which has the button/input early-return logic. See HANDOVER.md for the full session log and deferred items. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
if (e.button !== 0) return;
|
||||
if (e.target.closest("button")) return;
|
||||
if (e.target.closest("input")) return;
|
||||
try { e.currentTarget?.setPointerCapture?.(e.pointerId); } catch {}
|
||||
getCurrentWindow().startDragging();
|
||||
}
|
||||
|
||||
@@ -164,14 +165,13 @@
|
||||
<!-- Drag handle with title -->
|
||||
<div
|
||||
class="flex items-center h-[36px] bg-bg-elevated select-none px-3"
|
||||
onmousedown={handleDragStart}
|
||||
data-tauri-drag-region
|
||||
onpointerdown={handleDragStart}
|
||||
>
|
||||
<span class="text-[12px] font-medium text-text-secondary tracking-wide" data-tauri-drag-region>
|
||||
<span class="text-[12px] font-medium text-text-secondary tracking-wide">
|
||||
Kon - To-do
|
||||
</span>
|
||||
|
||||
<div class="flex-1" data-tauri-drag-region></div>
|
||||
<div class="flex-1"></div>
|
||||
|
||||
<!-- Pin button -->
|
||||
<button
|
||||
@@ -206,7 +206,9 @@
|
||||
<!-- Single-column content -->
|
||||
<div class="flex flex-col flex-1 min-h-0">
|
||||
<!-- List selector pills -->
|
||||
<div class="flex items-center gap-1 px-3 py-2 border-b border-border-subtle overflow-x-auto">
|
||||
<!-- Outer row does not scroll, so the sort dropdown below is not clipped. -->
|
||||
<div class="flex items-center gap-1 px-3 py-2 border-b border-border-subtle">
|
||||
<div class="flex items-center gap-1 overflow-x-auto flex-1 min-w-0">
|
||||
{#each builtInLists as list (list.id)}
|
||||
<button
|
||||
class="flex items-center gap-1 px-2.5 py-1 rounded-lg text-[11px] whitespace-nowrap flex-shrink-0
|
||||
@@ -336,9 +338,10 @@
|
||||
onclick={(e) => { e.stopPropagation(); showNewList = true; }}
|
||||
>+</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- Sort -->
|
||||
<div class="relative flex-shrink-0 ml-auto">
|
||||
<!-- Sort — sibling of the scroll container so its dropdown is not clipped -->
|
||||
<div class="relative flex-shrink-0 pl-1">
|
||||
<button
|
||||
class="px-1.5 py-1 rounded text-[10px] text-text-tertiary hover:text-text-secondary"
|
||||
onclick={(e) => { e.stopPropagation(); showSortMenu = !showSortMenu; }}
|
||||
|
||||
Reference in New Issue
Block a user