use ashpd::desktop::screencast::{CursorMode, Screencast, SelectSourcesOptions, SourceType}; use ashpd::desktop::PersistMode; use ashpd::enumflags2::BitFlags; fn main() { let rt = tokio::runtime::Runtime::new().unwrap(); rt.block_on(async { eprintln!("1. Creating Screencast proxy..."); let proxy = match Screencast::new().await { Ok(p) => { eprintln!(" OK"); p } Err(e) => { eprintln!(" FAIL: {e}"); return; } }; eprintln!("2. Creating session..."); let session = match proxy.create_session(Default::default()).await { Ok(s) => { eprintln!(" OK"); s } Err(e) => { eprintln!(" FAIL: {e}"); return; } }; eprintln!("3. Selecting sources..."); let sources: BitFlags = SourceType::Monitor.into(); let result = proxy .select_sources( &session, SelectSourcesOptions::default() .set_cursor_mode(CursorMode::Embedded) .set_sources(sources) .set_multiple(false) .set_persist_mode(PersistMode::DoNot), ) .await; match result { Ok(_) => eprintln!(" OK"), Err(e) => { eprintln!(" FAIL: {e}"); return; } } eprintln!("4. Starting (should show dialog)..."); let response = match proxy.start(&session, None, Default::default()).await { Ok(r) => { eprintln!(" OK"); r } Err(e) => { eprintln!(" FAIL: {e}"); return; } }; match response.response() { Ok(r) => eprintln!(" Got {} stream(s)", r.streams().len()), Err(e) => eprintln!(" Response error: {e}"), } }); }