pub struct Backend { /* private fields */ }
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§

source§

impl Backend

source

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.

source

pub fn downgrade(&self) -> WeakBackend

Get a WeakBackend from this backend

source

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.

source

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

Access the Wayland socket FD for polling

source

pub fn display_id(&self) -> ObjectId

Get the object ID for the wl_display

source

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.

source

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.

source

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.
source

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).

source

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).

source

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().

source

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.

source§

impl Backend

source

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.

source

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.

Trait Implementations§

source§

impl Clone for Backend

source§

fn clone(&self) -> Backend

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Backend

source§

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

Formats the value using the given formatter. Read more
source§

impl HasRawDisplayHandle for Backend

source§

fn raw_display_handle(&self) -> RawDisplayHandle

source§

impl PartialEq for Backend

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

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

impl Eq for Backend

source§

impl StructuralPartialEq for Backend

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
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
§

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 + Send + Sync>

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

§

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.