use sctk::reexports::client::protocol::wl_seat::WlSeat;
#[derive(Default)]
pub struct ClipboardDispatchData {
observed_seats: Vec<(WlSeat, u32)>,
last_pos: usize,
}
impl ClipboardDispatchData {
pub fn new() -> Self {
Self::default()
}
pub fn set_last_seat(&mut self, seat: WlSeat, serial: u32) {
let pos = self.observed_seats.iter().position(|st| st.0 == seat);
match pos {
Some(pos) => {
self.observed_seats[pos].1 = serial;
self.last_pos = pos;
}
None => {
self.last_pos = self.observed_seats.len();
self.observed_seats.push((seat, serial));
}
}
}
pub fn remove_seat(&mut self, seat: WlSeat) {
let pos = self.observed_seats.iter().position(|st| st.0 == seat);
if let Some(pos) = pos {
self.observed_seats.remove(pos);
}
}
pub fn last_seat(&self) -> Option<&(WlSeat, u32)> {
self.observed_seats.get(self.last_pos)
}
}