chore(wayland): update waynest

Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
Schmarni
2025-09-30 22:32:09 +02:00
parent 2d6bc06cbe
commit 0ebfc1153e
29 changed files with 204 additions and 99 deletions

View File

@@ -10,7 +10,7 @@ use mint::Vector2;
use std::sync::Arc;
use waynest::ObjectId;
pub use waynest_protocols::server::core::wayland::wl_buffer::*;
use waynest_server::RequestDispatcher;
use waynest_server::{Client as _, RequestDispatcher};
#[derive(Debug)]
pub struct BufferUsage {
@@ -40,7 +40,7 @@ pub enum BufferBacking {
}
#[derive(Debug, RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Buffer {
pub id: ObjectId,
backing: BufferBacking,
@@ -48,8 +48,12 @@ pub struct Buffer {
impl Buffer {
#[tracing::instrument(level = "debug", skip_all)]
pub fn new(client: &mut Client, id: ObjectId, backing: BufferBacking) -> Arc<Self> {
client.insert(id, Self { id, backing })
pub fn new(
client: &mut Client,
id: ObjectId,
backing: BufferBacking,
) -> WaylandResult<Arc<Self>> {
Ok(client.insert(id, Self { id, backing })?)
}
/// Returns the tex if it was updated

View File

@@ -3,7 +3,7 @@ pub use waynest_protocols::server::core::wayland::wl_callback::*;
use waynest_server::RequestDispatcher;
#[derive(Debug, RequestDispatcher, Clone)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Callback(pub ObjectId);
/// https://wayland.app/protocols/wayland#wl_callback
impl WlCallback for Callback {

View File

@@ -4,10 +4,10 @@ use crate::wayland::{core::surface::Surface, util::ClientExt};
use waynest::ObjectId;
use waynest_protocols::server::core::wayland::wl_surface::WlSurface;
pub use waynest_protocols::server::core::wayland::{wl_compositor::*, wl_region::*};
use waynest_server::RequestDispatcher;
use waynest_server::{Client as _, RequestDispatcher};
#[derive(Debug, waynest_server::RequestDispatcher, Default)]
#[waynest(error = WaylandError)]
#[waynest(error = WaylandError, connection = crate::wayland::Client)]
pub struct Compositor;
impl WlCompositor for Compositor {
type Connection = crate::wayland::Client;
@@ -19,7 +19,7 @@ impl WlCompositor for Compositor {
_sender_id: ObjectId,
id: ObjectId,
) -> WaylandResult<()> {
let surface = client.insert(id, Surface::new(client, id));
let surface = client.insert(id, Surface::new(client, id))?;
if let Some(output) = client.display().output.get() {
surface.enter(client, id, output.id).await?;
}
@@ -35,13 +35,13 @@ impl WlCompositor for Compositor {
_sender_id: ObjectId,
id: ObjectId,
) -> WaylandResult<()> {
client.insert(id, Region { id });
client.insert(id, Region { id })?;
Ok(())
}
}
#[derive(Debug, RequestDispatcher)]
#[waynest(error = WaylandError)]
#[waynest(error = WaylandError, connection = crate::wayland::Client)]
pub struct Region {
id: ObjectId,
}

View File

@@ -4,11 +4,12 @@ use waynest::ObjectId;
use waynest_protocols::server::core::wayland::{
wl_data_device::*, wl_data_device_manager::*, wl_data_offer::WlDataOffer, wl_data_source::*,
};
use waynest_server::Client as _;
// TODO: actually implement this
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct DataDeviceManager;
impl WlDataDeviceManager for DataDeviceManager {
type Connection = Client;
@@ -19,7 +20,7 @@ impl WlDataDeviceManager for DataDeviceManager {
_sender_id: ObjectId,
id: ObjectId,
) -> WaylandResult<()> {
client.insert(id, DataSource { id });
client.insert(id, DataSource { id })?;
Ok(())
}
@@ -30,29 +31,19 @@ impl WlDataDeviceManager for DataDeviceManager {
id: ObjectId,
_seat: ObjectId,
) -> WaylandResult<()> {
client.insert(id, DataDevice);
client.insert(id, DataDevice)?;
Ok(())
}
}
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct DataSource {
id: ObjectId,
}
impl WlDataSource for DataSource {
type Connection = Client;
async fn send(
&self,
_client: &mut Self::Connection,
_sender_id: ObjectId,
_mime_type: String,
_fd: OwnedFd,
) -> WaylandResult<()> {
Ok(())
}
async fn offer(
&self,
_client: &mut Self::Connection,
@@ -82,7 +73,7 @@ impl WlDataSource for DataSource {
}
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct DataDevice;
impl WlDataDevice for DataDevice {
type Connection = Client;
@@ -119,7 +110,7 @@ impl WlDataDevice for DataDevice {
}
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct DataOffer {
id: ObjectId,
}

View File

@@ -9,7 +9,7 @@ use std::{
collections::HashSet,
io::Write,
os::{
fd::IntoRawFd,
fd::{AsFd, IntoRawFd},
unix::io::{FromRawFd, OwnedFd},
},
sync::{Arc, Weak},
@@ -68,7 +68,7 @@ impl ModifierState {
}
#[derive(waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Keyboard {
pub id: ObjectId,
focused_surface: Mutex<Weak<Surface>>,
@@ -103,7 +103,7 @@ impl Keyboard {
client,
self.id,
KeymapFormat::XkbV1,
fd,
fd.as_fd(),
keymap.len() as u32,
)
.await?;

View File

@@ -3,7 +3,7 @@ use waynest::ObjectId;
pub use waynest_protocols::server::core::wayland::wl_output::*;
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Output {
pub id: ObjectId,
pub version: u32,

View File

@@ -3,6 +3,7 @@ use crate::nodes::items::panel::Geometry;
use crate::wayland::core::surface::Surface;
use crate::wayland::{Client, WaylandResult};
use mint::Vector2;
use waynest_server::Client as _;
use std::sync::Arc;
use std::sync::Weak;
use tokio::sync::Mutex;
@@ -12,7 +13,7 @@ use waynest::ObjectId;
pub use waynest_protocols::server::core::wayland::wl_pointer::*;
#[derive(waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Pointer {
pub id: ObjectId,
version: u32,

View File

@@ -2,6 +2,7 @@ use crate::wayland::Client;
use crate::wayland::WaylandResult;
use crate::wayland::core::{keyboard::Keyboard, pointer::Pointer, surface::Surface, touch::Touch};
use mint::Vector2;
use waynest_server::Client as _;
use std::sync::Arc;
use std::sync::OnceLock;
use waynest::ObjectId;
@@ -45,7 +46,7 @@ pub enum SeatMessage {
}
#[derive(Default, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Seat {
version: u32,
pointer: OnceLock<Arc<Pointer>>,
@@ -171,7 +172,7 @@ impl WlSeat for Seat {
_sender_id: ObjectId,
id: ObjectId,
) -> WaylandResult<()> {
let pointer = client.insert(id, Pointer::new(id, self.version));
let pointer = client.insert(id, Pointer::new(id, self.version))?;
let _ = self.pointer.set(pointer);
Ok(())
}
@@ -184,7 +185,7 @@ impl WlSeat for Seat {
id: ObjectId,
) -> WaylandResult<()> {
tracing::info!("Getting keyboard");
let keyboard = client.insert(id, Keyboard::new(id));
let keyboard = client.insert(id, Keyboard::new(id))?;
let _ = self.keyboard.set(keyboard);
Ok(())
}
@@ -196,7 +197,7 @@ impl WlSeat for Seat {
_sender_id: ObjectId,
id: ObjectId,
) -> WaylandResult<()> {
let touch = client.insert(id, Touch(id));
let touch = client.insert(id, Touch(id))?;
let _ = self.touch.set(touch);
Ok(())
}

View File

@@ -2,9 +2,10 @@ use crate::wayland::{Client, WaylandResult, core::shm_pool::ShmPool};
use std::os::fd::OwnedFd;
use waynest::ObjectId;
pub use waynest_protocols::server::core::wayland::wl_shm::*;
use waynest_server::Client as _;
#[derive(Debug, waynest_server::RequestDispatcher, Default)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Shm;
impl Shm {
pub async fn advertise_formats(
@@ -30,7 +31,7 @@ impl WlShm for Shm {
fd: OwnedFd,
size: i32,
) -> WaylandResult<()> {
client.insert(pool_id, ShmPool::new(fd, size, pool_id)?);
client.insert(pool_id, ShmPool::new(fd, size, pool_id)?)?;
Ok(())
}

View File

@@ -5,13 +5,14 @@ use crate::wayland::{
};
use memmap2::{MmapOptions, RemapOptions};
use parking_lot::{Mutex, MutexGuard, RawMutex, lock_api::MappedMutexGuard};
use waynest_server::Client as _;
use std::os::fd::{IntoRawFd, OwnedFd};
use waynest::ObjectId;
use waynest_protocols::server::core::wayland::wl_shm::Format;
pub use waynest_protocols::server::core::wayland::wl_shm_pool::*;
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct ShmPool {
inner: Mutex<memmap2::MmapMut>,
id: ObjectId,
@@ -62,7 +63,7 @@ impl WlShmPool for ShmPool {
format,
);
Buffer::new(client, id, BufferBacking::Shm(params));
Buffer::new(client, id, BufferBacking::Shm(params))?;
Ok(())
}

View File

@@ -22,6 +22,7 @@ use bevy::{
use bevy_dmabuf::import::ImportedDmatexs;
use mint::Vector2;
use parking_lot::Mutex;
use waynest_server::Client as _;
use std::{
fmt::Display,
sync::{Arc, OnceLock, Weak},
@@ -90,7 +91,7 @@ impl SurfaceState {
// if returning false, don't run this callback again... just remove it
pub type OnCommitCallback = Box<dyn FnMut(&Surface, &SurfaceState) -> bool + Send + Sync>;
#[derive(waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Surface {
pub id: ObjectId,
pub surface_id: OnceLock<SurfaceId>,
@@ -376,7 +377,7 @@ impl WlSurface for Surface {
_sender_id: ObjectId,
callback_id: ObjectId,
) -> WaylandResult<()> {
let callback = client.insert(callback_id, Callback(callback_id));
let callback = client.insert(callback_id, Callback(callback_id))?;
self.state.lock().pending.frame_callbacks.push(callback);
Ok(())
}

View File

@@ -5,7 +5,7 @@ use waynest::ObjectId;
pub use waynest_protocols::server::core::wayland::wl_touch::*;
#[derive(Debug, waynest_server::RequestDispatcher)]
#[waynest(error = crate::wayland::WaylandError)]
#[waynest(error = crate::wayland::WaylandError, connection = crate::wayland::Client)]
pub struct Touch(pub ObjectId);
impl Touch {
pub async fn handle_touch_down(