Struct Backend

pub struct Backend { /* private fields */ }
Available on crate feature wayland and Linux only.
Expand description

A Wayland client backend

This type hosts all the interface for interacting with the wayland protocol. It can be cloned, all clones refer to the same underlying connection.

Implementations§

§

impl Backend

pub fn connect(stream: UnixStream) -> Result<Backend, NoWaylandLib>

Try to initialize a Wayland backend on the provided unix stream

The provided stream should correspond to an already established unix connection with the Wayland server.

This method can only fail on the sys backend if the dlopen cargo feature was enabled and the system wayland library could not be found.

pub fn downgrade(&self) -> WeakBackend

Get a WeakBackend from this backend

pub fn flush(&self) -> Result<(), WaylandError>

Flush all pending outgoing requests to the server

Most errors on this method mean that the Wayland connection is no longer valid, the only exception being an IO [WouldBlock] error. In that case it means that you should try flushing again later.

You can however expect this method returning [WouldBlock] to be very rare: it can only occur if either your client sent a lot of big messages at once, or the server is very laggy.

pub fn poll_fd(&self) -> BorrowedFd<'_>

Access the Wayland socket FD for polling

pub fn display_id(&self) -> ObjectId

Get the object ID for the wl_display

pub fn last_error(&self) -> Option<WaylandError>

Get the last error that occurred on this backend

If this returns Some, your Wayland connection is already dead.

pub fn info(&self, id: ObjectId) -> Result<ObjectInfo, InvalidId>

Get the detailed protocol information about a wayland object

Returns an error if the provided object ID is no longer valid.

pub fn destroy_object(&self, id: &ObjectId) -> Result<(), InvalidId>

Destroy an object

For most protocols, this is handled automatically when a destructor message is sent or received.

This corresponds to wl_proxy_destroy in the C API. Or a _destroy method generated for an object without a destructor request.

pub fn send_request( &self, msg: Message<ObjectId, i32>, data: Option<Arc<dyn ObjectData>>, child_spec: Option<(&'static Interface, u32)>, ) -> Result<ObjectId, InvalidId>

Sends a request to the server

Returns an error if the sender ID of the provided message is no longer valid.

Panic:

Several checks against the protocol specification are done, and this method will panic if they do not pass:

  • the message opcode must be valid for the sender interface
  • the argument list must match the prototype for the message associated with this opcode
  • if the method creates a new object, a ObjectId::null() must be given in the argument list at the appropriate place, and a child_spec (interface and version) can be provided. If one is provided, it’ll be checked against the protocol spec. If the protocol specification does not define the interface of the created object (notable example is wl_registry.bind), the child_spec must be provided.

pub fn get_data(&self, id: ObjectId) -> Result<Arc<dyn ObjectData>, InvalidId>

Access the object data associated with a given object ID

Returns an error if the object ID is not longer valid or if it corresponds to a Wayland object that is not managed by this backend (when multiple libraries share the same Wayland socket via libwayland if using the system backend).

pub fn set_data( &self, id: ObjectId, data: Arc<dyn ObjectData>, ) -> Result<(), InvalidId>

Set the object data associated with a given object ID

Returns an error if the object ID is not longer valid or if it corresponds to a Wayland object that is not managed by this backend (when multiple libraries share the same Wayland socket via libwayland if using the system backend).

pub fn prepare_read(&self) -> Option<ReadEventsGuard>

Create a new reading guard

This is the first step for actually reading events from the Wayland socket. See ReadEventsGuard for how to use it.

This call will not block, but may return None if the inner queue of the backend needs to be dispatched. In which case you should invoke dispatch_inner_queue().

pub fn dispatch_inner_queue(&self) -> Result<usize, WaylandError>

Dispatches the inner queue of this backend if necessary

This function actually only does something when using the system backend. It dispaches an inner queue that the backend uses to wrap libwayland. While this dispatching is generally done in ReadEventsGuard::read(), if multiple threads are interacting with the Wayland socket it can happen that this queue was filled by another thread. In that case prepare_read() will return None, and you should invoke this function instead of using the ReadEventsGuard

Returns the number of messages that were dispatched to their ObjectData callbacks.

§

impl Backend

pub unsafe fn from_foreign_display(display: *mut wl_display) -> Backend

Creates a Backend from a foreign *mut wl_display.

This is useful if you are writing a library that is expected to plug itself into an existing Wayland connection.

This will initialize the Backend in “guest” mode, meaning it will not close the connection on drop. After the Backend is dropped, if the server sends an event to an object that was created from it, that event will be silently discarded. This may lead to protocol errors if the server expects an answer to that event, as such you should make sure to cleanup your Wayland state before dropping the Backend.

§Safety

You need to ensure the *mut wl_display remains live as long as the Backend (or its clones) exist.

pub fn display_ptr(&self) -> *mut wl_display

Returns the underlying wl_display pointer to this backend.

This pointer is needed to interface with EGL, Vulkan and other C libraries.

This pointer is only valid for the lifetime of the backend.

pub unsafe fn manage_object( &self, interface: &'static Interface, proxy: *mut wl_proxy, data: Arc<dyn ObjectData>, ) -> ObjectId

Take over handling for a proxy created by a third party.

§Safety

There must never be more than one party managing an object. This is only safe to call when a third party gave you ownership of an unmanaged proxy.

The caller is also responsible for making sure the passed interface matches the proxy.

Trait Implementations§

§

impl Clone for Backend

§

fn clone(&self) -> Backend

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for Backend

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl PartialEq for Backend

§

fn eq(&self, other: &Backend) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl Eq for Backend

§

impl StructuralPartialEq for Backend

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
§

impl<T> Also for T

§

fn also<F>(self, block: F) -> Self
where F: FnOnce(&mut Self),

Apply a function to this value and return the (possibly) modified value.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AnyEq for T
where T: Any + PartialEq,

§

fn equals(&self, other: &(dyn Any + 'static)) -> bool

§

fn as_any(&self) -> &(dyn Any + 'static)

§

impl<T, Res> Apply<Res> for T
where T: ?Sized,

§

fn apply<F>(self, f: F) -> Res
where F: FnOnce(Self) -> Res, Self: Sized,

Apply a function which takes the parameter by value.
§

fn apply_ref<F>(&self, f: F) -> Res
where F: FnOnce(&Self) -> Res,

Apply a function which takes the parameter by reference.
§

fn apply_mut<F>(&mut self, f: F) -> Res
where F: FnOnce(&mut Self) -> Res,

Apply a function which takes the parameter by mutable reference.
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
§

impl<State, Message> IntoBoot<State, Message> for State

§

fn into_boot(self) -> (State, Task<Message>)

Turns some type into the initial state of some Application.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> MaybeClone for T

§

impl<T> MaybeDebug for T

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSync for T
where T: Sync,

§

impl<T> MaybeSync for T
where T: Sync,