diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index a3d4c93..47b88a1 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -17,27 +17,31 @@ use tauri::tray::TrayIcon; use tauri::{AppHandle, Emitter, Manager, WebviewWindowBuilder}; use tauri_plugin_clipboard_manager::ClipboardExt; +/// Sends a paste command (Cmd+V or Ctrl+V) using platform-specific virtual key codes. +/// This ensures the paste works regardless of keyboard layout (e.g., Russian, AZERTY, DVORAK). fn send_paste() -> Result<(), String> { - // Determine the modifier key based on the OS + // Platform-specific key definitions #[cfg(target_os = "macos")] - let modifier_key = Key::Meta; // Command key on macOS - #[cfg(not(target_os = "macos"))] - let modifier_key = Key::Control; // Control key on other systems + let (modifier_key, v_key_code) = (Key::Meta, Key::Other(9)); + #[cfg(target_os = "windows")] + let (modifier_key, v_key_code) = (Key::Control, Key::Other(0x56)); // VK_V + #[cfg(target_os = "linux")] + let (modifier_key, v_key_code) = (Key::Control, Key::Unicode('v')); let mut enigo = Enigo::new(&Settings::default()) .map_err(|e| format!("Failed to initialize Enigo: {}", e))?; - // Press both keys + // Press modifier + V enigo .key(modifier_key, enigo::Direction::Press) .map_err(|e| format!("Failed to press modifier key: {}", e))?; enigo - .key(Key::Unicode('v'), enigo::Direction::Press) + .key(v_key_code, enigo::Direction::Press) .map_err(|e| format!("Failed to press V key: {}", e))?; - // Release both keys + // Release V + modifier (reverse order) enigo - .key(Key::Unicode('v'), enigo::Direction::Release) + .key(v_key_code, enigo::Direction::Release) .map_err(|e| format!("Failed to release V key: {}", e))?; enigo .key(modifier_key, enigo::Direction::Release)