From 01fc2f128d1002b430b273dbee4392bd115a2ca1 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 28 Feb 2026 14:40:45 +0100 Subject: [PATCH 1/2] xml-to-wire: fix handling of new_id without interface --- wire/wl_registry.txt | 2 +- xml-to-wire/src/builder.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/wire/wl_registry.txt b/wire/wl_registry.txt index b951da0f..64433d32 100644 --- a/wire/wl_registry.txt +++ b/wire/wl_registry.txt @@ -2,7 +2,7 @@ request bind { name: u32, interface: str, version: u32, - id: id(object), + id: id(object) (new), } event global { diff --git a/xml-to-wire/src/builder.rs b/xml-to-wire/src/builder.rs index ec7ce457..c3438bd9 100644 --- a/xml-to-wire/src/builder.rs +++ b/xml-to-wire/src/builder.rs @@ -90,6 +90,10 @@ fn handle_file_(path: &str) -> Result<(), BuilderError> { args.next(); continue; } + if arg.ty == ArgType::NewId && arg.interface.is_none() { + writeln!(file, " interface: str,")?; + writeln!(file, " version: u32,")?; + } write!(file, " {}: ", arg.name)?; 'ty: { let ty = match arg.ty { From e8875a319950947f830e30d4bae1b89cbdb28e08 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 28 Feb 2026 14:43:32 +0100 Subject: [PATCH 2/2] wl_data_device_manager: implement version 4 --- docs/features.md | 2 +- src/ifs/ipc/wl_data_device_manager.rs | 7 ++++++- wire/wl_data_device_manager.txt | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/features.md b/docs/features.md index f6f7726d..86b0ba7f 100644 --- a/docs/features.md +++ b/docs/features.md @@ -167,7 +167,7 @@ Jay supports the following wayland protocols: | jay_tray_v1 | 1 | | | org_kde_kwin_server_decoration_manager | 1 | | | wl_compositor | 6 | | -| wl_data_device_manager | 3 | | +| wl_data_device_manager | 4 | | | wl_drm | 2 | | | wl_fixes | 1 | | | wl_output | 4 | | diff --git a/src/ifs/ipc/wl_data_device_manager.rs b/src/ifs/ipc/wl_data_device_manager.rs index 2acefb2a..d4c12b54 100644 --- a/src/ifs/ipc/wl_data_device_manager.rs +++ b/src/ifs/ipc/wl_data_device_manager.rs @@ -81,6 +81,11 @@ impl WlDataDeviceManagerRequestHandler for WlDataDeviceManager { self.client.add_client_obj(&dev)?; Ok(()) } + + fn release(&self, _req: Release, _slf: &Rc) -> Result<(), Self::Error> { + self.client.remove_obj(self)?; + Ok(()) + } } global_base!( @@ -95,7 +100,7 @@ impl Global for WlDataDeviceManagerGlobal { } fn version(&self) -> u32 { - 3 + 4 } } diff --git a/wire/wl_data_device_manager.txt b/wire/wl_data_device_manager.txt index 814c4436..b3e25530 100644 --- a/wire/wl_data_device_manager.txt +++ b/wire/wl_data_device_manager.txt @@ -6,3 +6,6 @@ request get_data_device { id: id(wl_data_device) (new), seat: id(wl_seat), } + +request release (destructor, since = 4) { +}