yofi 0.2.1

minimalistic menu for wayland
Documentation
use sctk::{
    reexports::client::{protocol::wl_seat::WlSeat, *},
    seat::{Capability, SeatHandler, SeatState},
};

use super::Window;

impl SeatHandler for Window {
    fn seat_state(&mut self) -> &mut SeatState {
        &mut self.seat_state
    }

    fn new_capability(
        &mut self,
        _conn: &Connection,
        qh: &QueueHandle<Self>,
        seat: WlSeat,
        capability: Capability,
    ) {
        match capability {
            Capability::Keyboard if self.keyboard.is_none() => {
                let wl_keyboard = match self.seat_state.get_keyboard_with_repeat(
                    qh,
                    &seat,
                    None,
                    self.loop_handle.clone(),
                    Box::new(|_state, _wl_kbd, _event| {}),
                ) {
                    Ok(k) => k,
                    Err(err) => {
                        self.error = Some(err.into());
                        return;
                    }
                };
                self.keyboard = Some(wl_keyboard);
            }
            _ => {}
        }
    }

    fn remove_capability(
        &mut self,
        _conn: &Connection,
        _qh: &QueueHandle<Self>,
        _seat: WlSeat,
        capability: Capability,
    ) {
        if let Capability::Keyboard = capability {
            if let Some(k) = self.keyboard.take() {
                k.release();
            }
        }
    }

    fn new_seat(&mut self, _conn: &Connection, _qh: &QueueHandle<Self>, _seat: WlSeat) {}

    fn remove_seat(&mut self, _conn: &Connection, _qh: &QueueHandle<Self>, _seat: WlSeat) {}
}