Put smithay's docs through a spell checker.
I noticed quite a few spelling errors, so I fixed a whole bunch of them.
This commit is contained in:
parent
5524f1f6bd
commit
7e4eff529e
|
@ -5,7 +5,7 @@
|
||||||
//! underlying resources are freed.
|
//! underlying resources are freed.
|
||||||
//!
|
//!
|
||||||
//! If you want to hold on to a potentially alive dmabuf without blocking the free up
|
//! If you want to hold on to a potentially alive dmabuf without blocking the free up
|
||||||
//! of the underlying resouces, you may `downgrade` a `Dmabuf` reference to a `WeakDmabuf`.
|
//! of the underlying resources, you may `downgrade` a `Dmabuf` reference to a `WeakDmabuf`.
|
||||||
//!
|
//!
|
||||||
//! This can be especially useful in resources where other parts of the stack should decide upon
|
//! This can be especially useful in resources where other parts of the stack should decide upon
|
||||||
//! the lifetime of the buffer. E.g. when you are only caching associated resources for a dmabuf.
|
//! the lifetime of the buffer. E.g. when you are only caching associated resources for a dmabuf.
|
||||||
|
@ -125,9 +125,9 @@ pub struct DmabufBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DmabufBuilder {
|
impl DmabufBuilder {
|
||||||
/// Add a plane to the construted Dmabuf
|
/// Add a plane to the constructed Dmabuf
|
||||||
///
|
///
|
||||||
/// *Note*: Each Dmabuf needs atleast one plane.
|
/// *Note*: Each Dmabuf needs at least one plane.
|
||||||
/// MAX_PLANES notes the maximum amount of planes any format may use with this implementation.
|
/// MAX_PLANES notes the maximum amount of planes any format may use with this implementation.
|
||||||
pub fn add_plane(&mut self, fd: RawFd, idx: u32, offset: u32, stride: u32, modifier: Modifier) -> bool {
|
pub fn add_plane(&mut self, fd: RawFd, idx: u32, offset: u32, stride: u32, modifier: Modifier) -> bool {
|
||||||
if self.internal.planes.len() == MAX_PLANES {
|
if self.internal.planes.len() == MAX_PLANES {
|
||||||
|
@ -158,7 +158,7 @@ impl DmabufBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Dmabuf {
|
impl Dmabuf {
|
||||||
/// Create a new Dmabuf by intializing with values from an existing buffer
|
/// Create a new Dmabuf by initializing with values from an existing buffer
|
||||||
///
|
///
|
||||||
// Note: the `src` Buffer is only used a reference for size and format.
|
// Note: the `src` Buffer is only used a reference for size and format.
|
||||||
// The contents are determined by the provided file descriptors, which
|
// The contents are determined by the provided file descriptors, which
|
||||||
|
|
|
@ -146,7 +146,7 @@ where
|
||||||
|
|
||||||
/// Change the dimensions of newly returned buffers.
|
/// Change the dimensions of newly returned buffers.
|
||||||
///
|
///
|
||||||
/// Already optained buffers are unaffected and will be cleaned up on drop.
|
/// Already obtained buffers are unaffected and will be cleaned up on drop.
|
||||||
pub fn resize(&mut self, width: u32, height: u32) {
|
pub fn resize(&mut self, width: u32, height: u32) {
|
||||||
if self.width == width && self.height == height {
|
if self.width == width && self.height == height {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -212,7 +212,7 @@ impl<A: AsRawFd + 'static> DrmDevice<A> {
|
||||||
///
|
///
|
||||||
/// - [`crtcs`](drm::control::crtc) represent scanout engines of the device pointing to one framebuffer. \
|
/// - [`crtcs`](drm::control::crtc) represent scanout engines of the device pointing to one framebuffer. \
|
||||||
/// Their responsibility is to read the data of the framebuffer and export it into an "Encoder". \
|
/// Their responsibility is to read the data of the framebuffer and export it into an "Encoder". \
|
||||||
/// The number of crtc's represent the number of independant output devices the hardware may handle.
|
/// The number of crtc's represent the number of independent output devices the hardware may handle.
|
||||||
/// - [`mode`](drm::control::Mode) describes the resolution and rate of images produced by the crtc and \
|
/// - [`mode`](drm::control::Mode) describes the resolution and rate of images produced by the crtc and \
|
||||||
/// has to be compatible with the provided `connectors`.
|
/// has to be compatible with the provided `connectors`.
|
||||||
/// - [`connectors`](drm::control::connector) - List of connectors driven by the crtc. At least one(!) connector needs to be \
|
/// - [`connectors`](drm::control::connector) - List of connectors driven by the crtc. At least one(!) connector needs to be \
|
||||||
|
@ -304,9 +304,9 @@ impl<A: AsRawFd> DevPath for A {
|
||||||
/// Events that can be generated by a DrmDevice
|
/// Events that can be generated by a DrmDevice
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum DrmEvent {
|
pub enum DrmEvent {
|
||||||
/// A vblank blank event on the provided crtc has happend
|
/// A vblank blank event on the provided crtc has happened
|
||||||
VBlank(crtc::Handle),
|
VBlank(crtc::Handle),
|
||||||
/// An error happend while processing events
|
/// An error happened while processing events
|
||||||
Error(Error),
|
Error(Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
//! It just provides a way to create framebuffers from various buffer types (mainly `DumbBuffer`s and hardware-backed gbm `BufferObject`s).
|
//! It just provides a way to create framebuffers from various buffer types (mainly `DumbBuffer`s and hardware-backed gbm `BufferObject`s).
|
||||||
//!
|
//!
|
||||||
//! Buffer management and details about the various types can be found in the [`allocator`-Module](crate::backend::allocator) and
|
//! Buffer management and details about the various types can be found in the [`allocator`-Module](crate::backend::allocator) and
|
||||||
//! renderering abstractions, which can target these buffers can be found in the [`renderer`-Module](crate::backend::renderer).
|
//! rendering abstractions, which can target these buffers can be found in the [`renderer`-Module](crate::backend::renderer).
|
||||||
|
|
||||||
pub(crate) mod device;
|
pub(crate) mod device;
|
||||||
pub(self) mod error;
|
pub(self) mod error;
|
||||||
|
|
|
@ -40,7 +40,7 @@ where
|
||||||
/// Create a new `GbmBufferedSurface` from a given compatible combination
|
/// Create a new `GbmBufferedSurface` from a given compatible combination
|
||||||
/// of a surface, an allocator and renderer formats.
|
/// of a surface, an allocator and renderer formats.
|
||||||
///
|
///
|
||||||
/// To sucessfully call this function, you need to have a renderer,
|
/// To successfully call this function, you need to have a renderer,
|
||||||
/// which can render into a Dmabuf, and a gbm allocator that can produce
|
/// which can render into a Dmabuf, and a gbm allocator that can produce
|
||||||
/// buffers of a supported format for rendering.
|
/// buffers of a supported format for rendering.
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
|
|
|
@ -292,7 +292,7 @@ pub struct PixelFormatRequirements {
|
||||||
pub color_bits: Option<u8>,
|
pub color_bits: Option<u8>,
|
||||||
/// If `true`, the color buffer must be in a floating point format. Default is `false`.
|
/// If `true`, the color buffer must be in a floating point format. Default is `false`.
|
||||||
///
|
///
|
||||||
/// Using floating points allows you to write values outside of the `[0.0, 1.0]` range.
|
/// Using floating points allows you to write values outside the `[0.0, 1.0]` range.
|
||||||
pub float_color_buffer: bool,
|
pub float_color_buffer: bool,
|
||||||
/// Minimum number of bits for the alpha in the color buffer. `None` means "don't care". The default is `None`.
|
/// Minimum number of bits for the alpha in the color buffer. `None` means "don't care". The default is `None`.
|
||||||
pub alpha_bits: Option<u8>,
|
pub alpha_bits: Option<u8>,
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
//! - Import/Export external resources to/from OpenGL
|
//! - Import/Export external resources to/from OpenGL
|
||||||
//!
|
//!
|
||||||
//! To use this module, you first need to create a [`EGLDisplay`] through a supported EGL platform
|
//! To use this module, you first need to create a [`EGLDisplay`] through a supported EGL platform
|
||||||
//! as inidicated by an implementation of the `native::EGLNativeDisplay` trait.
|
//! as indicated by an implementation of the `native::EGLNativeDisplay` trait.
|
||||||
//!
|
//!
|
||||||
//! You may bind the [`EGLDisplay`], that shall be used by clients for rendering (so pick one initialized by a fast platform)
|
//! You may bind the [`EGLDisplay`], that shall be used by clients for rendering (so pick one initialized by a fast platform)
|
||||||
//! to the [`wayland_server::Display`] of your compositor. Note only one backend may be bound to any [`Display`](wayland_server::Display) at any time.
|
//! to the [`wayland_server::Display`] of your compositor. Note only one backend may be bound to any [`Display`](wayland_server::Display) at any time.
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
//! it may also be used to initialize an [`EGLSurface`], which can be [bound](crate::backend::renderer::Bind) to some renderers.
|
//! it may also be used to initialize an [`EGLSurface`], which can be [bound](crate::backend::renderer::Bind) to some renderers.
|
||||||
//!
|
//!
|
||||||
//! Alternatively you may import [`dmabuf`](crate::backend::allocator::dmabuf)s using the display, which result
|
//! Alternatively you may import [`dmabuf`](crate::backend::allocator::dmabuf)s using the display, which result
|
||||||
//! in an [`EGLImage`], which can be rendered into by OpenGL. This is perferrable to using surfaces as the dmabuf can be
|
//! in an [`EGLImage`], which can be rendered into by OpenGL. This is preferable to using surfaces as the dmabuf can be
|
||||||
//! passed around freely making resource-management and more complex use-cases like Multi-GPU rendering easier to manage.
|
//! passed around freely making resource-management and more complex use-cases like Multi-GPU rendering easier to manage.
|
||||||
//! Renderers based on EGL may support doing this for you by allowing you to [`Bind`](crate::backend::renderer::Bind) a dmabuf directly.
|
//! Renderers based on EGL may support doing this for you by allowing you to [`Bind`](crate::backend::renderer::Bind) a dmabuf directly.
|
||||||
//!
|
//!
|
||||||
|
|
|
@ -79,7 +79,7 @@ impl<'a> EGLPlatform<'a> {
|
||||||
///
|
///
|
||||||
/// * `platform` - The platform defined in `ffi::egl::`
|
/// * `platform` - The platform defined in `ffi::egl::`
|
||||||
/// * `platform_name` - A human readable representation of the platform
|
/// * `platform_name` - A human readable representation of the platform
|
||||||
/// * `native_display` - The native display raw pointer which can be casted to `*mut c_void`
|
/// * `native_display` - The native display raw pointer which can be cast to `*mut c_void`
|
||||||
/// * `attrib_list` - A list of `ffi::EGLint` like defined in the EGL Extension
|
/// * `attrib_list` - A list of `ffi::EGLint` like defined in the EGL Extension
|
||||||
/// * `required_extensions` - The names of the required EGL Extensions for this platform
|
/// * `required_extensions` - The names of the required EGL Extensions for this platform
|
||||||
///
|
///
|
||||||
|
@ -185,7 +185,7 @@ pub unsafe trait EGLNativeSurface: Send + Sync {
|
||||||
|
|
||||||
/// Will be called to check if any internal resources will need
|
/// Will be called to check if any internal resources will need
|
||||||
/// to be recreated. Old resources must be used until `create`
|
/// to be recreated. Old resources must be used until `create`
|
||||||
/// was called again and a new surface was optained.
|
/// was called again and a new surface was obtained.
|
||||||
///
|
///
|
||||||
/// Only needs to be recreated, if this may return true.
|
/// Only needs to be recreated, if this may return true.
|
||||||
/// The default implementation always returns false.
|
/// The default implementation always returns false.
|
||||||
|
|
|
@ -455,7 +455,7 @@ impl<B: InputBackend> TouchUpEvent<B> for UnusedEvent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Trait for touch events cancelling the chain
|
/// Trait for touch events canceling the chain
|
||||||
pub trait TouchCancelEvent<B: InputBackend>: Event<B> {
|
pub trait TouchCancelEvent<B: InputBackend>: Event<B> {
|
||||||
/// [`TouchSlot`], if the device has multi-touch capabilities
|
/// [`TouchSlot`], if the device has multi-touch capabilities
|
||||||
fn slot(&self) -> Option<TouchSlot>;
|
fn slot(&self) -> Option<TouchSlot>;
|
||||||
|
@ -497,7 +497,7 @@ pub trait InputBackend: Sized {
|
||||||
type TouchUpEvent: TouchUpEvent<Self>;
|
type TouchUpEvent: TouchUpEvent<Self>;
|
||||||
/// Type representing touch events from moving
|
/// Type representing touch events from moving
|
||||||
type TouchMotionEvent: TouchMotionEvent<Self>;
|
type TouchMotionEvent: TouchMotionEvent<Self>;
|
||||||
/// Type representing cancelling of touch events
|
/// Type representing canceling of touch events
|
||||||
type TouchCancelEvent: TouchCancelEvent<Self>;
|
type TouchCancelEvent: TouchCancelEvent<Self>;
|
||||||
/// Type representing touch frame events
|
/// Type representing touch frame events
|
||||||
type TouchFrameEvent: TouchFrameEvent<Self>;
|
type TouchFrameEvent: TouchFrameEvent<Self>;
|
||||||
|
@ -532,17 +532,17 @@ pub enum InputEvent<B: InputBackend> {
|
||||||
/// The removed device
|
/// The removed device
|
||||||
device: B::Device,
|
device: B::Device,
|
||||||
},
|
},
|
||||||
/// A keyboard event occured
|
/// A keyboard event occurred
|
||||||
Keyboard {
|
Keyboard {
|
||||||
/// The keyboard event
|
/// The keyboard event
|
||||||
event: B::KeyboardKeyEvent,
|
event: B::KeyboardKeyEvent,
|
||||||
},
|
},
|
||||||
/// A relative pointer motion occured
|
/// A relative pointer motion occurred
|
||||||
PointerMotion {
|
PointerMotion {
|
||||||
/// The pointer motion event
|
/// The pointer motion event
|
||||||
event: B::PointerMotionEvent,
|
event: B::PointerMotionEvent,
|
||||||
},
|
},
|
||||||
/// An absolute pointer motion occures
|
/// An absolute pointer motion occurs
|
||||||
PointerMotionAbsolute {
|
PointerMotionAbsolute {
|
||||||
/// The absolute pointer motion event
|
/// The absolute pointer motion event
|
||||||
event: B::PointerMotionAbsoluteEvent,
|
event: B::PointerMotionAbsoluteEvent,
|
||||||
|
@ -552,7 +552,7 @@ pub enum InputEvent<B: InputBackend> {
|
||||||
/// The pointer button event
|
/// The pointer button event
|
||||||
event: B::PointerButtonEvent,
|
event: B::PointerButtonEvent,
|
||||||
},
|
},
|
||||||
/// A pointer axis was actionned
|
/// A pointer action occurred while scrolling on an axis
|
||||||
PointerAxis {
|
PointerAxis {
|
||||||
/// The pointer axis event
|
/// The pointer axis event
|
||||||
event: B::PointerAxisEvent,
|
event: B::PointerAxisEvent,
|
||||||
|
@ -577,7 +577,7 @@ pub enum InputEvent<B: InputBackend> {
|
||||||
/// The touch cancel event
|
/// The touch cancel event
|
||||||
event: B::TouchCancelEvent,
|
event: B::TouchCancelEvent,
|
||||||
},
|
},
|
||||||
/// A touch frame was emmited
|
/// A touch frame was emitted
|
||||||
///
|
///
|
||||||
/// A set of two events received on the same seat between two frames should
|
/// A set of two events received on the same seat between two frames should
|
||||||
/// be interpreted as an atomic event.
|
/// be interpreted as an atomic event.
|
||||||
|
@ -586,19 +586,19 @@ pub enum InputEvent<B: InputBackend> {
|
||||||
event: B::TouchFrameEvent,
|
event: B::TouchFrameEvent,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A tablet tool axis was emited
|
/// A tablet tool axis was emitted
|
||||||
TabletToolAxis {
|
TabletToolAxis {
|
||||||
/// The tablet tool axis event
|
/// The tablet tool axis event
|
||||||
event: B::TabletToolAxisEvent,
|
event: B::TabletToolAxisEvent,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A tablet tool proximity was emited
|
/// A tablet tool proximity was emitted
|
||||||
TabletToolProximity {
|
TabletToolProximity {
|
||||||
/// The tablet tool proximity event
|
/// The tablet tool proximity event
|
||||||
event: B::TabletToolProximityEvent,
|
event: B::TabletToolProximityEvent,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A tablet tool tip event was emited
|
/// A tablet tool tip event was emitted
|
||||||
TabletToolTip {
|
TabletToolTip {
|
||||||
/// The tablet tool axis event
|
/// The tablet tool axis event
|
||||||
event: B::TabletToolTipEvent,
|
event: B::TabletToolTipEvent,
|
||||||
|
|
|
@ -16,7 +16,7 @@ pub struct TabletToolDescriptor {
|
||||||
pub capabilitys: TabletToolCapabilitys,
|
pub capabilitys: TabletToolCapabilitys,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Describes the physical type of a tool. The physical type of a tool generally defines its base usage.
|
/// Describes the physical type of tool. The physical type of tool generally defines its base usage.
|
||||||
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
|
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
|
||||||
pub enum TabletToolType {
|
pub enum TabletToolType {
|
||||||
/// A generic pen.
|
/// A generic pen.
|
||||||
|
|
|
@ -9,9 +9,9 @@
|
||||||
//!
|
//!
|
||||||
//! ### Session management
|
//! ### Session management
|
||||||
//!
|
//!
|
||||||
//! Session management relates to mechanisms allowing the compositor to access the ressources
|
//! Session management relates to mechanisms allowing the compositor to access the resources
|
||||||
//! it needs to function. It contains interaction with the login manager if any ((e)logind or
|
//! it needs to function. It contains interaction with the login manager if any ((e)logind or
|
||||||
//! seatd), as well as releasing thoses ressources when TTY-switching. It is handled by the
|
//! seatd), as well as releasing those resources when TTY-switching. It is handled by the
|
||||||
//! [`session`] module, gated by the `backend_session` cargo feature. You will generally need
|
//! [`session`] module, gated by the `backend_session` cargo feature. You will generally need
|
||||||
//! it to run your compositor directly on a TTY.
|
//! it to run your compositor directly on a TTY.
|
||||||
//!
|
//!
|
||||||
|
|
|
@ -163,7 +163,7 @@ pub trait Frame {
|
||||||
/// If called outside this operation may error-out, do nothing or modify future rendering results in any way.
|
/// If called outside this operation may error-out, do nothing or modify future rendering results in any way.
|
||||||
fn clear(&mut self, color: [f32; 4]) -> Result<(), Self::Error>;
|
fn clear(&mut self, color: [f32; 4]) -> Result<(), Self::Error>;
|
||||||
/// Render a texture to the current target using given projection matrix and alpha.
|
/// Render a texture to the current target using given projection matrix and alpha.
|
||||||
/// The given verticies are used to source the texture. This is mostly useful for cropping the texture.
|
/// The given vertices are used to source the texture. This is mostly useful for cropping the texture.
|
||||||
fn render_texture(
|
fn render_texture(
|
||||||
&mut self,
|
&mut self,
|
||||||
texture: &Self::TextureId,
|
texture: &Self::TextureId,
|
||||||
|
@ -257,7 +257,7 @@ pub trait Renderer {
|
||||||
/// Initialize a rendering context on the current rendering target with given dimensions and transformation.
|
/// Initialize a rendering context on the current rendering target with given dimensions and transformation.
|
||||||
///
|
///
|
||||||
/// This function *may* error, if:
|
/// This function *may* error, if:
|
||||||
/// - The given dimensions are unsuppored (too large) for this renderer
|
/// - The given dimensions are unsupported (too large) for this renderer
|
||||||
/// - The given Transformation is not supported by the renderer (`Transform::Normal` is always supported).
|
/// - The given Transformation is not supported by the renderer (`Transform::Normal` is always supported).
|
||||||
/// - This renderer implements `Bind`, no target was bound *and* has no default target.
|
/// - This renderer implements `Bind`, no target was bound *and* has no default target.
|
||||||
/// - (Renderers not implementing `Bind` always have a default target.)
|
/// - (Renderers not implementing `Bind` always have a default target.)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
//!
|
//!
|
||||||
//! The session may be used to open devices manually through the [`Session`] interface
|
//! The session may be used to open devices manually through the [`Session`] interface
|
||||||
//! or be passed to other objects that need it to open devices themselves.
|
//! or be passed to other objects that need it to open devices themselves.
|
||||||
//! The [`AutoSession`] is clonable
|
//! The [`AutoSession`] is cloneable
|
||||||
//! and may be passed to multiple devices easily.
|
//! and may be passed to multiple devices easily.
|
||||||
//!
|
//!
|
||||||
//! Examples for those are e.g. the [`LibinputInputBackend`](crate::backend::libinput::LibinputInputBackend)
|
//! Examples for those are e.g. the [`LibinputInputBackend`](crate::backend::libinput::LibinputInputBackend)
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
//! Session handling in Smithay is done through a pair of types that each session provider implements.
|
//! Session handling in Smithay is done through a pair of types that each session provider implements.
|
||||||
//!
|
//!
|
||||||
//! The first is a handle implementing the [`Session`] trait, which allows you to request the opening
|
//! The first is a handle implementing the [`Session`] trait, which allows you to request the opening
|
||||||
//! of devices, a VT change, or informations about the session state.
|
//! of devices, a VT change, or information about the session state.
|
||||||
//!
|
//!
|
||||||
//! The second is a notifier which informs you when the session is enabled or disabled by the system.
|
//! The second is a notifier which informs you when the session is enabled or disabled by the system.
|
||||||
//! This notifier takes the form of a [`calloop`] event source, but it does not generates any event
|
//! This notifier takes the form of a [`calloop`] event source, but it does not generates any event
|
||||||
|
|
|
@ -644,7 +644,7 @@ impl InputBackend for WinitInputBackend {
|
||||||
/// Processes new events of the underlying event loop and calls the provided callback.
|
/// Processes new events of the underlying event loop and calls the provided callback.
|
||||||
///
|
///
|
||||||
/// You need to periodically call this function to keep the underlying event loop and
|
/// You need to periodically call this function to keep the underlying event loop and
|
||||||
/// [`WinitWindow`] active. Otherwise the window may no respond to user interaction.
|
/// [`WinitWindow`] active. Otherwise the window may not respond to user interaction.
|
||||||
///
|
///
|
||||||
/// Returns an error if the [`WinitWindow`] the window has been closed. Calling
|
/// Returns an error if the [`WinitWindow`] the window has been closed. Calling
|
||||||
/// `dispatch_new_events` again after the [`WinitWindow`] has been closed is considered an
|
/// `dispatch_new_events` again after the [`WinitWindow`] has been closed is considered an
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
//! as `Rc` and `Arc` and the synchronization they require, [`calloop`] allows you to provide a mutable
|
//! as `Rc` and `Arc` and the synchronization they require, [`calloop`] allows you to provide a mutable
|
||||||
//! reference to a value, that will be passed down to most callbacks (possibly under the form of a
|
//! reference to a value, that will be passed down to most callbacks (possibly under the form of a
|
||||||
//! [`DispatchData`](::wayland_server::DispatchData) for wayland-related callbacks). This structure provides
|
//! [`DispatchData`](::wayland_server::DispatchData) for wayland-related callbacks). This structure provides
|
||||||
//! an easy access to a centralized mutable state without synchronization (as the callback invocation is
|
//! easy access to a centralized mutable state without synchronization (as the callback invocation is
|
||||||
//! *always* sequential), and is the recommended way to of structuring your compositor.
|
//! *always* sequential), and is the recommended way to of structuring your compositor.
|
||||||
//!
|
//!
|
||||||
//! Several objects, in particular on the wayland clients side, can exist as multiple instances where each
|
//! Several objects, in particular on the wayland clients side, can exist as multiple instances where each
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
//!
|
//!
|
||||||
//! This mechanism allows inter-module communication, by letting your modules
|
//! This mechanism allows inter-module communication, by letting your modules
|
||||||
//! register callbacks to listen for events generated by other modules. This
|
//! register callbacks to listen for events generated by other modules. This
|
||||||
//! signaling mechanism is synchronous and non-threadsafe. If you need
|
//! signaling mechanism is synchronous and non-thread safe. If you need
|
||||||
//! ascynchronous threadsafe communication, instead consider relying on channels.
|
//! asynchronous thread safe communication, instead consider relying on channels.
|
||||||
//!
|
//!
|
||||||
//! The whole mechanism is built on the [`Signaler`] type.
|
//! The whole mechanism is built on the [`Signaler`] type.
|
||||||
//! It serves both as a message sending facility and a way to register new callbacks
|
//! It serves both as a message sending facility and a way to register new callbacks
|
||||||
|
|
|
@ -32,7 +32,7 @@ use downcast_rs::{impl_downcast, Downcast};
|
||||||
|
|
||||||
use crate::wayland::Serial;
|
use crate::wayland::Serial;
|
||||||
|
|
||||||
/// Trait represening a value that can be used in double-buffered storage
|
/// Trait representing a value that can be used in double-buffered storage
|
||||||
///
|
///
|
||||||
/// The type needs to implement the [`Default`] trait, which will be used
|
/// The type needs to implement the [`Default`] trait, which will be used
|
||||||
/// to initialize. You further need to provide two methods:
|
/// to initialize. You further need to provide two methods:
|
||||||
|
@ -46,14 +46,14 @@ use crate::wayland::Serial;
|
||||||
/// current state.
|
/// current state.
|
||||||
///
|
///
|
||||||
/// In most cases, this method will simply produce a copy of the pending state,
|
/// In most cases, this method will simply produce a copy of the pending state,
|
||||||
/// but you might need additionnal logic in some cases, such as for handling
|
/// but you might need additional logic in some cases, such as for handling
|
||||||
/// non-cloneable resources (which thus need to be moved into the produce value).
|
/// non-cloneable resources (which thus need to be moved into the produce value).
|
||||||
///
|
///
|
||||||
/// Then at some point the [`Cacheable::merge_into`] method of your type will be
|
/// Then at some point the [`Cacheable::merge_into`] method of your type will be
|
||||||
/// invoked. In this method, `self` acts as the update that should be merged into
|
/// invoked. In this method, `self` acts as the update that should be merged into
|
||||||
/// the current state provided as argument. In simple cases, the action would just
|
/// the current state provided as argument. In simple cases, the action would just
|
||||||
/// be to copy `self` into the current state, but mre complex cases require
|
/// be to copy `self` into the current state, but more complex cases require
|
||||||
/// additionnal logic.
|
/// additional logic.
|
||||||
pub trait Cacheable: Default {
|
pub trait Cacheable: Default {
|
||||||
/// Produce a new state to be cached from the pending state
|
/// Produce a new state to be cached from the pending state
|
||||||
fn commit(&mut self) -> Self;
|
fn commit(&mut self) -> Self;
|
||||||
|
@ -117,7 +117,7 @@ impl<T: Cacheable + 'static> Cache for RefCell<CachedState<T>> {
|
||||||
/// A typemap-like container for double-buffered values
|
/// A typemap-like container for double-buffered values
|
||||||
///
|
///
|
||||||
/// All values inserted into this container must implement the [`Cacheable`] trait,
|
/// All values inserted into this container must implement the [`Cacheable`] trait,
|
||||||
/// which defines their buffering semantics. They futhermore must be `Send` as the surface state
|
/// which defines their buffering semantics. They furthermore must be `Send` as the surface state
|
||||||
/// can be accessed from multiple threads (but `Sync` is not required, the surface internally synchronizes
|
/// can be accessed from multiple threads (but `Sync` is not required, the surface internally synchronizes
|
||||||
/// access to its state).
|
/// access to its state).
|
||||||
///
|
///
|
||||||
|
@ -130,7 +130,7 @@ impl<T: Cacheable + 'static> Cache for RefCell<CachedState<T>> {
|
||||||
/// stored.
|
/// stored.
|
||||||
///
|
///
|
||||||
/// This contained has [`RefCell`]-like semantics: values of multiple stored types can be accessed at the
|
/// This contained has [`RefCell`]-like semantics: values of multiple stored types can be accessed at the
|
||||||
/// same time. The stored values are initialized lazyly the first time `current()` or `pending()` are
|
/// same time. The stored values are initialized lazily the first time `current()` or `pending()` are
|
||||||
/// invoked with this type as argument.
|
/// invoked with this type as argument.
|
||||||
pub struct MultiCache {
|
pub struct MultiCache {
|
||||||
caches: appendlist::AppendList<Box<dyn Cache + Send>>,
|
caches: appendlist::AppendList<Box<dyn Cache + Send>>,
|
||||||
|
@ -164,7 +164,7 @@ impl MultiCache {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Acces the pending state associated with type `T`
|
/// Access the pending state associated with type `T`
|
||||||
pub fn pending<T: Cacheable + Send + 'static>(&self) -> RefMut<'_, T> {
|
pub fn pending<T: Cacheable + Send + 'static>(&self) -> RefMut<'_, T> {
|
||||||
RefMut::map(self.find_or_insert::<T>().borrow_mut(), |cs| &mut cs.pending)
|
RefMut::map(self.find_or_insert::<T>().borrow_mut(), |cs| &mut cs.pending)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
//! ## Why use this implementation
|
//! ## Why use this implementation
|
||||||
//!
|
//!
|
||||||
//! This implementation does a simple job: it stores in a coherent way the state of
|
//! This implementation does a simple job: it stores in a coherent way the state of
|
||||||
//! surface trees with subsurfaces, to provide you a direct access to the tree
|
//! surface trees with subsurfaces, to provide you direct access to the tree
|
||||||
//! structure and all surface attributes, and handles the application of double-buffered
|
//! structure and all surface attributes, and handles the application of double-buffered
|
||||||
//! state.
|
//! state.
|
||||||
//!
|
//!
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
//! need to display the subsurface tree.
|
//! need to display the subsurface tree.
|
||||||
//!
|
//!
|
||||||
//! This implementation will not do anything more than present you the metadata specified by the
|
//! This implementation will not do anything more than present you the metadata specified by the
|
||||||
//! client in a coherent and practical way. All the logic regarding to drawing itself, and
|
//! client in a coherent and practical way. All the logic regarding drawing itself, and
|
||||||
//! the positioning of windows (surface trees) one relative to another is out of its scope.
|
//! the positioning of windows (surface trees) one relative to another is out of its scope.
|
||||||
//!
|
//!
|
||||||
//! ## How to use it
|
//! ## How to use it
|
||||||
|
|
|
@ -185,7 +185,7 @@ pub(crate) struct Transaction {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Transaction {
|
impl Transaction {
|
||||||
/// Computes the global state of the transaction wrt its blockers
|
/// Computes the global state of the transaction with regard to its blockers
|
||||||
///
|
///
|
||||||
/// The logic is:
|
/// The logic is:
|
||||||
///
|
///
|
||||||
|
|
|
@ -52,7 +52,7 @@ pub enum Location {
|
||||||
After,
|
After,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Possible actions to do after handling a node diring tree traversal
|
/// Possible actions to do after handling a node during tree traversal
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum TraversalAction<T> {
|
pub enum TraversalAction<T> {
|
||||||
/// Traverse its children as well, providing them the data T
|
/// Traverse its children as well, providing them the data T
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
//! Using these two functions is enough for your clients to be able to interact with each other using
|
//! Using these two functions is enough for your clients to be able to interact with each other using
|
||||||
//! the data devices.
|
//! the data devices.
|
||||||
//!
|
//!
|
||||||
//! The module also provides additionnal mechanisms allowing your compositor to see and interact with
|
//! The module also provides additional mechanisms allowing your compositor to see and interact with
|
||||||
//! the contents of the data device:
|
//! the contents of the data device:
|
||||||
//!
|
//!
|
||||||
//! - You can provide a callback closure to [`init_data_device`]
|
//! - You can provide a callback closure to [`init_data_device`]
|
||||||
|
@ -83,7 +83,7 @@ pub enum DataDeviceEvent {
|
||||||
/// The data source provided by the client
|
/// The data source provided by the client
|
||||||
///
|
///
|
||||||
/// If it is `None`, this means the DnD is restricted to surfaces of the
|
/// If it is `None`, this means the DnD is restricted to surfaces of the
|
||||||
/// same client and the client will manage data transfert by itself.
|
/// same client and the client will manage data transfer by itself.
|
||||||
source: Option<wl_data_source::WlDataSource>,
|
source: Option<wl_data_source::WlDataSource>,
|
||||||
/// The icon the client requested to be used to be associated with the cursor icon
|
/// The icon the client requested to be used to be associated with the cursor icon
|
||||||
/// during the drag'n'drop.
|
/// during the drag'n'drop.
|
||||||
|
@ -93,7 +93,7 @@ pub enum DataDeviceEvent {
|
||||||
///
|
///
|
||||||
/// At this point, any pointer icon should be removed.
|
/// At this point, any pointer icon should be removed.
|
||||||
///
|
///
|
||||||
/// Note that this event will only be genrated for client-initiated drag'n'drop session.
|
/// Note that this event will only be generated for client-initiated drag'n'drop session.
|
||||||
DnDDropped,
|
DnDDropped,
|
||||||
/// A client requested to read the server-set selection
|
/// A client requested to read the server-set selection
|
||||||
SendSelection {
|
SendSelection {
|
||||||
|
@ -327,7 +327,7 @@ pub fn set_data_device_selection(seat: &Seat, mime_types: Vec<String>) {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Start a drag'n'drop from a ressource controlled by the compositor
|
/// Start a drag'n'drop from a resource controlled by the compositor
|
||||||
///
|
///
|
||||||
/// You'll receive events generated by the interaction of clients with your
|
/// You'll receive events generated by the interaction of clients with your
|
||||||
/// drag'n'drop in the provided callback. See [`ServerDndEvent`] for details about
|
/// drag'n'drop in the provided callback. See [`ServerDndEvent`] for details about
|
||||||
|
|
|
@ -22,7 +22,7 @@ pub enum ServerDndEvent {
|
||||||
Action(DndAction),
|
Action(DndAction),
|
||||||
/// The DnD resource was dropped by the user
|
/// The DnD resource was dropped by the user
|
||||||
///
|
///
|
||||||
/// After that, the client can still interract with your ressource
|
/// After that, the client can still interact with your resource
|
||||||
Dropped,
|
Dropped,
|
||||||
/// The Dnd was cancelled
|
/// The Dnd was cancelled
|
||||||
///
|
///
|
||||||
|
|
|
@ -82,11 +82,11 @@ impl ExplicitBufferRelease {
|
||||||
/// An explicit synchronization state
|
/// An explicit synchronization state
|
||||||
///
|
///
|
||||||
/// The client is not required to fill both. `acquire` being `None` means that you don't need to wait
|
/// The client is not required to fill both. `acquire` being `None` means that you don't need to wait
|
||||||
/// before acessing the buffer, `release` being `None` means that the client does not require additionnal
|
/// before accessing the buffer, `release` being `None` means that the client does not require additional
|
||||||
/// signaling that you are finished (you still need to send `wl_buffer.release`).
|
/// signaling that you are finished (you still need to send `wl_buffer.release`).
|
||||||
///
|
///
|
||||||
/// When processing the current state, the whould [`Option::take`] the values from it. Otherwise they'll
|
/// When processing the current state, [`Option::take`] the values from it. Otherwise they'll be
|
||||||
/// be treated as unused and released when overwritten by the next client commit.
|
/// treated as unused and released when overwritten by the next client commit.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ExplicitSyncState {
|
pub struct ExplicitSyncState {
|
||||||
/// An acquire `dma_fence` object, that you should wait on before accessing the contents of the
|
/// An acquire `dma_fence` object, that you should wait on before accessing the contents of the
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
//!
|
//!
|
||||||
//! Some of these modules require you to provide a callback that is invoked for some
|
//! Some of these modules require you to provide a callback that is invoked for some
|
||||||
//! client requests that your logic needs to handle. In most cases these callback
|
//! client requests that your logic needs to handle. In most cases these callback
|
||||||
//! are given as input an enum specifying the event that occured, as well as the
|
//! are given as input an enum specifying the event that occurred, as well as the
|
||||||
//! [`DispatchData`](wayland_server::DispatchData) from `wayland_server`.
|
//! [`DispatchData`](wayland_server::DispatchData) from `wayland_server`.
|
||||||
//!
|
//!
|
||||||
//! ## Provided helpers
|
//! ## Provided helpers
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
//! Following this, the [`shell`] module contains the logic allowing clients to use their
|
//! Following this, the [`shell`] module contains the logic allowing clients to use their
|
||||||
//! surface to build concrete windows with the usual interactions. Different kind of shells
|
//! surface to build concrete windows with the usual interactions. Different kind of shells
|
||||||
//! exist, but in general you will want to support at least the [`xdg`](shell::xdg) variant,
|
//! exist, but in general you will want to support at least the [`xdg`](shell::xdg) variant,
|
||||||
//! which is the standart used by most applications.
|
//! which is the standard used by most applications.
|
||||||
//!
|
//!
|
||||||
//! Then, the [`seat`] module contains logic related to input handling. These helpers are used
|
//! Then, the [`seat`] module contains logic related to input handling. These helpers are used
|
||||||
//! to forward input (such as pointer action or keystrokes) to clients, and manage the input
|
//! to forward input (such as pointer action or keystrokes) to clients, and manage the input
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
//! The [`shm`] module provides the necessary logic for client to provide buffers defining the
|
//! The [`shm`] module provides the necessary logic for client to provide buffers defining the
|
||||||
//! contents of their windows using shared memory. This is the main mechanism used by clients
|
//! contents of their windows using shared memory. This is the main mechanism used by clients
|
||||||
//! that are not hardware accelerated. As a complement, the [`dmabuf`] module provides support
|
//! that are not hardware accelerated. As a complement, the [`dmabuf`] module provides support
|
||||||
//! hardware-accelerated clients; it is tighly linked to the
|
//! hardware-accelerated clients; it is tightly linked to the
|
||||||
//! [`backend::allocator`](crate::backend::allocator) module.
|
//! [`backend::allocator`](crate::backend::allocator) module.
|
||||||
//!
|
//!
|
||||||
//! The [`output`] module helps forwarding to clients information about the display monitors that
|
//! The [`output`] module helps forwarding to clients information about the display monitors that
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//! XDG Output advertising capabilities
|
//! XDG Output advertising capabilities
|
||||||
//!
|
//!
|
||||||
//! This protocol is ment for describing outputs in a way
|
//! This protocol is meant for describing outputs in a way
|
||||||
//! which is more in line with the concept of an output on desktop oriented systems.
|
//! which is more in line with the concept of an output on desktop oriented systems.
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
|
|
|
@ -162,7 +162,7 @@ impl Seat {
|
||||||
.map(|arc| Seat { arc })
|
.map(|arc| Seat { arc })
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Acces the `UserDataMap` associated with this `Seat`
|
/// Access the `UserDataMap` associated with this `Seat`
|
||||||
pub fn user_data(&self) -> &UserDataMap {
|
pub fn user_data(&self) -> &UserDataMap {
|
||||||
&self.arc.user_data
|
&self.arc.user_data
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ impl PointerHandle {
|
||||||
self.inner.borrow_mut().grab = GrabStatus::Active(serial, Box::new(grab));
|
self.inner.borrow_mut().grab = GrabStatus::Active(serial, Box::new(grab));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove any current grab on this pointer, reseting it to the default behavior
|
/// Remove any current grab on this pointer, resetting it to the default behavior
|
||||||
pub fn unset_grab(&self) {
|
pub fn unset_grab(&self) {
|
||||||
self.inner.borrow_mut().grab = GrabStatus::None;
|
self.inner.borrow_mut().grab = GrabStatus::None;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
//! as a global handler for `wl_shell`. This protocol is deprecated in favor of `xdg_shell`,
|
//! as a global handler for `wl_shell`. This protocol is deprecated in favor of `xdg_shell`,
|
||||||
//! thus this module is provided as a compatibility layer with older clients. As a consequence,
|
//! thus this module is provided as a compatibility layer with older clients. As a consequence,
|
||||||
//! you can as a compositor-writer decide to only support its functionality in a best-effort
|
//! you can as a compositor-writer decide to only support its functionality in a best-effort
|
||||||
//! maneer: as this global is part of the core protocol, you are still required to provide
|
//! manner: as this global is part of the core protocol, you are still required to provide
|
||||||
//! some support for it.
|
//! some support for it.
|
||||||
//!
|
//!
|
||||||
//! ## Why use this implementation
|
//! ## Why use this implementation
|
||||||
|
@ -159,7 +159,7 @@ pub enum ShellSurfaceKind {
|
||||||
parent: wl_surface::WlSurface,
|
parent: wl_surface::WlSurface,
|
||||||
/// Location relative to the parent
|
/// Location relative to the parent
|
||||||
location: Point<i32, Logical>,
|
location: Point<i32, Logical>,
|
||||||
/// Wether this window should be marked as inactive
|
/// Weather this window should be marked as inactive
|
||||||
inactive: bool,
|
inactive: bool,
|
||||||
},
|
},
|
||||||
/// Fullscreen surface, covering an entire output
|
/// Fullscreen surface, covering an entire output
|
||||||
|
@ -181,7 +181,7 @@ pub enum ShellSurfaceKind {
|
||||||
/// The serial of the input event triggering the creation of this
|
/// The serial of the input event triggering the creation of this
|
||||||
/// popup
|
/// popup
|
||||||
serial: Serial,
|
serial: Serial,
|
||||||
/// Wether this popup should be marked as inactive
|
/// Weather this popup should be marked as inactive
|
||||||
inactive: bool,
|
inactive: bool,
|
||||||
/// Location of the popup relative to its parent
|
/// Location of the popup relative to its parent
|
||||||
location: Point<i32, Logical>,
|
location: Point<i32, Logical>,
|
||||||
|
|
|
@ -183,11 +183,11 @@ xdg_role!(
|
||||||
///
|
///
|
||||||
/// Unmapping an xdg_toplevel means that the surface cannot be shown
|
/// Unmapping an xdg_toplevel means that the surface cannot be shown
|
||||||
/// by the compositor until it is explicitly mapped again.
|
/// by the compositor until it is explicitly mapped again.
|
||||||
/// All active operations (e.g., move, resize) are canceled and all
|
/// All active operations (e.g., move, resize) are cancelled and all
|
||||||
/// attributes (e.g. title, state, stacking, ...) are discarded for
|
/// attributes (e.g. title, state, stacking, ...) are discarded for
|
||||||
/// an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to
|
/// an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to
|
||||||
/// the state it had right after xdg_surface.get_toplevel. The client
|
/// the state it had right after xdg_surface.get_toplevel. The client
|
||||||
/// can re-map the toplevel by perfoming a commit without any buffer
|
/// can re-map the toplevel by performing a commit without any buffer
|
||||||
/// attached, waiting for a configure event and handling it as usual (see
|
/// attached, waiting for a configure event and handling it as usual (see
|
||||||
/// xdg_surface description).
|
/// xdg_surface description).
|
||||||
///
|
///
|
||||||
|
|
|
@ -46,9 +46,9 @@ pub use tablet::{TabletDescriptor, TabletHandle};
|
||||||
pub use tablet_seat::TabletSeatHandle;
|
pub use tablet_seat::TabletSeatHandle;
|
||||||
pub use tablet_tool::TabletToolHandle;
|
pub use tablet_tool::TabletToolHandle;
|
||||||
|
|
||||||
/// Extends [Seat] with graphic tablet specyfic functionality
|
/// Extends [Seat] with graphic tablet specific functionality
|
||||||
pub trait TabletSeatTrait {
|
pub trait TabletSeatTrait {
|
||||||
/// Get tablet seat asosiated with this seat
|
/// Get tablet seat associated with this seat
|
||||||
fn tablet_seat(&self) -> TabletSeatHandle;
|
fn tablet_seat(&self) -> TabletSeatHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ impl fmt::Debug for TabletSeat {
|
||||||
|
|
||||||
/// Handle to a tablet seat
|
/// Handle to a tablet seat
|
||||||
///
|
///
|
||||||
/// TabletSeat extends `Seat` with graphic tablet specyfic functionality
|
/// TabletSeat extends `Seat` with graphic tablet specific functionality
|
||||||
///
|
///
|
||||||
/// TabletSeatHandle can be used to advertise available graphics tablets and tools to wayland clients
|
/// TabletSeatHandle can be used to advertise available graphics tablets and tools to wayland clients
|
||||||
#[derive(Default, Debug, Clone)]
|
#[derive(Default, Debug, Clone)]
|
||||||
|
@ -92,7 +92,7 @@ impl TabletSeatHandle {
|
||||||
/// You can either add tablet on [input::Event::DeviceAdded](crate::backend::input::InputEvent::DeviceAdded) event,
|
/// You can either add tablet on [input::Event::DeviceAdded](crate::backend::input::InputEvent::DeviceAdded) event,
|
||||||
/// or you can add tablet based on tool event, then clients will not know about devices that are not being used
|
/// or you can add tablet based on tool event, then clients will not know about devices that are not being used
|
||||||
///
|
///
|
||||||
/// Returns new [TabletHandle] if tablet was not know by this seat, if tablet was allready know it returns exsisting handle.
|
/// Returns new [TabletHandle] if tablet was not know by this seat, if tablet was already know it returns existing handle.
|
||||||
pub fn add_tablet(&self, tablet_desc: &TabletDescriptor) -> TabletHandle {
|
pub fn add_tablet(&self, tablet_desc: &TabletDescriptor) -> TabletHandle {
|
||||||
let inner = &mut *self.inner.borrow_mut();
|
let inner = &mut *self.inner.borrow_mut();
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ impl TabletSeatHandle {
|
||||||
|
|
||||||
/// Remove tablet device
|
/// Remove tablet device
|
||||||
///
|
///
|
||||||
/// Called when tablet is no longer avalible
|
/// Called when tablet is no longer available
|
||||||
/// For example on [input::Event::DeviceRemoved](crate::backend::input::InputEvent::DeviceRemoved) event.
|
/// For example on [input::Event::DeviceRemoved](crate::backend::input::InputEvent::DeviceRemoved) event.
|
||||||
pub fn remove_tablet(&self, tablet_desc: &TabletDescriptor) {
|
pub fn remove_tablet(&self, tablet_desc: &TabletDescriptor) {
|
||||||
self.inner.borrow_mut().tablets.remove(tablet_desc);
|
self.inner.borrow_mut().tablets.remove(tablet_desc);
|
||||||
|
@ -138,7 +138,7 @@ impl TabletSeatHandle {
|
||||||
///
|
///
|
||||||
/// Tool is usually added on [TabletToolProximityEvent](crate::backend::input::InputEvent::TabletToolProximity) event.
|
/// Tool is usually added on [TabletToolProximityEvent](crate::backend::input::InputEvent::TabletToolProximity) event.
|
||||||
///
|
///
|
||||||
/// Returns new [TabletToolHandle] if tool was not know by this seat, if tool was allready know it returns exsisting handle,
|
/// Returns new [TabletToolHandle] if tool was not know by this seat, if tool was already know it returns existing handle,
|
||||||
/// it allows you to send tool input events to clients.
|
/// it allows you to send tool input events to clients.
|
||||||
pub fn add_tool(&self, tool_desc: &TabletToolDescriptor) -> TabletToolHandle {
|
pub fn add_tool(&self, tool_desc: &TabletToolDescriptor) -> TabletToolHandle {
|
||||||
let inner = &mut *self.inner.borrow_mut();
|
let inner = &mut *self.inner.borrow_mut();
|
||||||
|
@ -177,7 +177,7 @@ impl TabletSeatHandle {
|
||||||
///
|
///
|
||||||
/// Policy of tool removal is a compositor-specific.
|
/// Policy of tool removal is a compositor-specific.
|
||||||
///
|
///
|
||||||
/// One posible policy would be to remove a tool when all tablets the tool was used on are removed.
|
/// One possible policy would be to remove a tool when all tablets the tool was used on are removed.
|
||||||
pub fn remove_tool(&self, tool_desc: &TabletToolDescriptor) {
|
pub fn remove_tool(&self, tool_desc: &TabletToolDescriptor) {
|
||||||
self.inner.borrow_mut().tools.remove(tool_desc);
|
self.inner.borrow_mut().tools.remove(tool_desc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,7 +350,7 @@ impl TabletToolHandle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Notifify that this tool is focused on a certain surface.
|
/// Notify that this tool is focused on a certain surface.
|
||||||
///
|
///
|
||||||
/// You provide the location of the tool, in the form of:
|
/// You provide the location of the tool, in the form of:
|
||||||
///
|
///
|
||||||
|
@ -370,7 +370,7 @@ impl TabletToolHandle {
|
||||||
.proximity_in(pos, focus, tablet, serial, time)
|
.proximity_in(pos, focus, tablet, serial, time)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Notifify that this tool has left proximity.
|
/// Notify that this tool has left proximity.
|
||||||
pub fn proximity_out(&self, time: u32) {
|
pub fn proximity_out(&self, time: u32) {
|
||||||
self.inner.borrow_mut().proximity_out(time);
|
self.inner.borrow_mut().proximity_out(time);
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,7 @@ impl Drop for X11Lock {
|
||||||
|
|
||||||
/// Open the two unix sockets an X server listens on
|
/// Open the two unix sockets an X server listens on
|
||||||
///
|
///
|
||||||
/// Should only be done after the associated lockfile is aquired!
|
/// Should only be done after the associated lockfile is acquired!
|
||||||
fn open_x11_sockets_for_display(display: u32) -> NixResult<[UnixStream; 2]> {
|
fn open_x11_sockets_for_display(display: u32) -> NixResult<[UnixStream; 2]> {
|
||||||
let path = format!("/tmp/.X11-unix/X{}", display);
|
let path = format!("/tmp/.X11-unix/X{}", display);
|
||||||
let _ = ::std::fs::remove_file(&path);
|
let _ = ::std::fs::remove_file(&path);
|
||||||
|
|
|
@ -76,7 +76,7 @@ pub struct XWayland<Data> {
|
||||||
/// This is a very low-level interface, only notifying you when the connection
|
/// This is a very low-level interface, only notifying you when the connection
|
||||||
/// with XWayland is up, or when it terminates.
|
/// with XWayland is up, or when it terminates.
|
||||||
///
|
///
|
||||||
/// Your WM code must be able handle the XWayland server connecting then
|
/// Your WM code must be able to handle the XWayland server connecting then
|
||||||
/// disconnecting several time in a row, but only a single connection will
|
/// disconnecting several time in a row, but only a single connection will
|
||||||
/// be active at any given time.
|
/// be active at any given time.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
Loading…
Reference in New Issue