diff options
author | 2021-03-10 21:13:07 +0100 | |
---|---|---|
committer | 2021-03-10 21:13:07 +0100 | |
commit | 7eb512774862d44772c43f9843f586bfcfa2aa89 (patch) | |
tree | 34d64096302f59f8cb6daf35a131d8ba42f46905 /winit/src/clipboard.rs | |
parent | 939fcfe9dbe8c08a286c6328da6053b5fd577adf (diff) | |
parent | 17dcfa8faf68afe3cbad1151f41eb35230ef83e1 (diff) | |
download | iced-7eb512774862d44772c43f9843f586bfcfa2aa89.tar.gz iced-7eb512774862d44772c43f9843f586bfcfa2aa89.tar.bz2 iced-7eb512774862d44772c43f9843f586bfcfa2aa89.zip |
Merge pull request #770 from hecrj/feature/clipboard-write
Write clipboard support and `TextInput` copy and cut behavior
Diffstat (limited to 'winit/src/clipboard.rs')
-rw-r--r-- | winit/src/clipboard.rs | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/winit/src/clipboard.rs b/winit/src/clipboard.rs index 93d53b11..15dc989f 100644 --- a/winit/src/clipboard.rs +++ b/winit/src/clipboard.rs @@ -1,17 +1,44 @@ /// A buffer for short-term storage and transfer within and between /// applications. #[allow(missing_debug_implementations)] -pub struct Clipboard(window_clipboard::Clipboard); +pub struct Clipboard { + state: State, +} + +enum State { + Connected(window_clipboard::Clipboard), + Unavailable, +} impl Clipboard { /// Creates a new [`Clipboard`] for the given window. - pub fn new(window: &winit::window::Window) -> Option<Clipboard> { - window_clipboard::Clipboard::new(window).map(Clipboard).ok() + pub fn connect(window: &winit::window::Window) -> Clipboard { + let state = window_clipboard::Clipboard::connect(window) + .ok() + .map(State::Connected) + .unwrap_or(State::Unavailable); + + Clipboard { state } } } impl iced_native::Clipboard for Clipboard { - fn content(&self) -> Option<String> { - self.0.read().ok() + fn read(&self) -> Option<String> { + match &self.state { + State::Connected(clipboard) => clipboard.read().ok(), + State::Unavailable => None, + } + } + + fn write(&mut self, contents: String) { + match &mut self.state { + State::Connected(clipboard) => match clipboard.write(contents) { + Ok(()) => {} + Err(error) => { + log::warn!("error writing to clipboard: {}", error) + } + }, + State::Unavailable => {} + } } } |