From 21971e0037c2ddcb96fd48ea96332445de4137bb Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Wed, 10 Mar 2021 01:59:02 +0100
Subject: Make `Clipboard` argument in `Widget` trait mutable

---
 winit/src/clipboard.rs | 34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

(limited to 'winit/src/clipboard.rs')

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 => {}
         }
     }
 }
-- 
cgit