allow cancelling session creation

This commit is contained in:
Ferdinand Schober
2024-07-12 12:31:39 +02:00
parent 8908c33603
commit fa57b4ea34
4 changed files with 21 additions and 19 deletions

View File

@@ -156,7 +156,6 @@ pub async fn create(
Backend::Windows, Backend::Windows,
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
Backend::MacOs, Backend::MacOs,
Backend::Dummy,
] { ] {
match create_backend(backend).await { match create_backend(backend).await {
Ok(b) => { Ok(b) => {

View File

@@ -1,7 +1,7 @@
use ashpd::{ use ashpd::{
desktop::{ desktop::{
input_capture::{Activated, Barrier, BarrierID, Capabilities, InputCapture, Region, Zones}, input_capture::{Activated, Barrier, BarrierID, Capabilities, InputCapture, Region, Zones},
ResponseError, Session, Session,
}, },
enumflags2::BitFlags, enumflags2::BitFlags,
}; };
@@ -140,21 +140,12 @@ async fn create_session<'a>(
input_capture: &'a InputCapture<'a>, input_capture: &'a InputCapture<'a>,
) -> std::result::Result<(Session<'a>, BitFlags<Capabilities>), ashpd::Error> { ) -> std::result::Result<(Session<'a>, BitFlags<Capabilities>), ashpd::Error> {
log::debug!("creating input capture session"); log::debug!("creating input capture session");
let (session, capabilities) = loop { input_capture
match input_capture
.create_session( .create_session(
&ashpd::WindowIdentifier::default(), &ashpd::WindowIdentifier::default(),
Capabilities::Keyboard | Capabilities::Pointer | Capabilities::Touchscreen, Capabilities::Keyboard | Capabilities::Pointer | Capabilities::Touchscreen,
) )
.await .await
{
Ok(s) => break s,
Err(ashpd::Error::Response(ResponseError::Cancelled)) => continue,
o => o?,
};
};
log::debug!("capabilities: {capabilities:?}");
Ok((session, capabilities))
} }
async fn connect_to_eis( async fn connect_to_eis(

View File

@@ -99,7 +99,14 @@ async fn do_capture(
frontend_tx: &Sender<FrontendEvent>, frontend_tx: &Sender<FrontendEvent>,
release_bind: &[scancode::Linux], release_bind: &[scancode::Linux],
) -> Result<(), LanMouseCaptureError> { ) -> Result<(), LanMouseCaptureError> {
let mut capture = input_capture::create(backend).await?; /* allow cancelling capture request */
let mut capture = tokio::select! {
r = input_capture::create(backend) => {
r?
},
_ = server.cancelled() => return Ok(()),
};
let _ = frontend_tx let _ = frontend_tx
.send(FrontendEvent::CaptureStatus(Status::Enabled)) .send(FrontendEvent::CaptureStatus(Status::Enabled))
.await; .await;

View File

@@ -109,7 +109,12 @@ async fn do_emulation(
) -> Result<(), LanMouseEmulationError> { ) -> Result<(), LanMouseEmulationError> {
let backend = backend.map(|b| b.into()); let backend = backend.map(|b| b.into());
log::info!("creating input emulation..."); log::info!("creating input emulation...");
let mut emulation = input_emulation::create(backend).await?; let mut emulation = tokio::select! {
r = input_emulation::create(backend) => {
r?
}
_ = server.cancelled() => return Ok(()),
};
let _ = frontend_tx let _ = frontend_tx
.send(FrontendEvent::EmulationStatus(Status::Enabled)) .send(FrontendEvent::EmulationStatus(Status::Enabled))
.await; .await;