1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
#![deny(broken_intra_doc_links)] #![deny(missing_docs)] //! ASHPD, acronym of Aperture Science Handheld Portal Device is a Rust & [zbus](https://gitlab.freedesktop.org/zeenix/zbus) wrapper of //! the XDG portals DBus interfaces. The library aims to provide an easy way to //! interact with the various portals defined per the [specifications](https://flatpak.github.io/xdg-desktop-portal/portal-docs.html). //! //! It provides an alternative to the C library <https://github.com/flatpak/libportal>. //! //! # Examples //! //! Ask the compositor to pick a color //! ```rust,no_run //! use ashpd::desktop::screenshot::ScreenshotProxy; //! //! async fn run() -> Result<(), ashpd::Error> { //! let connection = zbus::azync::Connection::new_session().await?; //! //! let proxy = ScreenshotProxy::new(&connection).await?; //! let color = proxy.pick_color(Default::default()).await?; //! //! println!("({}, {}, {})", color.red(), color.green(), color.blue()); //! //! Ok(()) //! } //! ``` //! //! Start a PipeWire stream from the user's camera //! ```rust,no_run //! use ashpd::desktop::camera::CameraProxy; //! //! pub async fn run() -> Result<(), ashpd::Error> { //! let connection = zbus::azync::Connection::new_session().await?; //! let proxy = CameraProxy::new(&connection).await?; //! if proxy.is_camera_present().await? { //! proxy.access_camera().await?; //! //! let remote_fd = proxy.open_pipe_wire_remote().await?; //! // pass the remote fd to GStreamer for example //! } //! Ok(()) //! } //! ``` //! //! For a tour of the various portals, see the ASHPD demo application. //! //! # Optional features //! //! | Feature | Description | //! | --- | ----------- | //! | feature_gtk3 | Implement `From<Color>` for `gdk3::RGBA` | //! | | Provides `WindowIdentifier::from_window` | //! | feature_gtk4 | Implement `From<Color>` for `gdk4::RGBA` | //! | | Provides `WindowIdentifier::from_window` | #[cfg(all(all(feature = "feature_gtk3", feature = "feature_gtk4"), not(doc)))] compile_error!("You can't enable both GTK 3 & GTK 4 features at once"); /// Interact with the user's desktop such as taking a screenshot, setting a /// background or querying the user's location. pub mod desktop; /// Interact with the documents store or transfer files across apps. pub mod documents; mod error; mod window_identifier; pub use self::window_identifier::WindowIdentifier; /// Spawn commands outside the sandbox or monitor if the running application has /// received an update & install it. pub mod flatpak; mod helpers; pub use enumflags2; pub use zbus; pub use zvariant; /// Check whether the application is running inside a sandbox. /// /// **Note** The check is very stupid as is for now. pub fn is_sandboxed() -> bool { std::path::Path::new("/.flatpak-info").exists() } pub use self::error::Error;