fix(web): paste clipboard text into the TEXT / MText editors
Ctrl+V was globally bound to the entity paste command, so it never pasted into an open text editor, and even when routed there iced's clipboard read is a no-op on the web. Route Ctrl+V to the focused editor and, on the web, read the system clipboard via the browser's async Clipboard API (the keypress is a user gesture, so the read is permitted): - MText editor: insert at the caret (web + native). - TEXT field: append on the web; native lets the text_input paste itself. - No editor open: falls through to the entity paste command as before. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
54106ca9b0
commit
e1c5917644
5 changed files with 77 additions and 1 deletions
14
src/sys.rs
14
src/sys.rs
|
|
@ -17,6 +17,20 @@ pub fn open_url(url: &str) {
|
|||
}
|
||||
}
|
||||
|
||||
/// Web: read text from the system clipboard via the async Clipboard API.
|
||||
/// iced's own `clipboard::read` is a no-op on the web (the browser clipboard is
|
||||
/// async + permission-gated), so the editor paste paths use this instead. The
|
||||
/// Ctrl+V keypress that drives it is a user gesture, so the read is permitted.
|
||||
/// Returns `None` when denied, empty, or unsupported.
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub async fn read_clipboard_text() -> Option<String> {
|
||||
let clipboard = web_sys::window()?.navigator().clipboard();
|
||||
let value = wasm_bindgen_futures::JsFuture::from(clipboard.read_text())
|
||||
.await
|
||||
.ok()?;
|
||||
value.as_string()
|
||||
}
|
||||
|
||||
/// Turn an `rfd` file handle into a `PathBuf` the rest of the app keys on.
|
||||
///
|
||||
/// Desktop returns the real filesystem path. The browser has no path, so we
|
||||
|
|
|
|||
Loading…
Reference in a new issue