From c2b68376d3b08539a1eb1a53646e56375d9b3f14 Mon Sep 17 00:00:00 2001 From: Ferdinand Schober Date: Wed, 11 Feb 2026 17:06:09 +0100 Subject: [PATCH] update ashpd --- Cargo.lock | 20 +++++++++++++++-- input-capture/Cargo.toml | 2 +- input-capture/src/libei.rs | 44 +++++++++++++++++++------------------- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b5fcf02..380f6de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,6 +155,22 @@ dependencies = [ "zbus", ] +[[package]] +name = "ashpd" +version = "0.13.0" +source = "git+https://github.com/feschber/ashpd#f5f407e1834501579c49e7104bcaf26d5e0e52e6" +dependencies = [ + "enumflags2", + "fastrand", + "futures-channel", + "futures-util", + "serde", + "serde_repr", + "tokio", + "url", + "zbus", +] + [[package]] name = "asn1-rs" version = "0.6.2" @@ -1666,7 +1682,7 @@ dependencies = [ name = "input-capture" version = "0.3.0" dependencies = [ - "ashpd", + "ashpd 0.13.0", "async-trait", "bitflags 2.9.1", "core-foundation", @@ -1696,7 +1712,7 @@ dependencies = [ name = "input-emulation" version = "0.3.0" dependencies = [ - "ashpd", + "ashpd 0.11.0", "async-trait", "bitflags 2.9.1", "core-graphics", diff --git a/input-capture/Cargo.toml b/input-capture/Cargo.toml index 0f77eb2..989bea5 100644 --- a/input-capture/Cargo.toml +++ b/input-capture/Cargo.toml @@ -41,7 +41,7 @@ wayland-protocols-wlr = { version = "0.3.1", features = [ "client", ], optional = true } x11 = { version = "2.21.0", features = ["xlib", "xtest"], optional = true } -ashpd = { version = "0.11.0", default-features = false, features = [ +ashpd = { git = "https://github.com/feschber/ashpd", default-features = false, features = [ "tokio", ], optional = true } reis = { version = "0.5.0", features = ["tokio"], optional = true } diff --git a/input-capture/src/libei.rs b/input-capture/src/libei.rs index 697b782..3609f88 100644 --- a/input-capture/src/libei.rs +++ b/input-capture/src/libei.rs @@ -58,8 +58,8 @@ enum LibeiNotifyEvent { } #[allow(dead_code)] -pub struct LibeiInputCapture<'a> { - input_capture: Pin>>, +pub struct LibeiInputCapture { + input_capture: Pin>, capture_task: JoinHandle>, event_rx: Receiver<(Position, CaptureEvent)>, notify_capture: Sender, @@ -130,8 +130,8 @@ fn select_barriers( } async fn update_barriers( - input_capture: &InputCapture<'_>, - session: &Session<'_, InputCapture<'_>>, + input_capture: &InputCapture, + session: &Session, active_clients: &[Position], next_barrier_id: &mut NonZeroU32, ) -> Result<(Vec, HashMap), ashpd::Error> { @@ -151,9 +151,9 @@ async fn update_barriers( Ok((barriers, id_map)) } -async fn create_session<'a>( - input_capture: &'a InputCapture<'a>, -) -> std::result::Result<(Session<'a, InputCapture<'a>>, BitFlags), ashpd::Error> { +async fn create_session( + input_capture: &InputCapture, +) -> std::result::Result<(Session, BitFlags), ashpd::Error> { log::debug!("creating input capture session"); input_capture .create_session( @@ -164,8 +164,8 @@ async fn create_session<'a>( } async fn connect_to_eis( - input_capture: &InputCapture<'_>, - session: &Session<'_, InputCapture<'_>>, + input_capture: &InputCapture, + session: &Session, ) -> Result<(ei::Context, Connection, EiConvertEventStream), CaptureError> { log::debug!("connect_to_eis"); let fd = input_capture.connect_to_eis(session).await?; @@ -201,10 +201,10 @@ async fn libei_event_handler( } } -impl LibeiInputCapture<'_> { +impl LibeiInputCapture { pub async fn new() -> std::result::Result { let input_capture = Box::pin(InputCapture::new().await?); - let input_capture_ptr = input_capture.as_ref().get_ref() as *const InputCapture<'static>; + let input_capture_ptr = input_capture.as_ref().get_ref() as *const InputCapture; let first_session = Some(create_session(unsafe { &*input_capture_ptr }).await?); let (event_tx, event_rx) = mpsc::channel(1); @@ -238,10 +238,10 @@ impl LibeiInputCapture<'_> { } async fn do_capture( - input_capture: *const InputCapture<'static>, + input_capture: *const InputCapture, mut capture_event: Receiver, notify_release: Arc, - session: Option<(Session<'_, InputCapture<'_>>, BitFlags)>, + session: Option<(Session, BitFlags)>, event_tx: Sender<(Position, CaptureEvent)>, cancellation_token: CancellationToken, ) -> Result<(), CaptureError> { @@ -336,8 +336,8 @@ async fn do_capture( } async fn do_capture_session( - input_capture: &InputCapture<'_>, - session: &mut Session<'_, InputCapture<'_>>, + input_capture: &InputCapture, + session: &mut Session, event_tx: &Sender<(Position, CaptureEvent)>, active_clients: &[Position], next_barrier_id: &mut NonZeroU32, @@ -462,9 +462,9 @@ async fn do_capture_session( Ok(()) } -async fn release_capture<'a>( - input_capture: &InputCapture<'a>, - session: &Session<'a, InputCapture<'a>>, +async fn release_capture( + input_capture: &InputCapture, + session: &Session, activated: Activated, current_pos: Position, ) -> Result<(), CaptureError> { @@ -561,7 +561,7 @@ async fn handle_ei_event( } #[async_trait] -impl LanMouseInputCapture for LibeiInputCapture<'_> { +impl LanMouseInputCapture for LibeiInputCapture { async fn create(&mut self, pos: Position) -> Result<(), CaptureError> { let _ = self .notify_capture @@ -598,7 +598,7 @@ impl LanMouseInputCapture for LibeiInputCapture<'_> { } } -impl Drop for LibeiInputCapture<'_> { +impl Drop for LibeiInputCapture { fn drop(&mut self) { if !self.terminated { /* this workaround is needed until async drop is stabilized */ @@ -607,10 +607,10 @@ impl Drop for LibeiInputCapture<'_> { } } -impl Stream for LibeiInputCapture<'_> { +impl Stream for LibeiInputCapture { type Item = Result<(Position, CaptureEvent), CaptureError>; - fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll> { match self.capture_task.poll_unpin(cx) { Poll::Ready(r) => match r.expect("failed to join") { Ok(()) => Poll::Ready(None),