diff options
author | 2021-03-10 01:59:02 +0100 | |
---|---|---|
committer | 2021-03-10 01:59:02 +0100 | |
commit | 21971e0037c2ddcb96fd48ea96332445de4137bb (patch) | |
tree | 7cc1dc9147923a45c25f70d187cdecf08ab33497 /winit | |
parent | 35425001edcb54d861a42ec6d23f9e57b37745fd (diff) | |
download | iced-21971e0037c2ddcb96fd48ea96332445de4137bb.tar.gz iced-21971e0037c2ddcb96fd48ea96332445de4137bb.tar.bz2 iced-21971e0037c2ddcb96fd48ea96332445de4137bb.zip |
Make `Clipboard` argument in `Widget` trait mutable
Diffstat (limited to 'winit')
-rw-r--r-- | winit/src/application.rs | 4 | ||||
-rw-r--r-- | winit/src/clipboard.rs | 34 |
2 files changed, 28 insertions, 10 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index 6f8cfc22..2cb2c016 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -194,7 +194,7 @@ async fn run_instance<A, E, C>( use winit::event; let surface = compositor.create_surface(&window); - let clipboard = Clipboard::connect(&window); + let mut clipboard = Clipboard::connect(&window); let mut state = State::new(&application, &window); let mut viewport_version = state.viewport_version(); @@ -237,8 +237,8 @@ async fn run_instance<A, E, C>( let statuses = user_interface.update( &events, state.cursor_position(), - clipboard.as_ref().map(|c| c as _), &mut renderer, + &mut clipboard, &mut messages, ); diff --git a/winit/src/clipboard.rs b/winit/src/clipboard.rs index 06e7c1a8..15dc989f 100644 --- a/winit/src/clipboard.rs +++ b/winit/src/clipboard.rs @@ -1,26 +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 connect(window: &winit::window::Window) -> Option<Clipboard> { - window_clipboard::Clipboard::connect(window) - .map(Clipboard) + 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 read(&self) -> Option<String> { - self.0.read().ok() + match &self.state { + State::Connected(clipboard) => clipboard.read().ok(), + State::Unavailable => None, + } } fn write(&mut self, contents: String) { - match self.0.write(contents) { - Ok(()) => {} - Err(error) => log::warn!("error writing to clipboard: {}", error), + match &mut self.state { + State::Connected(clipboard) => match clipboard.write(contents) { + Ok(()) => {} + Err(error) => { + log::warn!("error writing to clipboard: {}", error) + } + }, + State::Unavailable => {} } } } |