use std::{ fmt::Debug, hash::{Hash, Hasher}, }; use anyhow::Context as _; use uuid::Uuid; use wayland_backend::client::ObjectId; use gpui::{Bounds, DisplayId, Pixels, PlatformDisplay}; #[derive(Debug, Clone)] pub(crate) struct WaylandDisplay { /// The ID of the wl_output object pub id: ObjectId, pub name: Option, pub bounds: Bounds, } impl Hash for WaylandDisplay { fn hash(&self, state: &mut H) { self.id.hash(state); } } impl PlatformDisplay for WaylandDisplay { fn id(&self) -> DisplayId { DisplayId::new(self.id.protocol_id() as u64) } fn uuid(&self) -> anyhow::Result { let name = self .name .as_ref() .context("Wayland display does not have a name")?; Ok(Uuid::new_v5(&Uuid::NAMESPACE_DNS, name.as_bytes())) } fn bounds(&self) -> Bounds { self.bounds } }