Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// A listener for events emmited on a wl_registry object.
- trait wayland::client::RegistryListener {
- fn global(&mut self, registry: wayland::client::RegistryListener, name: u32, interface: &str, version: u32);
- fn global_remove(&mut self, registry: wayland::client::RegistryListener, name: u32);
- }
- impl wayland::client::Registry {
- fn add_listener(&mut self, listener: impl RegistryListener) { ... }
- fn bind(...) { ... }
- }
- struct MySeatData {
- name: Option<String>, // None if not yet known
- seat: wayland::client::Seat,
- }
- struct MyAwesomeRegistryListener {
- // Whatever user data you want goes here.
- // You get to decide whether it's Send/Sync.
- seats: Vec<MySeatData>,
- }
- impl MyAwesomeRegistryListener {
- fn new() -> Self {
- Self { seats: vec![] }
- }
- fn find_seat_data_mut(&mut self, seat: wayland::client::Seat) -> Option<&mut MySeatData> {
- self.seats.iter_mut()
- .find(|&seat_data| seat_data.seat == seat)
- }
- }
- impl wayland::client::RegistryListener for MyAwesomeRegistryListener {
- fn global(&mut self, registry: wayland::client::RegistryListener, name: u32, interface: &str, version: u32) {
- match interface {
- wayland::client::Seat::interface::name /* "wl_seat" */ => {
- let seat = registry.bind(name, ...);
- self.seats.push(SeatData { name: None, seat });
- }
- }
- }
- }
- fn main() -> Result<(), Error> {
- let display = wayland::client::Display::connect()?;
- let registry = display.get_registry();
- registry.add_listener(MyAwesomeRegistryListener::new());
- loop {
- display.roundtrip()?;
- }
- }
Add Comment
Please, Sign In to add comment