- coordinator.rs: terminal state (Done/Error/Cancelled) auto-clears after 3s;
fix RETRY_GEN comparison (fetch_add returns old value, use latest_gen > gen+1);
remove broken 300ms retry
- HotkeySettingsContext.tsx: fix queueSetSettings never calling setSettings()
(latestPrefsRef was already updated to the new object before microtask ran)
- openless.cpp: add PostInputMethod event hook to restore auxDown after
fcitx5 processes key events
- RecordingInputSection.tsx: hide clipboard/paste/capsule settings on Linux;
streaming insert shown as standalone card instead of inside clipboard group
- ShortcutsSection.tsx: hide "capsule confirm" shortcut hint on Linux
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
exit 0 on rpmrebuild failure produced a broken RPM silently.
Use exit 1 and print to stderr so the CI pipeline catches it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- AppImage cannot work for fcitx5 plugin injection: fcitx5 runs on the
host system and loads addons from host paths (/usr/lib/.../fcitx5).
Files placed inside the AppImage mount are invisible to fcitx5.
- For Debian, use dpkg-architecture to detect the multiarch triplet
(x86_64-linux-gnu, aarch64-linux-gnu, etc.) instead of hardcoding.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- RPM: use /usr/lib64/fcitx5/ (RPM 64-bit standard) instead of
Debian multiarch path
- AppImage: only support AppDir directory input, remove .AppImage file
extraction which couldn't repack and would lose changes
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
setHotkey/setHotkeyRaw now clear hasCustomDictationKey_ to prevent stale custom
combo from persisting after switching to a preset modifier. setCustomDictationTrigger
now persists TriggerRawSym=TriggerRawStates=0 to raw config so the old raw
trigger doesn't reload after fcitx5 restart.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add SetCustomDictationTrigger(s) to plugin for custom key combos
- Add fcitx5 availability check before hotkey install, surface error
- Sync custom dictation combo to fcitx5 plugin from coordinator
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Extend the fcitx5 plugin with SetQaHotkeyRaw/SetTranslationHotkeyRaw
DBus methods and corresponding signals, so that QA panel toggle and
translation modifier hotkeys work on Linux (not just the main dictation
hotkey). Built-in Shift key translation modifier also handled by the
plugin. Document DBus security model in plugin header.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Remove 290 lines of unused rdev listener code from the Linux hotkey
platform module, drop the rdev dependency from Cargo.toml, and clean up
capsule_window_visible init leftover. Update doc comments and frontend
i18n to reflect the unified fcitx5-only path.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ic->connect(ic->destroyed, ...) is invalid — InputContext has no two-arg
connect overload. Use ic->destroyed.connect(callback) directly, which
calls Signal<void()>::connect. Also simplified ScopedConnection storage
from unique_ptr to direct member (ScopedConnection is move-assignable).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Prevents savedIc_ from becoming a dangling pointer by connecting to the
InputContext::destroyed signal when the IC is saved. On destruction the
pointer is cleared automatically, and commitText falls through to
foreachFocused for the current focused IC.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- fcitx5 C++ plugin (scripts/linux-fcitx5-plugin/) with DBus interface:
CommitText, SetHotkey/SetHotkeyRaw, DictationKeyEvent signal
- linux_fcitx.rs: DBus client to call plugin from Rust
- coordinator/dictation.rs: Wayland insertion via fcitx5 commit_text,
streaming insert enabled on Wayland
- insertion.rs: fcitx5 commit_text on Linux with clipboard fallback
- unicode_keystroke.rs: Linux path uses fcitx5 commit_text
- Capsule window show-once on Linux to avoid stealing focus
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>