From f697ee10bdde9e73ec9895293a3ee8ae3f4c36aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Thu, 12 Mar 2020 07:12:02 +0100 Subject: [PATCH] Remove `clipboard_windows` and simplify modules --- Cargo.toml | 7 +- src/lib.rs | 20 ++-- src/platform/ios.rs | 38 +++++++ src/platform/macos.rs | 16 +++ src/platform/not_linux.rs | 67 ------------- src/platform/windows.rs | 18 ++++ windows/Cargo.toml | 16 --- windows/LICENSE | 201 -------------------------------------- windows/src/lib.rs | 33 ------- x11/src/error.rs | 34 +++---- 10 files changed, 100 insertions(+), 350 deletions(-) create mode 100644 src/platform/ios.rs create mode 100644 src/platform/macos.rs delete mode 100644 src/platform/not_linux.rs create mode 100644 src/platform/windows.rs delete mode 100644 windows/Cargo.toml delete mode 100644 windows/LICENSE delete mode 100644 windows/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index c0c1b7f..b64b4c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Héctor Ramón Jiménez "] edition = "2018" description = "A library to obtain clipboard access from a `raw-window-handle`" license = "MIT" -repository = "https://github.com/hecrj/iced" +repository = "https://github.com/hecrj/window_clipboard" documentation = "https://docs.rs/window_clipboard" readme = "README.md" keywords = ["clipboard", "window", "ui", "gui", "raw-window-handle"] @@ -15,12 +15,12 @@ categories = ["gui"] raw-window-handle = "0.3" [target.'cfg(windows)'.dependencies] -clipboard_windows = { version = "=0.1.0-alpha", path = "./windows" } +clipboard-win = "2.1" [target.'cfg(target_os = "macos")'.dependencies] clipboard_macos = { version = "=0.1.0-alpha", path = "./macos" } -[target.'cfg(all(unix, not(any(target_os="macos", target_os="android", target_os="emscripten"))))'.dependencies] +[target.'cfg(all(unix, not(any(target_os="macos", target_os="android", target_os="emscripten", target_os="ios"))))'.dependencies] clipboard_x11 = { version = "=0.1.0-alpha", path = "./x11" } clipboard_wayland = { version = "=0.1.0-alpha", path = "./wayland" } @@ -31,6 +31,5 @@ winit = "=0.20.0-alpha5" members = [ "macos", "wayland", - "windows", "x11", ] diff --git a/src/lib.rs b/src/lib.rs index fb8e5e0..13276cd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,16 +10,16 @@ #[path = "platform/linux.rs"] mod platform; -#[cfg(not(all( - unix, - not(any( - target_os = "ios", - target_os = "macos", - target_os = "android", - target_os = "emscripten" - )) -)))] -#[path = "platform/not_linux.rs"] +#[cfg(target_os = "windows")] +#[path = "platform/windows.rs"] +mod platform; + +#[cfg(target_os = "macos")] +#[path = "platform/macos.rs"] +mod platform; + +#[cfg(target_os = "ios")] +#[path = "platform/ios.rs"] mod platform; use raw_window_handle::HasRawWindowHandle; diff --git a/src/platform/ios.rs b/src/platform/ios.rs new file mode 100644 index 0000000..8eb0f1b --- /dev/null +++ b/src/platform/ios.rs @@ -0,0 +1,38 @@ +use crate::ClipboardProvider; + +use raw_window_handle::HasRawWindowHandle; +use std::error::Error; + +pub fn new_clipboard( + _window: &W, +) -> Result, Box> { + Ok(Box::new(clipboard_ios::Clipboard::new()?)) +} + +pub struct Clipboard; + +impl Clipboard { + pub fn new() -> Result> { + Ok(Self) + } +} + +#[derive(Debug)] +#[allow(non_camel_case_types)] +pub enum iOSClipboardError { + Unimplemented, +} + +impl std::fmt::Display for iOSClipboardError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Unimplemented") + } +} + +impl Error for iOSClipboardError {} + +impl ClipboardProvider for clipboard_ios::Clipboard { + fn read(&self) -> Result> { + Err(Box::new(clipboard_ios::iOSClipboardError::Unimplemented)) + } +} diff --git a/src/platform/macos.rs b/src/platform/macos.rs new file mode 100644 index 0000000..d178ddb --- /dev/null +++ b/src/platform/macos.rs @@ -0,0 +1,16 @@ +use crate::ClipboardProvider; + +use raw_window_handle::HasRawWindowHandle; +use std::error::Error; + +pub fn new_clipboard( + _window: &W, +) -> Result, Box> { + Ok(Box::new(clipboard_macos::Clipboard::new()?)) +} + +impl ClipboardProvider for clipboard_macos::Clipboard { + fn read(&self) -> Result> { + self.read() + } +} diff --git a/src/platform/not_linux.rs b/src/platform/not_linux.rs deleted file mode 100644 index 17d668e..0000000 --- a/src/platform/not_linux.rs +++ /dev/null @@ -1,67 +0,0 @@ -use crate::ClipboardProvider; - -use raw_window_handle::HasRawWindowHandle; -use std::error::Error; - -pub fn new_clipboard( - _window: &W, -) -> Result, Box> { - #[cfg(target_os = "windows")] - { - Ok(Box::new(clipboard_windows::Clipboard::new()?)) - } - - #[cfg(target_os = "macos")] - { - Ok(Box::new(clipboard_macos::Clipboard::new()?)) - } - - #[cfg(target_os = "ios")] - { - Ok(Box::new(clipboard_ios::Clipboard::new()?)) - } -} - -#[cfg(target_os = "windows")] -impl ClipboardProvider for clipboard_windows::Clipboard { - fn read(&self) -> Result> { - self.read() - } -} - -#[cfg(target_os = "macos")] -impl ClipboardProvider for clipboard_macos::Clipboard { - fn read(&self) -> Result> { - self.read() - } -} - - -#[cfg(target_os = "ios")] -mod clipboard_ios { - use std::error::Error; - pub struct Clipboard; - impl Clipboard { - pub fn new() -> Result> { - Ok(Self) - } - } - #[derive(Debug)] - #[allow(non_camel_case_types)] - pub enum iOSClipboardError { - Unimplemented, - } - impl std::fmt::Display for iOSClipboardError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Unimplemented") - } - } - impl Error for iOSClipboardError { } -} - -#[cfg(target_os = "ios")] -impl ClipboardProvider for clipboard_ios::Clipboard { - fn read(&self) -> Result> { - Err(Box::new(clipboard_ios::iOSClipboardError::Unimplemented)) - } -} diff --git a/src/platform/windows.rs b/src/platform/windows.rs new file mode 100644 index 0000000..9793406 --- /dev/null +++ b/src/platform/windows.rs @@ -0,0 +1,18 @@ +use crate::ClipboardProvider; + +use raw_window_handle::HasRawWindowHandle; +use clipboard_win::{get_clipboard_string, set_clipboard_string}; +use std::error::Error; + +pub fn new_clipboard( + _window: &W, +) -> Result, Box> { + Ok(Box::new(clipboard_windows::Clipboard::new()?)) +} + +impl ClipboardProvider for clipboard_windows::Clipboard { + fn fn read(&self) -> Result> { + Ok(get_clipboard_string()?) + } +} + diff --git a/windows/Cargo.toml b/windows/Cargo.toml deleted file mode 100644 index 4717e40..0000000 --- a/windows/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "clipboard_windows" -version = "0.1.0-alpha" -authors = ["Héctor Ramón Jiménez "] -edition = "2018" -description = "A library to obtain access to the Windows clipboard" -license = "Apache-2.0" -repository = "https://github.com/hecrj/window_clipboard" -documentation = "https://docs.rs/clipboard_windows" -keywords = ["clipboard", "windows"] - -[package.metadata.docs.rs] -default-target = "x86_64-pc-windows-msvc" - -[dependencies] -clipboard-win = "2.1" diff --git a/windows/LICENSE b/windows/LICENSE deleted file mode 100644 index 5c304d1..0000000 --- a/windows/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/windows/src/lib.rs b/windows/src/lib.rs deleted file mode 100644 index 9574d3e..0000000 --- a/windows/src/lib.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2016 Avraham Weinstock -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -use clipboard_win::{get_clipboard_string, set_clipboard_string}; - -use std::error::Error; - -pub struct Clipboard; - -impl Clipboard { - pub fn new() -> Result> { - Ok(Clipboard) - } - - pub fn read(&self) -> Result> { - Ok(get_clipboard_string()?) - } - - pub fn write(&mut self, data: String) -> Result<(), Box> { - Ok(set_clipboard_string(&data)?) - } -} diff --git a/x11/src/error.rs b/x11/src/error.rs index ef16c31..3e2c90b 100644 --- a/x11/src/error.rs +++ b/x11/src/error.rs @@ -1,8 +1,8 @@ -use xcb::Atom; -use xcb::base::{ ConnError, GenericError }; +use std::error::Error as StdError; use std::fmt; use std::sync::mpsc::SendError; -use std::error::Error as StdError; +use xcb::base::{ConnError, GenericError}; +use xcb::Atom; #[must_use] #[derive(Debug)] @@ -10,27 +10,24 @@ pub enum Error { Set(SendError), XcbConn(ConnError), XcbGeneric(GenericError), - Lock, Timeout, Owner, UnexpectedType(Atom), - - #[doc(hidden)] - __Unknown } impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use self::Error::*; match self { - Set(e) => write!(f, "XCB - couldn't set atom: {:?}", e), - XcbConn(e) => write!(f, "XCB connection error: {:?}", e), - XcbGeneric(e) => write!(f, "XCB generic error: {:?}", e), - Lock => write!(f, "XCB: Lock is poisoned"), - Timeout => write!(f, "Selection timed out"), - Owner => write!(f, "Failed to set new owner of XCB selection"), - UnexpectedType(target) => write!(f, "Unexpected Reply type: {}", target), - __Unknown => unreachable!() + Error::Set(e) => write!(f, "XCB - couldn't set atom: {:?}", e), + Error::XcbConn(e) => write!(f, "XCB connection error: {:?}", e), + Error::XcbGeneric(e) => write!(f, "XCB generic error: {:?}", e), + Error::Timeout => write!(f, "Selection timed out"), + Error::Owner => { + write!(f, "Failed to set new owner of XCB selection") + } + Error::UnexpectedType(target) => { + write!(f, "Unexpected Reply type: {}", target) + } } } } @@ -42,8 +39,7 @@ impl StdError for Error { Set(e) => Some(e), XcbConn(e) => Some(e), XcbGeneric(e) => Some(e), - Lock | Timeout | Owner | UnexpectedType(_) => None, - __Unknown => unreachable!() + Timeout | Owner | UnexpectedType(_) => None, } } } @@ -55,7 +51,7 @@ macro_rules! define_from { Error::$item(err) } } - } + }; } define_from!(Set from SendError);