diff --git a/Cargo.lock b/Cargo.lock index ffc7366eb9..0ee0669b1e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -326,22 +326,13 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" -dependencies = [ - "objc2 0.5.2", -] - [[package]] name = "block2" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ - "objc2 0.6.3", + "objc2", ] [[package]] @@ -605,7 +596,7 @@ dependencies = [ "cef-dll-sys", "clap", "libloading 0.9.0", - "objc2 0.6.3", + "objc2", "plist", "semver", "serde", @@ -737,45 +728,6 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" -[[package]] -name = "clipboard-win" -version = "5.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" -dependencies = [ - "error-code", -] - -[[package]] -name = "clipboard_macos" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7f4aaa047ba3c3630b080bb9860894732ff23e2aee290a418909aa6d5df38f" -dependencies = [ - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "clipboard_wayland" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003f886bc4e2987729d10c1db3424e7f80809f3fc22dbc16c685738887cb37b8" -dependencies = [ - "smithay-clipboard", -] - -[[package]] -name = "clipboard_x11" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4274ea815e013e0f9f04a2633423e14194e408a0576c943ce3d14ca56c50031c" -dependencies = [ - "thiserror 1.0.69", - "x11rb", -] - [[package]] name = "cmake" version = "0.1.54" @@ -1259,9 +1211,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", + "block2", "libc", - "objc2 0.6.3", + "objc2", ] [[package]] @@ -1536,12 +1488,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "error-code" -version = "3.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" - [[package]] name = "euclid" version = "0.22.14" @@ -2262,9 +2208,9 @@ dependencies = [ "interprocess", "lzma-rust2", "muda", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", - "objc2-foundation 0.3.2", + "objc2", + "objc2-app-kit", + "objc2-foundation", "open", "rand", "rfd", @@ -2276,7 +2222,6 @@ dependencies = [ "tracing-subscriber", "vello", "wgpu", - "window_clipboard", "windows 0.62.2", "winit", ] @@ -2331,11 +2276,11 @@ dependencies = [ "ipc-channel", "libc", "mach2", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", - "objc2-foundation 0.3.2", + "objc2", + "objc2-app-kit", + "objc2-foundation", "objc2-io-surface", - "objc2-metal 0.3.2", + "objc2-metal", "rand", "serde", "serde_json", @@ -3505,10 +3450,10 @@ dependencies = [ "crossbeam-channel", "dpi 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "keyboard-types", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", + "objc2", + "objc2-app-kit", "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc2-foundation", "once_cell", "png 0.17.16", "thiserror 2.0.18", @@ -3770,22 +3715,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - -[[package]] -name = "objc2" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" -dependencies = [ - "objc-sys", - "objc2-encode", -] - [[package]] name = "objc2" version = "0.6.3" @@ -3795,22 +3724,6 @@ dependencies = [ "objc2-encode", ] -[[package]] -name = "objc2-app-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "libc", - "objc2 0.5.2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", -] - [[package]] name = "objc2-app-kit" version = "0.3.2" @@ -3818,22 +3731,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", - "objc2 0.6.3", + "block2", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "objc2-foundation", ] [[package]] @@ -3843,9 +3744,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", + "block2", "dispatch2", - "objc2 0.6.3", + "objc2", ] [[package]] @@ -3859,18 +3760,6 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "objc2-core-image" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal 0.2.2", -] - [[package]] name = "objc2-core-video" version = "0.3.2" @@ -3888,18 +3777,6 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" -[[package]] -name = "objc2-foundation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "libc", - "objc2 0.5.2", -] - [[package]] name = "objc2-foundation" version = "0.3.2" @@ -3907,8 +3784,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", - "objc2 0.6.3", + "block2", + "objc2", "objc2-core-foundation", ] @@ -3920,21 +3797,9 @@ checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ "bitflags 2.11.0", "libc", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", -] - -[[package]] -name = "objc2-metal" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "objc2-foundation", ] [[package]] @@ -3944,27 +3809,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", + "block2", "dispatch2", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc2-foundation", "objc2-io-surface", ] -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal 0.2.2", -] - [[package]] name = "objc2-quartz-core" version = "0.3.2" @@ -3972,10 +3824,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-metal 0.3.2", + "objc2-foundation", + "objc2-metal", ] [[package]] @@ -3985,9 +3837,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc2-foundation", ] [[package]] @@ -4752,10 +4604,10 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" dependencies = [ - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", + "objc2-foundation", + "objc2-quartz-core", ] [[package]] @@ -4994,15 +4846,15 @@ name = "rfd" version = "0.17.2" source = "git+https://github.com/timon-schelling/rfd.git?branch=graphite#ebaf54232782629070e770bfe9cd90cb472ff137" dependencies = [ - "block2 0.6.2", + "block2", "dispatch2", "js-sys", "libc", "log", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", + "objc2", + "objc2-app-kit", "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc2-foundation", "percent-encoding", "pollster", "raw-window-handle", @@ -5317,7 +5169,7 @@ dependencies = [ "ab_glyph", "log", "memmap2 0.9.10", - "smithay-client-toolkit 0.21.1", + "smithay-client-toolkit", "tiny-skia", ] @@ -5630,33 +5482,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smithay-client-toolkit" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" -dependencies = [ - "bitflags 2.11.0", - "calloop", - "calloop-wayland-source", - "cursor-icon", - "libc", - "log", - "memmap2 0.9.10", - "rustix", - "thiserror 2.0.18", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-experimental 20250721.0.1", - "wayland-protocols-misc", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - [[package]] name = "smithay-client-toolkit" version = "0.21.1" @@ -5675,24 +5500,13 @@ dependencies = [ "wayland-csd-frame", "wayland-cursor", "wayland-protocols", - "wayland-protocols-experimental 20251230.0.3", + "wayland-protocols-experimental", "wayland-protocols-misc", "wayland-protocols-wlr", "wayland-scanner", "xkeysym", ] -[[package]] -name = "smithay-clipboard" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226" -dependencies = [ - "libc", - "smithay-client-toolkit 0.20.0", - "wayland-backend", -] - [[package]] name = "smol_str" version = "0.3.2" @@ -6903,19 +6717,6 @@ dependencies = [ "wayland-scanner", ] -[[package]] -name = "wayland-protocols-experimental" -version = "20250721.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" -dependencies = [ - "bitflags 2.11.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - [[package]] name = "wayland-protocols-experimental" version = "20251230.0.3" @@ -7168,7 +6969,7 @@ dependencies = [ "ash", "bit-set 0.9.1", "bitflags 2.11.0", - "block2 0.6.2", + "block2", "bytemuck", "cfg-if", "cfg_aliases", @@ -7184,11 +6985,11 @@ dependencies = [ "log", "naga", "ndk-sys", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-metal 0.3.2", - "objc2-quartz-core 0.3.2", + "objc2-foundation", + "objc2-metal", + "objc2-quartz-core", "once_cell", "ordered-float 4.6.0", "parking_lot", @@ -7279,20 +7080,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "window_clipboard" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5793d0b08c9e6a1240fe9ab2bd8db277487bf92436fd1a6321861a90a1b0cb7e" -dependencies = [ - "clipboard-win", - "clipboard_macos", - "clipboard_wayland", - "clipboard_x11", - "raw-window-handle", - "thiserror 1.0.69", -] - [[package]] name = "windows" version = "0.61.3" @@ -7782,15 +7569,15 @@ version = "0.31.0-beta.3" source = "git+https://github.com/timon-schelling/winit?branch=graphite#739828c05de222d0851899e4441343eb14aaf922" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", + "block2", "dispatch2", "dpi 0.1.2 (git+https://github.com/timon-schelling/winit?branch=graphite)", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", + "objc2", + "objc2-app-kit", "objc2-core-foundation", "objc2-core-graphics", "objc2-core-video", - "objc2-foundation 0.3.2", + "objc2-foundation", "raw-window-handle", "smol_str", "tracing", @@ -7803,12 +7590,12 @@ name = "winit-common" version = "0.31.0-beta.3" source = "git+https://github.com/timon-schelling/winit?branch=graphite#739828c05de222d0851899e4441343eb14aaf922" dependencies = [ - "block2 0.6.2", + "block2", "dpi 0.1.2 (git+https://github.com/timon-schelling/winit?branch=graphite)", "memmap2 0.9.10", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc2-foundation", "smol_str", "tracing", "winit-core", @@ -7854,12 +7641,12 @@ version = "0.31.0-beta.3" source = "git+https://github.com/timon-schelling/winit?branch=graphite#739828c05de222d0851899e4441343eb14aaf922" dependencies = [ "bitflags 2.11.0", - "block2 0.6.2", + "block2", "dispatch2", "dpi 0.1.2 (git+https://github.com/timon-schelling/winit?branch=graphite)", - "objc2 0.6.3", + "objc2", "objc2-core-foundation", - "objc2-foundation 0.3.2", + "objc2-foundation", "objc2-ui-kit", "raw-window-handle", "serde", @@ -7885,7 +7672,7 @@ dependencies = [ "raw-window-handle", "rustix", "sctk-adwaita", - "smithay-client-toolkit 0.21.1", + "smithay-client-toolkit", "smol_str", "tracing", "wayland-backend", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index 2acd03a872..802cc6a878 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -49,7 +49,6 @@ clap = { workspace = true, features = ["derive"] } interprocess = "2.4.2" fd-lock = "4.0.4" ctrlc = "3.5.1" -window_clipboard = "0.5" # Windows-specific dependencies [target.'cfg(target_os = "windows")'.dependencies] diff --git a/desktop/src/app.rs b/desktop/src/app.rs index 3988bc41dc..1f48b438b0 100644 --- a/desktop/src/app.rs +++ b/desktop/src/app.rs @@ -9,7 +9,7 @@ use std::sync::mpsc::{Receiver, SyncSender}; use std::thread; use std::time::{Duration, Instant}; use winit::application::ApplicationHandler; -use winit::data_transfer::TypeHint; +use winit::data_transfer::{DataTransferSendBuilder, TypeHint}; use winit::dpi::PhysicalSize; use winit::event::{ElementState, MouseButton, StartCause, WindowEvent}; use winit::event_loop::run_on_demand::EventLoopExtRunOnDemand; @@ -37,6 +37,7 @@ pub(crate) struct App { window_fullscreen: bool, window_pending_drag: bool, pending_dnd_fetch: Option, + pending_clipboard_fetch: Option, input_state: InputState, ui_scale: f64, app_event_receiver: Receiver, @@ -110,6 +111,7 @@ impl App { window_fullscreen: false, window_pending_drag: false, pending_dnd_fetch: None, + pending_clipboard_fetch: None, input_state: InputState::new(), ui_scale: 1., app_event_receiver, @@ -338,16 +340,10 @@ impl App { } } DesktopFrontendMessage::ClipboardRead => { - if let Some(window) = &self.window { - let content = window.clipboard_read(); - let message = DesktopWrapperMessage::ClipboardReadResult { content }; - self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message)); - } + self.app_event_scheduler.schedule(AppEvent::ClipboardRead); } DesktopFrontendMessage::ClipboardWrite { content } => { - if let Some(window) = &mut self.window { - window.clipboard_write(content); - } + self.app_event_scheduler.schedule(AppEvent::ClipboardWrite { content }); } DesktopFrontendMessage::PointerLock => { self.input_state.lock_pointer(); @@ -470,6 +466,32 @@ impl App { self.ui_frame_received = true; } } + AppEvent::ClipboardRead => { + let result = event_loop.clipboard().and_then(|id| { + let Some(id) = id else { return Ok(None) }; + let data_transfer = event_loop.data_transfer(id)?; + if !data_transfer.has_type(&TypeHint::Plaintext) { + return Ok(None); + } + event_loop.fetch_data_transfer(id, &TypeHint::Plaintext).map(Some) + }); + match result { + Ok(Some(serial)) => self.pending_clipboard_fetch = Some(serial), + Ok(None) => self.dispatch_desktop_wrapper_message(DesktopWrapperMessage::ClipboardReadResult { content: None }), + Err(e) => { + tracing::error!("Failed to read from clipboard: {e}"); + self.dispatch_desktop_wrapper_message(DesktopWrapperMessage::ClipboardReadResult { content: None }); + } + } + } + AppEvent::ClipboardWrite { content } => { + let send_data = DataTransferSendBuilder::new(content) + .with_type(TypeHint::Plaintext, |content: &String, _| Some(content.clone())) + .build(); + if let Err(e) = event_loop.set_clipboard(send_data) { + tracing::error!("Failed to write to clipboard: {e}"); + } + } AppEvent::CursorChange(cursor) => { if let Some(window) = &mut self.window { window.set_cursor(event_loop, cursor); @@ -615,6 +637,20 @@ impl ApplicationHandler for App { Ok(serial) => self.pending_dnd_fetch = Some(serial), Err(e) => tracing::error!("Failed to fetch dropped data: {e}"), }, + WindowEvent::DataTransferReceived { serial, ref value, .. } if self.pending_clipboard_fetch == Some(serial) => match value.try_as_string() { + Ok(content) => { + self.pending_clipboard_fetch = None; + let message = DesktopWrapperMessage::ClipboardReadResult { content: Some(content) }; + self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message)); + } + Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => {} + Err(e) => { + self.pending_clipboard_fetch = None; + tracing::error!("Failed to read from clipboard: {e}"); + let message = DesktopWrapperMessage::ClipboardReadResult { content: None }; + self.app_event_scheduler.schedule(AppEvent::DesktopWrapperMessage(message)); + } + }, WindowEvent::DataTransferReceived { serial, ref value, .. } if self.pending_dnd_fetch == Some(serial) => match value.try_as_file_paths() { Ok(paths) => { self.pending_dnd_fetch = None; diff --git a/desktop/src/event.rs b/desktop/src/event.rs index 1d7a8283de..cbe0f77f3b 100644 --- a/desktop/src/event.rs +++ b/desktop/src/event.rs @@ -8,6 +8,10 @@ pub(crate) enum AppEvent { WebCommunicationInitialized, DesktopWrapperMessage(DesktopWrapperMessage), NodeGraphExecutionResult(NodeGraphExecutionResult), + ClipboardRead, + ClipboardWrite { + content: String, + }, Exit, UiCrashed, OpenFiles(Vec), diff --git a/desktop/src/window.rs b/desktop/src/window.rs index 7693719b03..6b984e0d2a 100644 --- a/desktop/src/window.rs +++ b/desktop/src/window.rs @@ -43,13 +43,6 @@ pub(crate) struct Window { #[allow(dead_code)] native_handle: native::NativeWindowImpl, custom_cursors: HashMap, - clipboard: Option, -} -impl Drop for Window { - fn drop(&mut self) { - // Clipboard must be dropped before `winit_window` - drop(self.clipboard.take()); - } } impl Window { @@ -70,12 +63,10 @@ impl Window { let winit_window = event_loop.create_window(attributes).unwrap(); let native_handle = native::NativeWindowImpl::new(winit_window.as_ref(), app_event_scheduler); - let clipboard = unsafe { window_clipboard::Clipboard::connect(&winit_window) }.ok(); Self { winit_window: winit_window.into(), native_handle, custom_cursors: HashMap::new(), - clipboard, } } @@ -208,28 +199,4 @@ impl Window { pub(crate) fn update_menu(&self, entries: Vec) { self.native_handle.update_menu(entries); } - - pub(crate) fn clipboard_read(&self) -> Option { - let Some(clipboard) = &self.clipboard else { - tracing::error!("Clipboard not available"); - return None; - }; - match clipboard.read() { - Ok(data) => Some(data), - Err(e) => { - tracing::error!("Failed to read from clipboard: {e}"); - None - } - } - } - - pub(crate) fn clipboard_write(&mut self, data: String) { - let Some(clipboard) = &mut self.clipboard else { - tracing::error!("Clipboard not available"); - return; - }; - if let Err(e) = clipboard.write(data) { - tracing::error!("Failed to write to clipboard: {e}") - } - } }