Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
a065283
feat(dictation): mouse middle/side buttons with Hold refcount
HKLHaoBin Jun 21, 2026
0f59398
fix(dictation): keep PR2 types mouse-only without side trigger variants
HKLHaoBin Jun 21, 2026
cd2ac4b
fix(dictation): tighten PR2 scope for mouse-only split
HKLHaoBin Jun 21, 2026
b2efa84
Trigger CI
Jun 21, 2026
03b473b
docs(types): drop PR1 side-modifier wording from ShortcutBinding comm…
HKLHaoBin Jun 21, 2026
55cb49d
fix(dictation): emit mouse release when monitor drops or disables hel…
HKLHaoBin Jun 21, 2026
0e37b29
feat(dictation): add mouse hold mode tests and improve mouse source h…
HKLHaoBin Jun 21, 2026
b26efbb
feat(linux): add evdev input for side combos and mouse dictation on L…
HKLHaoBin Jun 21, 2026
16b99c9
fix(linux): sync mouse hold sources before evdev monitor refresh
HKLHaoBin Jun 21, 2026
18a33b8
fix(dictation): clear hold sources when hotkey binding changes mid-hold
HKLHaoBin Jun 21, 2026
77a0cc9
fix: add missing HotkeyMode import in hotkey_loops.rs
Jun 21, 2026
b888c55
fix: avoid nested runtime panic in tests by using block_on_async helper
Jun 21, 2026
5829dd8
fix: use futures executor to avoid nested runtime in tests
Jun 21, 2026
5234acf
fix: constrain block_on_async Future output to ()
Jun 21, 2026
e3a6c6a
fix: simplify block_on_async to always use futures executor
Jun 21, 2026
9fb62f3
fix(types): restore side-specific HotkeyTrigger after rebase
HKLHaoBin Jun 25, 2026
0331833
fix(types): restore side HotkeyTrigger variants in Rust backend
HKLHaoBin Jun 25, 2026
4fa244f
fix(types): default mouse dictation prefs in UserPreferences
HKLHaoBin Jun 25, 2026
5ac029d
fix(tests): implement refresh_mouse_dictation on settings MockWriter
HKLHaoBin Jun 25, 2026
37c1f3e
ci: trigger CI workflow after test mock fix
HKLHaoBin Jun 25, 2026
c98c801
ci: re-sync PR head for workflow run
HKLHaoBin Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 97 additions & 4 deletions openless-all/app/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions openless-all/app/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ tar = "0.4"
tokio = { version = "1", features = ["full"] }
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] }
futures-util = "0.3"
futures = "0.3"
reqwest = { version = "0.12", default-features = false, features = ["json", "multipart", "rustls-tls", "stream", "system-proxy"] }
zip = "2"
thiserror = "1"
Expand Down Expand Up @@ -89,6 +90,7 @@ features = ["windows-native"]

[target.'cfg(target_os = "linux")'.dependencies]
dbus = "0.9"
evdev = "0.12"
[target.'cfg(all(unix, not(target_os = "macos"), not(target_os = "android")))'.dependencies.keyring]
version = "3.6.3"
default-features = false
Expand Down
5 changes: 5 additions & 0 deletions openless-all/app/src-tauri/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ mod tests {
switch_style_refreshes: Mutex<u32>,
open_app_refreshes: Mutex<u32>,
coding_agent_refreshes: Mutex<u32>,
mouse_dictation_refreshes: Mutex<u32>,
}

fn snapshot() -> CredentialsSnapshot {
Expand Down Expand Up @@ -636,6 +637,10 @@ mod tests {
fn refresh_coding_agent_hotkey(&self) {
*self.coding_agent_refreshes.lock().unwrap() += 1;
}

fn refresh_mouse_dictation(&self) {
*self.mouse_dictation_refreshes.lock().unwrap() += 1;
}
}

#[test]
Expand Down
16 changes: 16 additions & 0 deletions openless-all/app/src-tauri/src/commands/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub(crate) trait SettingsWriter {
fn refresh_dictation_hotkey(&self);
fn refresh_qa_hotkey(&self);
fn refresh_combo_hotkey(&self);
fn refresh_mouse_dictation(&self);
fn refresh_translation_hotkey(&self);
fn refresh_switch_style_hotkey(&self);
fn refresh_open_app_hotkey(&self);
Expand Down Expand Up @@ -48,6 +49,10 @@ impl SettingsWriter for Coordinator {
self.update_combo_hotkey_binding();
}

fn refresh_mouse_dictation(&self) {
self.update_mouse_dictation_binding();
}

fn refresh_translation_hotkey(&self) {
self.update_translation_hotkey_binding();
}
Expand Down Expand Up @@ -90,6 +95,10 @@ impl<T: SettingsWriter + ?Sized> SettingsWriter for Arc<T> {
(**self).refresh_combo_hotkey();
}

fn refresh_mouse_dictation(&self) {
(**self).refresh_mouse_dictation();
}

fn refresh_translation_hotkey(&self) {
(**self).refresh_translation_hotkey();
}
Expand Down Expand Up @@ -133,6 +142,9 @@ pub(crate) fn persist_settings_with_keyboard_apply<T: SettingsWriter>(
let translation_changed = previous.translation_hotkey != prefs.translation_hotkey;
let switch_style_changed = previous.switch_style_hotkey != prefs.switch_style_hotkey;
let open_app_changed = previous.open_app_hotkey != prefs.open_app_hotkey;
let mouse_dictation_changed = previous.mouse_middle_button_dictation
!= prefs.mouse_middle_button_dictation
|| previous.mouse_side_button_dictation != prefs.mouse_side_button_dictation;
let coding_agent_changed = previous.coding_agent_enabled != prefs.coding_agent_enabled
|| previous.coding_agent_voice_hotkey != prefs.coding_agent_voice_hotkey;
let windows_keyboard_list_changed = previous.windows_sendinput_insertion_only
Expand Down Expand Up @@ -207,6 +219,9 @@ pub(crate) fn persist_settings_with_keyboard_apply<T: SettingsWriter>(
if dictation_shortcut_changed {
coord.refresh_combo_hotkey();
}
if mouse_dictation_changed {
coord.refresh_mouse_dictation();
}
if qa_changed {
coord.refresh_qa_hotkey();
}
Expand Down Expand Up @@ -579,6 +594,7 @@ mod persist_settings_tests {
fn refresh_dictation_hotkey(&self) {}
fn refresh_qa_hotkey(&self) {}
fn refresh_combo_hotkey(&self) {}
fn refresh_mouse_dictation(&self) {}
fn refresh_translation_hotkey(&self) {}
fn refresh_switch_style_hotkey(&self) {}
fn refresh_open_app_hotkey(&self) {}
Expand Down
Loading
Loading