Macro wayland_client::global_filter
source · [−]macro_rules! global_filter {
($([$interface:ty, $version:expr, $callback:expr]),*) => { ... };
}
Expand description
Convenience macro to create a GlobalManager
callback
This macro aims to simplify the specific but common case of
providing a callback to the GlobalManager
that needs to
auto-bind all advertised instances of some specific globals
whenever they happen. Typically, your application will likely
want to keep track of all wl_seat
and wl_output
globals
to be able to correctly react to user input and their different
monitors.
The output of this macro is a closure, that can be given to
GlobalManager::new_with_cb
as the callback argument.
Example use is typically:
use wayland_client::GlobalManager;
use wayland_client::protocol::{wl_output, wl_seat};
let globals = GlobalManager::new_with_cb(
&display.attach(event_queue.token()),
global_filter!(
// Bind all wl_seat with version 4
[wl_seat::WlSeat, 4, seat_implementor],
// Bind all wl_output with version 1
[wl_output::WlOutput, 1, output_implementor]
)
);
The supplied callbacks for each global kind must be an instance of a type
implementing the GlobalImplementor<I>
trait. The argument provided to your
callback is a Main
handle of the newly instantiated global, and you should assign it
to a filter in this callback if you plan to do so.. The error case happens if the server
advertised a lower version of the global than the one you requested, in which case you
are given the version it advertised in the error method, if you want to handle it graciously.
You can also provide closures for the various callbacks, in this case the errors will be ignored. However, due to a lack of capability of rustc’s inference, you’ll likely need to add some type annotation to your closure, typically something like this:
global_filter!(
[Interface, version, |proxy: Main<_>, dispatch_data| {
/* Setup the global as required */
}]
);