Struct wayland_client::backend::Backend
source · 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
impl Backend
sourcepub fn connect(stream: UnixStream) -> Result<Backend, NoWaylandLib>
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.
sourcepub fn downgrade(&self) -> WeakBackend
pub fn downgrade(&self) -> WeakBackend
Get a WeakBackend
from this backend
sourcepub fn flush(&self) -> Result<(), WaylandError>
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.
sourcepub fn display_id(&self) -> ObjectId
pub fn display_id(&self) -> ObjectId
Get the object ID for the wl_display
sourcepub fn last_error(&self) -> Option<WaylandError>
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.
sourcepub fn info(&self, id: ObjectId) -> Result<ObjectInfo, InvalidId>
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.
sourcepub fn send_request(
&self,
msg: Message<ObjectId, i32>,
data: Option<Arc<dyn ObjectData + 'static>>,
child_spec: Option<(&'static Interface, u32)>
) -> Result<ObjectId, InvalidId>
pub fn send_request( &self, msg: Message<ObjectId, i32>, data: Option<Arc<dyn ObjectData + 'static>>, 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 achild_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 iswl_registry.bind
), thechild_spec
must be provided.
sourcepub fn get_data(
&self,
id: ObjectId
) -> Result<Arc<dyn ObjectData + 'static>, InvalidId>
pub fn get_data( &self, id: ObjectId ) -> Result<Arc<dyn ObjectData + 'static>, 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).
sourcepub fn set_data(
&self,
id: ObjectId,
data: Arc<dyn ObjectData + 'static>
) -> Result<(), InvalidId>
pub fn set_data( &self, id: ObjectId, data: Arc<dyn ObjectData + 'static> ) -> 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).
sourcepub fn prepare_read(&self) -> Result<ReadEventsGuard, WaylandError>
pub fn prepare_read(&self) -> Result<ReadEventsGuard, WaylandError>
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 event callbacks may be invoked in the process of preparing the guard.
If it returns an error, you Wayland connection is already dead.
sourcepub fn dispatch_inner_queue(&self) -> Result<usize, WaylandError>
pub fn dispatch_inner_queue(&self) -> Result<usize, WaylandError>
Dispatches the inner queue of this backend if necessary
This function is only relevant when using the system backend that was created from an external
display. In this case, it is possible that some other part of the program already takes care
of reading the wayland socket and you should not touch it, and thus you cannot use
prepare_read()
. In this situation, this method will ensure that this
Backend
still correctly processes its messages.
When using the rust backend, or when using the system backend where you own the connection, this function will do nothing. It is thus safe to unconditionnaly invoke it at some point in your library code to ensure you support all use cases, for example.
Returns the number of messages that were dispatched to their ObjectData
callbacks.
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for Backend
impl Send for Backend
impl Sync for Backend
impl Unpin for Backend
impl UnwindSafe for Backend
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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 + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.