Merge pull request #24 from ids1024/raw-window-handle-0.6
Raw window handle 0.6
This commit is contained in:
commit
d7c9e8a2f7
13 changed files with 57 additions and 56 deletions
|
|
@ -12,11 +12,11 @@ keywords = ["clipboard", "window", "ui", "gui", "raw-window-handle"]
|
||||||
categories = ["gui"]
|
categories = ["gui"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
raw-window-handle = "0.5"
|
raw-window-handle = { version = "0.6", features = ["std"] }
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
clipboard-win = { version = "4.0", features = ["std"] }
|
clipboard-win = { version = "5.0", features = ["std"] }
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
clipboard_macos = { version = "0.1", path = "./macos" }
|
clipboard_macos = { version = "0.1", path = "./macos" }
|
||||||
|
|
@ -27,7 +27,7 @@ clipboard_wayland = { version = "0.2", path = "./wayland" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
winit = "0.28"
|
winit = "0.29"
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
use rand::distributions::{Alphanumeric, Distribution};
|
use rand::distributions::{Alphanumeric, Distribution};
|
||||||
use window_clipboard::Clipboard;
|
use window_clipboard::Clipboard;
|
||||||
use winit::{
|
use winit::{
|
||||||
event::{ElementState, Event, KeyboardInput, VirtualKeyCode, WindowEvent},
|
error::EventLoopError,
|
||||||
event_loop::{ControlFlow, EventLoop},
|
event::{ElementState, Event, KeyEvent, WindowEvent},
|
||||||
|
event_loop::EventLoop,
|
||||||
|
keyboard::Key,
|
||||||
window::WindowBuilder,
|
window::WindowBuilder,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() -> Result<(), EventLoopError> {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
|
|
||||||
let data: String = Alphanumeric
|
let data: String = Alphanumeric
|
||||||
|
|
@ -15,7 +17,7 @@ fn main() {
|
||||||
.map(char::from)
|
.map(char::from)
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let event_loop = EventLoop::new();
|
let event_loop = EventLoop::new().unwrap();
|
||||||
|
|
||||||
let window = WindowBuilder::new()
|
let window = WindowBuilder::new()
|
||||||
.with_title("Press G to start the test!")
|
.with_title("Press G to start the test!")
|
||||||
|
|
@ -23,24 +25,24 @@ fn main() {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut clipboard =
|
let mut clipboard =
|
||||||
Clipboard::connect(&window).expect("Connect to clipboard");
|
unsafe { Clipboard::connect(&window) }.expect("Connect to clipboard");
|
||||||
|
|
||||||
clipboard.write(data.clone()).unwrap();
|
clipboard.write(data.clone()).unwrap();
|
||||||
|
|
||||||
event_loop.run(move |event, _, control_flow| match event {
|
event_loop.run(move |event, elwt| match event {
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
event:
|
event:
|
||||||
WindowEvent::KeyboardInput {
|
WindowEvent::KeyboardInput {
|
||||||
input:
|
event:
|
||||||
KeyboardInput {
|
KeyEvent {
|
||||||
virtual_keycode: Some(VirtualKeyCode::G),
|
logical_key: Key::Character(c),
|
||||||
state: ElementState::Released,
|
state: ElementState::Released,
|
||||||
..
|
..
|
||||||
},
|
},
|
||||||
..
|
..
|
||||||
},
|
},
|
||||||
..
|
..
|
||||||
} => {
|
} if c == "G" => {
|
||||||
let new_data = clipboard.read().expect("Read data");
|
let new_data = clipboard.read().expect("Read data");
|
||||||
assert_eq!(data, new_data, "Data is equal");
|
assert_eq!(data, new_data, "Data is equal");
|
||||||
println!("Data copied successfully!");
|
println!("Data copied successfully!");
|
||||||
|
|
@ -48,7 +50,7 @@ fn main() {
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
event: WindowEvent::CloseRequested,
|
event: WindowEvent::CloseRequested,
|
||||||
window_id,
|
window_id,
|
||||||
} if window_id == window.id() => *control_flow = ControlFlow::Exit,
|
} if window_id == window.id() => elwt.exit(),
|
||||||
_ => *control_flow = ControlFlow::Wait,
|
_ => {}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,30 @@
|
||||||
use window_clipboard::Clipboard;
|
use window_clipboard::Clipboard;
|
||||||
use winit::{
|
use winit::{
|
||||||
|
error::EventLoopError,
|
||||||
event::{Event, WindowEvent},
|
event::{Event, WindowEvent},
|
||||||
event_loop::{ControlFlow, EventLoop},
|
event_loop::EventLoop,
|
||||||
window::WindowBuilder,
|
window::WindowBuilder,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() -> Result<(), EventLoopError> {
|
||||||
let event_loop = EventLoop::new();
|
let event_loop = EventLoop::new().unwrap();
|
||||||
|
|
||||||
let window = WindowBuilder::new()
|
let window = WindowBuilder::new()
|
||||||
.with_title("A fantastic window!")
|
.with_title("A fantastic window!")
|
||||||
.build(&event_loop)
|
.build(&event_loop)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let clipboard = Clipboard::connect(&window).expect("Connect to clipboard");
|
let clipboard =
|
||||||
|
unsafe { Clipboard::connect(&window) }.expect("Connect to clipboard");
|
||||||
|
|
||||||
event_loop.run(move |event, _, control_flow| match event {
|
event_loop.run(move |event, elwt| match event {
|
||||||
Event::MainEventsCleared => {
|
Event::AboutToWait => {
|
||||||
println!("{:?}", clipboard.read());
|
println!("{:?}", clipboard.read());
|
||||||
}
|
}
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
event: WindowEvent::CloseRequested,
|
event: WindowEvent::CloseRequested,
|
||||||
window_id,
|
window_id,
|
||||||
} if window_id == window.id() => *control_flow = ControlFlow::Exit,
|
} if window_id == window.id() => elwt.exit(),
|
||||||
_ => *control_flow = ControlFlow::Wait,
|
_ => {}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
use window_clipboard::Clipboard;
|
use window_clipboard::Clipboard;
|
||||||
use winit::{
|
use winit::{
|
||||||
|
error::EventLoopError,
|
||||||
event::{Event, WindowEvent},
|
event::{Event, WindowEvent},
|
||||||
event_loop::{ControlFlow, EventLoop},
|
event_loop::EventLoop,
|
||||||
window::WindowBuilder,
|
window::WindowBuilder,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() -> Result<(), EventLoopError> {
|
||||||
let event_loop = EventLoop::new();
|
let event_loop = EventLoop::new().unwrap();
|
||||||
|
|
||||||
let window = WindowBuilder::new()
|
let window = WindowBuilder::new()
|
||||||
.with_title("A fantastic window!")
|
.with_title("A fantastic window!")
|
||||||
|
|
@ -14,18 +15,17 @@ fn main() {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut clipboard =
|
let mut clipboard =
|
||||||
Clipboard::connect(&window).expect("Connect to clipboard");
|
unsafe { Clipboard::connect(&window) }.expect("Connect to clipboard");
|
||||||
|
|
||||||
clipboard
|
clipboard
|
||||||
.write(String::from("Hello, world!"))
|
.write(String::from("Hello, world!"))
|
||||||
.expect("Write to clipboard");
|
.expect("Write to clipboard");
|
||||||
|
|
||||||
event_loop.run(move |event, _, control_flow| match event {
|
event_loop.run(move |event, elwt| match event {
|
||||||
Event::MainEventsCleared => {}
|
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
event: WindowEvent::CloseRequested,
|
event: WindowEvent::CloseRequested,
|
||||||
window_id,
|
window_id,
|
||||||
} if window_id == window.id() => *control_flow = ControlFlow::Exit,
|
} if window_id == window.id() => elwt.exit(),
|
||||||
_ => *control_flow = ControlFlow::Wait,
|
_ => {}
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ mod platform;
|
||||||
#[path = "platform/dummy.rs"]
|
#[path = "platform/dummy.rs"]
|
||||||
mod platform;
|
mod platform;
|
||||||
|
|
||||||
use raw_window_handle::HasRawDisplayHandle;
|
use raw_window_handle::HasDisplayHandle;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub struct Clipboard {
|
pub struct Clipboard {
|
||||||
|
|
@ -54,7 +54,8 @@ pub struct Clipboard {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Clipboard {
|
impl Clipboard {
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
/// Safety: the display handle must be valid for the lifetime of `Clipboard`
|
||||||
|
pub unsafe fn connect<W: HasDisplayHandle>(
|
||||||
window: &W,
|
window: &W,
|
||||||
) -> Result<Self, Box<dyn Error>> {
|
) -> Result<Self, Box<dyn Error>> {
|
||||||
let raw = platform::connect(window)?;
|
let raw = platform::connect(window)?;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
use crate::ClipboardProvider;
|
use crate::ClipboardProvider;
|
||||||
|
|
||||||
use raw_window_handle::HasRawDisplayHandle;
|
use raw_window_handle::HasDisplayHandle;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
pub fn connect<W: HasDisplayHandle>(
|
||||||
_window: &W,
|
_window: &W,
|
||||||
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
||||||
Ok(Box::new(Clipboard::new()?))
|
Ok(Box::new(Clipboard::new()?))
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
use crate::ClipboardProvider;
|
use crate::ClipboardProvider;
|
||||||
|
|
||||||
use raw_window_handle::HasRawDisplayHandle;
|
use raw_window_handle::HasDisplayHandle;
|
||||||
|
|
||||||
struct Dummy;
|
struct Dummy;
|
||||||
|
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
pub fn connect<W: HasDisplayHandle>(
|
||||||
_window: &W,
|
_window: &W,
|
||||||
) -> Result<Box<dyn ClipboardProvider>, Box<dyn std::error::Error>> {
|
) -> Result<Box<dyn ClipboardProvider>, Box<dyn std::error::Error>> {
|
||||||
Ok(Box::new(Dummy))
|
Ok(Box::new(Dummy))
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
use crate::ClipboardProvider;
|
use crate::ClipboardProvider;
|
||||||
|
|
||||||
use raw_window_handle::HasRawDisplayHandle;
|
use raw_window_handle::HasDisplayHandle;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
pub fn connect<W: HasDisplayHandle>(
|
||||||
_window: &W,
|
_window: &W,
|
||||||
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
||||||
Ok(Box::new(Clipboard::new()?))
|
Ok(Box::new(Clipboard::new()?))
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,17 @@
|
||||||
use crate::ClipboardProvider;
|
use crate::ClipboardProvider;
|
||||||
|
|
||||||
use raw_window_handle::{HasRawDisplayHandle, RawDisplayHandle};
|
use raw_window_handle::{HasDisplayHandle, RawDisplayHandle};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub use clipboard_wayland as wayland;
|
pub use clipboard_wayland as wayland;
|
||||||
pub use clipboard_x11 as x11;
|
pub use clipboard_x11 as x11;
|
||||||
|
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
pub unsafe fn connect<W: HasDisplayHandle>(
|
||||||
window: &W,
|
window: &W,
|
||||||
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
||||||
let clipboard = match window.raw_display_handle() {
|
let clipboard = match window.display_handle()?.as_raw() {
|
||||||
RawDisplayHandle::Wayland(handle) => {
|
RawDisplayHandle::Wayland(handle) => {
|
||||||
assert!(!handle.display.is_null());
|
Box::new(wayland::Clipboard::connect(handle.display.as_ptr())) as _
|
||||||
|
|
||||||
Box::new(unsafe {
|
|
||||||
wayland::Clipboard::connect(handle.display as *mut _)
|
|
||||||
}) as _
|
|
||||||
}
|
}
|
||||||
_ => Box::new(x11::Clipboard::connect()?) as _,
|
_ => Box::new(x11::Clipboard::connect()?) as _,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
use crate::ClipboardProvider;
|
use crate::ClipboardProvider;
|
||||||
|
|
||||||
use raw_window_handle::HasRawDisplayHandle;
|
use raw_window_handle::HasDisplayHandle;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
pub fn connect<W: HasDisplayHandle>(
|
||||||
_window: &W,
|
_window: &W,
|
||||||
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
||||||
Ok(Box::new(clipboard_macos::Clipboard::new()?))
|
Ok(Box::new(clipboard_macos::Clipboard::new()?))
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
use crate::ClipboardProvider;
|
use crate::ClipboardProvider;
|
||||||
|
|
||||||
use clipboard_win::{get_clipboard_string, set_clipboard_string};
|
use clipboard_win::{get_clipboard_string, set_clipboard_string};
|
||||||
use raw_window_handle::HasRawDisplayHandle;
|
use raw_window_handle::HasDisplayHandle;
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub fn connect<W: HasRawDisplayHandle>(
|
pub fn connect<W: HasDisplayHandle>(
|
||||||
_window: &W,
|
_window: &W,
|
||||||
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
) -> Result<Box<dyn ClipboardProvider>, Box<dyn Error>> {
|
||||||
Ok(Box::new(Clipboard))
|
Ok(Box::new(Clipboard))
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,4 @@ documentation = "https://docs.rs/clipboard_wayland"
|
||||||
keywords = ["clipboard", "wayland"]
|
keywords = ["clipboard", "wayland"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
smithay-clipboard = "0.6"
|
smithay-clipboard = "0.7"
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,5 @@ documentation = "https://docs.rs/clipboard_x11"
|
||||||
keywords = ["clipboard", "x11"]
|
keywords = ["clipboard", "x11"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
x11rb = "0.11"
|
x11rb = "0.13"
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue