//! # Wayland //! //! **Note:** Windows don't appear on Wayland until you draw/present to them. //! //! By default, Winit loads system libraries using `dlopen`. This can be //! disabled by disabling the `"wayland-dlopen"` cargo feature. //! //! ## Client-side decorations //! //! Winit provides client-side decorations by default, but the behaviour can //! be controlled with the following feature flags: //! //! * `wayland-csd-adwaita` (default). //! * `wayland-csd-adwaita-crossfont`. //! * `wayland-csd-adwaita-notitle`. use crate::event_loop::{ActiveEventLoop, EventLoop, EventLoopBuilder}; pub use crate::window::Theme; use crate::window::{Window as CoreWindow, WindowAttributes}; /// Additional methods on [`ActiveEventLoop`] that are specific to Wayland. pub trait ActiveEventLoopExtWayland { /// True if the [`ActiveEventLoop`] uses Wayland. fn is_wayland(&self) -> bool; } impl ActiveEventLoopExtWayland for dyn ActiveEventLoop + '_ { #[inline] fn is_wayland(&self) -> bool { self.as_any().downcast_ref::().is_some() } } /// Additional methods on [`EventLoop`] that are specific to Wayland. pub trait EventLoopExtWayland { /// True if the [`EventLoop`] uses Wayland. fn is_wayland(&self) -> bool; } impl EventLoopExtWayland for EventLoop { #[inline] fn is_wayland(&self) -> bool { self.event_loop.is_wayland() } } /// Additional methods on [`EventLoopBuilder`] that are specific to Wayland. pub trait EventLoopBuilderExtWayland { /// Force using Wayland. fn with_wayland(&mut self) -> &mut Self; /// Whether to allow the event loop to be created off of the main thread. /// /// By default, the window is only allowed to be created on the main /// thread, to make platform compatibility easier. fn with_any_thread(&mut self, any_thread: bool) -> &mut Self; } impl EventLoopBuilderExtWayland for EventLoopBuilder { #[inline] fn with_wayland(&mut self) -> &mut Self { self.platform_specific.forced_backend = Some(crate::platform_impl::Backend::Wayland); self } #[inline] fn with_any_thread(&mut self, any_thread: bool) -> &mut Self { self.platform_specific.any_thread = any_thread; self } } /// Additional methods on [`Window`] that are specific to Wayland. /// /// [`Window`]: crate::window::Window pub trait WindowExtWayland {} impl WindowExtWayland for dyn CoreWindow + '_ {} /// Additional methods on [`WindowAttributes`] that are specific to Wayland. pub trait WindowAttributesExtWayland { /// Build window with the given name. /// /// The `general` name sets an application ID, which should match the `.desktop` /// file distributed with your program. The `instance` is a `no-op`. /// /// For details about application ID conventions, see the /// [Desktop Entry Spec](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#desktop-file-id) fn with_name(self, general: impl Into, instance: impl Into) -> Self; } impl WindowAttributesExtWayland for WindowAttributes { #[inline] fn with_name(mut self, general: impl Into, instance: impl Into) -> Self { self.platform_specific.name = Some(crate::platform_impl::ApplicationName::new(general.into(), instance.into())); self } }