diff --git a/src/wayland/core/compositor.rs b/src/wayland/core/compositor.rs index 658d57e..7948b55 100644 --- a/src/wayland/core/compositor.rs +++ b/src/wayland/core/compositor.rs @@ -1,8 +1,11 @@ use super::surface::WL_SURFACE_REGISTRY; -use crate::wayland::core::surface::Surface; +use crate::wayland::{core::surface::Surface, util::ClientExt}; pub use waynest::server::protocol::core::wayland::wl_compositor::*; use waynest::{ - server::{Client, Dispatcher, Result, protocol::core::wayland::wl_region::WlRegion}, + server::{ + Client, Dispatcher, Result, + protocol::core::wayland::{wl_region::WlRegion, wl_surface::WlSurface}, + }, wire::ObjectId, }; @@ -17,6 +20,9 @@ impl WlCompositor for Compositor { id: ObjectId, ) -> Result<()> { let surface = client.insert(id, Surface::new(client, id)); + if let Some(output) = client.display().output.get() { + surface.enter(client, id, output.0).await?; + } WL_SURFACE_REGISTRY.add_raw(&surface); Ok(()) diff --git a/src/wayland/display.rs b/src/wayland/display.rs index df4a0d9..f61a980 100644 --- a/src/wayland/display.rs +++ b/src/wayland/display.rs @@ -4,6 +4,7 @@ use crate::wayland::{ MessageSink, core::{ callback::{Callback, WlCallback}, + output::Output, seat::Seat, }, registry::Registry, @@ -24,6 +25,7 @@ pub struct Display { pub message_sink: MessageSink, pub pid: Option, pub seat: OnceLock>, + pub output: OnceLock>, id_counter: CounterU32, pub creation_time: Instant, } @@ -33,6 +35,7 @@ impl Display { message_sink, pid, seat: OnceLock::new(), + output: OnceLock::new(), id_counter: CounterU32::new(0xff000000), // Start at 0xff000000 to avoid conflicts with client-generated IDs creation_time: Instant::now(), } diff --git a/src/wayland/registry.rs b/src/wayland/registry.rs index 168d2f5..4add289 100644 --- a/src/wayland/registry.rs +++ b/src/wayland/registry.rs @@ -6,9 +6,9 @@ use crate::wayland::{ seat::{Seat, WlSeat}, shm::{Shm, WlShm}, }, - display::Display, dmabuf::Dmabuf, mesa_drm::MesaDrm, + util::ClientExt, xdg::wm_base::{WmBase, XdgWmBase}, }; use waynest::{ @@ -141,13 +141,7 @@ impl WlRegistry for Registry { RegistryGlobals::SEAT => { tracing::info!("Binding seat with id {}", new_id.object_id); let seat = client.insert(new_id.object_id, Seat::new()); - if let Some(display) = client.get::(ObjectId::DISPLAY) { - tracing::info!("Setting seat in display"); - let _ = display.seat.set(seat.clone()); - tracing::info!("Seat set successfully"); - } else { - tracing::warn!("No display found to set seat"); - } + let _ = client.display().seat.set(seat.clone()); seat.name(client, new_id.object_id, "theonlyseat".into()) .await?; seat.advertise_capabilities(client, new_id.object_id) @@ -161,6 +155,7 @@ impl WlRegistry for Registry { RegistryGlobals::OUTPUT => { tracing::info!("Binding output"); let output = client.insert(new_id.object_id, Output(new_id.object_id)); + let _ = client.display().output.set(output.clone()); output.advertise_outputs(client).await?; } RegistryGlobals::DMABUF => {