Merge pull request #50 from vladstudio/cross-layout-paste
fix(utils): use virtual key codes for cross-layout paste
This commit is contained in:
commit
1c9b2ee7a1
1 changed files with 12 additions and 8 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue