1#![allow(unsafe_code)]
3
4use gdk4_wayland::wayland_client::{protocol::wl_surface::WlSurface, Proxy};
5use raw_window_handle::{
6 HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle, RawWindowHandle, WaylandWindowHandle,
7};
8use wayland_backend::sys::client::Backend;
9
10#[derive(Debug, Clone)]
12pub struct HandleBox {
13 rd: RawDisplayHandle,
14 rw: RawWindowHandle,
15}
16
17impl HandleBox {
18 pub fn new(b: &Backend, s: &WlSurface) -> Self {
19 let rd = b.raw_display_handle();
20
21 let mut wh = WaylandWindowHandle::empty();
23 wh.surface = s.id().as_ptr() as *mut _;
24 let rw = RawWindowHandle::Wayland(wh);
25
26 Self { rd, rw }
27 }
28}
29
30unsafe impl HasRawDisplayHandle for HandleBox {
31 fn raw_display_handle(&self) -> RawDisplayHandle {
32 self.rd
33 }
34}
35
36unsafe impl HasRawWindowHandle for HandleBox {
37 fn raw_window_handle(&self) -> RawWindowHandle {
38 self.rw
39 }
40}
41
42unsafe impl Send for HandleBox {}
44unsafe impl Sync for HandleBox {}