From 0d7b45d149d0a9da7942fe7bb4f70ccee233cc58 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Mon, 8 Apr 2024 13:17:33 +0200 Subject: [PATCH] wire: attach versioning information to requests --- build/wire.rs | 33 ++++++++++++++++++++++++++-- wire/wl_data_device.txt | 2 +- wire/wl_data_offer.txt | 4 ++-- wire/wl_data_source.txt | 2 +- wire/wl_drm.txt | 2 +- wire/wl_keyboard.txt | 2 +- wire/wl_output.txt | 2 +- wire/wl_pointer.txt | 2 +- wire/wl_seat.txt | 2 +- wire/wl_shm.txt | 2 +- wire/wl_surface.txt | 8 +++---- wire/wl_touch.txt | 2 +- wire/xdg_popup.txt | 2 +- wire/xdg_positioner.txt | 6 ++--- wire/zwlr_data_control_device_v1.txt | 2 +- wire/zwlr_layer_shell_v1.txt | 2 +- wire/zwlr_layer_surface_v1.txt | 2 +- wire/zwlr_screencopy_frame_v1.txt | 2 +- wire/zwp_linux_buffer_params_v1.txt | 2 +- wire/zwp_linux_dmabuf_v1.txt | 4 ++-- 20 files changed, 57 insertions(+), 28 deletions(-) diff --git a/build/wire.rs b/build/wire.rs index ab35a052..49118699 100644 --- a/build/wire.rs +++ b/build/wire.rs @@ -52,7 +52,6 @@ struct Token<'a> { #[derive(Debug)] enum TokenKind<'a> { Ident(&'a str), - #[allow(dead_code)] Num(u32), Tree { delim: TreeDelim, @@ -233,6 +232,13 @@ struct Message { camel_name: String, id: u32, fields: Vec>, + #[allow(dead_code)] + attribs: MessageAttribs, +} + +#[derive(Debug, Default)] +struct MessageAttribs { + since: Option, } struct Parser<'a> { @@ -279,9 +285,32 @@ impl<'a> Parser<'a> { Ok(()) } + fn parse_message_attribs(&mut self, attribs: &mut MessageAttribs) -> Result<()> { + let (_, tokens) = self.expect_tree(TreeDelim::Paren)?; + let mut parser = Parser { pos: 0, tokens }; + while !parser.eof() { + let (line, name) = parser.expect_ident()?; + parser.expect_symbol(Symbol::Equals)?; + match name { + "since" => attribs.since = Some(parser.expect_number()?.1), + _ => bail!("In line {}: Unexpected attribute {}", line, name), + } + } + Ok(()) + } + fn parse_message(&mut self, id: u32) -> Result> { let (line, name) = self.expect_ident()?; let res: Result<_> = (|| { + self.not_eof()?; + let mut attribs = MessageAttribs::default(); + if let TokenKind::Tree { + delim: TreeDelim::Paren, + .. + } = self.tokens[self.pos].kind + { + self.parse_message_attribs(&mut attribs)?; + } let (_, body) = self.expect_tree(TreeDelim::Brace)?; let mut parser = Parser { pos: 0, @@ -298,6 +327,7 @@ impl<'a> Parser<'a> { camel_name: to_camel(name), id, fields, + attribs, }, }) })(); @@ -337,7 +367,6 @@ impl<'a> Parser<'a> { } } - #[allow(dead_code)] fn expect_number(&mut self) -> Result<(u32, u32)> { self.not_eof()?; let token = &self.tokens[self.pos]; diff --git a/wire/wl_data_device.txt b/wire/wl_data_device.txt index 45946cf8..e3236714 100644 --- a/wire/wl_data_device.txt +++ b/wire/wl_data_device.txt @@ -12,7 +12,7 @@ request set_selection { serial: u32, } -request release { +request release (since = 2) { } diff --git a/wire/wl_data_offer.txt b/wire/wl_data_offer.txt index 6d161f2f..9170585f 100644 --- a/wire/wl_data_offer.txt +++ b/wire/wl_data_offer.txt @@ -13,10 +13,10 @@ request receive { request destroy { } -request finish { +request finish (since = 3) { } -request set_actions { +request set_actions (since = 3) { dnd_actions: u32, preferred_action: u32, } diff --git a/wire/wl_data_source.txt b/wire/wl_data_source.txt index c540511d..4dea03b1 100644 --- a/wire/wl_data_source.txt +++ b/wire/wl_data_source.txt @@ -8,7 +8,7 @@ request destroy { } -request set_actions { +request set_actions (since = 3) { dnd_actions: u32, } diff --git a/wire/wl_drm.txt b/wire/wl_drm.txt index 2926e155..c069e9d3 100644 --- a/wire/wl_drm.txt +++ b/wire/wl_drm.txt @@ -27,7 +27,7 @@ request create_planar_buffer { stride2: i32, } -request create_prime_buffer { +request create_prime_buffer (since = 2) { id: id(wl_buffer), name: fd, width : i32, diff --git a/wire/wl_keyboard.txt b/wire/wl_keyboard.txt index cf1b5d97..eeb62f7b 100644 --- a/wire/wl_keyboard.txt +++ b/wire/wl_keyboard.txt @@ -1,6 +1,6 @@ # requests -request release { +request release (since = 3) { } diff --git a/wire/wl_output.txt b/wire/wl_output.txt index bdc3dd58..06b154bf 100644 --- a/wire/wl_output.txt +++ b/wire/wl_output.txt @@ -1,6 +1,6 @@ # requests -request release { +request release (since = 3) { } diff --git a/wire/wl_pointer.txt b/wire/wl_pointer.txt index 35bf2a32..33aeabf3 100644 --- a/wire/wl_pointer.txt +++ b/wire/wl_pointer.txt @@ -7,7 +7,7 @@ request set_cursor { hotspot_y: i32, } -request release { +request release (since = 3) { } diff --git a/wire/wl_seat.txt b/wire/wl_seat.txt index 093ba723..f3036720 100644 --- a/wire/wl_seat.txt +++ b/wire/wl_seat.txt @@ -12,7 +12,7 @@ request get_touch { id: id(wl_touch), } -request release { +request release (since = 5) { } # events diff --git a/wire/wl_shm.txt b/wire/wl_shm.txt index c25e1754..6930df47 100644 --- a/wire/wl_shm.txt +++ b/wire/wl_shm.txt @@ -6,7 +6,7 @@ request create_pool { size: i32, } -request release { +request release (since = 2) { } # events diff --git a/wire/wl_surface.txt b/wire/wl_surface.txt index 9ea545c5..219b098f 100644 --- a/wire/wl_surface.txt +++ b/wire/wl_surface.txt @@ -31,22 +31,22 @@ request set_input_region { request commit { } -request set_buffer_transform { +request set_buffer_transform (since = 2) { transform: i32, } -request set_buffer_scale { +request set_buffer_scale (since = 3) { scale: i32, } -request damage_buffer { +request damage_buffer (since = 4) { x: i32, y: i32, width: i32, height: i32, } -request offset { +request offset (since = 5) { x: i32, y: i32, } diff --git a/wire/wl_touch.txt b/wire/wl_touch.txt index 703b0548..11ec77dd 100644 --- a/wire/wl_touch.txt +++ b/wire/wl_touch.txt @@ -1,6 +1,6 @@ # requests -request release { +request release (since = 3) { } diff --git a/wire/xdg_popup.txt b/wire/xdg_popup.txt index 6690308e..a703e617 100644 --- a/wire/xdg_popup.txt +++ b/wire/xdg_popup.txt @@ -7,7 +7,7 @@ request grab { serial: u32, } -request reposition { +request reposition (since = 3) { positioner: id(xdg_positioner), token: u32, } diff --git a/wire/xdg_positioner.txt b/wire/xdg_positioner.txt index fcd115d0..f721c963 100644 --- a/wire/xdg_positioner.txt +++ b/wire/xdg_positioner.txt @@ -31,15 +31,15 @@ request set_offset { y: i32, } -request set_reactive { +request set_reactive (since = 3) { } -request set_parent_size { +request set_parent_size (since = 3) { parent_width: i32, parent_height: i32, } -request set_parent_configure { +request set_parent_configure (since = 3) { serial: u32, } diff --git a/wire/zwlr_data_control_device_v1.txt b/wire/zwlr_data_control_device_v1.txt index 0c1ccbeb..96096e85 100644 --- a/wire/zwlr_data_control_device_v1.txt +++ b/wire/zwlr_data_control_device_v1.txt @@ -8,7 +8,7 @@ request destroy { } -request set_primary_selection { +request set_primary_selection (since = 2) { source: id(zwlr_data_control_source_v1), } diff --git a/wire/zwlr_layer_shell_v1.txt b/wire/zwlr_layer_shell_v1.txt index 8099414a..7fe9f2a8 100644 --- a/wire/zwlr_layer_shell_v1.txt +++ b/wire/zwlr_layer_shell_v1.txt @@ -8,5 +8,5 @@ request get_layer_surface { namespace: str, } -request destroy { +request destroy (since = 3) { } diff --git a/wire/zwlr_layer_surface_v1.txt b/wire/zwlr_layer_surface_v1.txt index 600b3687..1d4680de 100644 --- a/wire/zwlr_layer_surface_v1.txt +++ b/wire/zwlr_layer_surface_v1.txt @@ -34,7 +34,7 @@ request ack_configure { request destroy { } -request set_layer { +request set_layer (since = 2) { layer: u32, } diff --git a/wire/zwlr_screencopy_frame_v1.txt b/wire/zwlr_screencopy_frame_v1.txt index 863f8d1a..b1336c31 100644 --- a/wire/zwlr_screencopy_frame_v1.txt +++ b/wire/zwlr_screencopy_frame_v1.txt @@ -7,7 +7,7 @@ request copy { request destroy { } -request copy_with_damage { +request copy_with_damage (since = 2) { buffer: id(wl_buffer), } diff --git a/wire/zwp_linux_buffer_params_v1.txt b/wire/zwp_linux_buffer_params_v1.txt index abbf93ce..a231c9e0 100644 --- a/wire/zwp_linux_buffer_params_v1.txt +++ b/wire/zwp_linux_buffer_params_v1.txt @@ -18,7 +18,7 @@ request create { flags: u32, } -request create_immed { +request create_immed (since = 2) { buffer_id: id(wl_buffer), width: i32, height: i32, diff --git a/wire/zwp_linux_dmabuf_v1.txt b/wire/zwp_linux_dmabuf_v1.txt index 3c6243e2..3faf9431 100644 --- a/wire/zwp_linux_dmabuf_v1.txt +++ b/wire/zwp_linux_dmabuf_v1.txt @@ -6,11 +6,11 @@ request create_params { params_id: id(zwp_linux_buffer_params_v1), } -request get_default_feedback { +request get_default_feedback (since = 4) { id: id(zwp_linux_dmabuf_feedback_v1), } -request get_surface_feedback { +request get_surface_feedback (since = 4) { id: id(zwp_linux_dmabuf_feedback_v1), surface: id(wl_surface), }