From 508b3fe1f1405bdb8b860d0d63e2c7adfbbd51ca Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector@hecrj.dev>
Date: Tue, 13 Feb 2024 03:14:08 +0100
Subject: Introduce `Kind` in `core::clipboard`

---
 winit/src/clipboard.rs | 64 +++++++++++++++++---------------------------------
 1 file changed, 22 insertions(+), 42 deletions(-)

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

diff --git a/winit/src/clipboard.rs b/winit/src/clipboard.rs
index a1496fa3..5237ca01 100644
--- a/winit/src/clipboard.rs
+++ b/winit/src/clipboard.rs
@@ -1,5 +1,7 @@
 //! Access the clipboard.
 
+use crate::core::clipboard::Kind;
+
 /// A buffer for short-term storage and transfer within and between
 /// applications.
 #[allow(missing_debug_implementations)]
@@ -33,46 +35,32 @@ impl Clipboard {
     }
 
     /// Reads the current content of the [`Clipboard`] as text.
-    pub fn read(&self) -> Option<String> {
+    pub fn read(&self, kind: Kind) -> Option<String> {
         match &self.state {
-            State::Connected(clipboard) => clipboard.read().ok(),
+            State::Connected(clipboard) => match kind {
+                Kind::Standard => clipboard.read().ok(),
+                Kind::Primary => clipboard.read_primary().and_then(Result::ok),
+            },
             State::Unavailable => None,
         }
     }
 
     /// Writes the given text contents to the [`Clipboard`].
-    pub fn write(&mut self, contents: String) {
+    pub fn write(&mut self, kind: Kind, 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 => {}
-        }
-    }
-
-    /// Reads the current content of primary as text.
-    pub fn read_primary(&self) -> Option<String> {
-        match &self.state {
             State::Connected(clipboard) => {
-                clipboard.read_primary().and_then(|r| r.ok())
-            }
-            State::Unavailable => None,
-        }
-    }
+                let result = match kind {
+                    Kind::Standard => clipboard.write(contents),
+                    Kind::Primary => {
+                        clipboard.write_primary(contents).unwrap_or(Ok(()))
+                    }
+                };
 
-    /// Writes the given text contents to primary.
-    pub fn write_primary(&mut self, contents: String) {
-        match &mut self.state {
-            State::Connected(clipboard) => {
-                match clipboard.write_primary(contents) {
-                    Some(Ok(())) => {}
-                    Some(Err(error)) => {
-                        log::warn!("error writing to primary: {error}");
+                match result {
+                    Ok(()) => {}
+                    Err(error) => {
+                        log::warn!("error writing to clipboard: {error}");
                     }
-                    None => {}
                 }
             }
             State::Unavailable => {}
@@ -81,19 +69,11 @@ impl Clipboard {
 }
 
 impl crate::core::Clipboard for Clipboard {
-    fn read(&self) -> Option<String> {
-        self.read()
-    }
-
-    fn write(&mut self, contents: String) {
-        self.write(contents);
-    }
-
-    fn read_primary(&self) -> Option<String> {
-        self.read_primary()
+    fn read(&self, kind: Kind) -> Option<String> {
+        self.read(kind)
     }
 
-    fn write_primary(&mut self, contents: String) {
-        self.write_primary(contents);
+    fn write(&mut self, kind: Kind, contents: String) {
+        self.write(kind, contents);
     }
 }
-- 
cgit