use crate::ClipboardProvider; use raw_window_handle::{HasDisplayHandle, RawDisplayHandle}; use std::error::Error; pub use clipboard_wayland as wayland; pub use clipboard_x11 as x11; pub unsafe fn connect( window: &W, ) -> Result, Box> { let clipboard = match window.display_handle()?.as_raw() { RawDisplayHandle::Wayland(handle) => { Box::new(wayland::Clipboard::connect(handle.display.as_ptr())) as _ } _ => Box::new(x11::Clipboard::connect()?) as _, }; Ok(clipboard) } impl ClipboardProvider for wayland::Clipboard { fn read(&self) -> Result> { self.read() } fn write(&mut self, contents: String) -> Result<(), Box> { self.write(contents) } } impl ClipboardProvider for x11::Clipboard { fn read(&self) -> Result> { self.read().map_err(Box::from) } fn write(&mut self, contents: String) -> Result<(), Box> { self.write(contents).map_err(Box::from) } }