seat: Add unique id

This commit is contained in:
Victoria Brekenfeld 2022-07-08 14:00:13 +02:00
parent b884b91068
commit b64071b068
2 changed files with 28 additions and 1 deletions

View file

@ -20,10 +20,26 @@ use smithay::{
use std::{cell::RefCell, collections::HashMap};
use xkbcommon::xkb::KEY_XF86Switch_VT_12;
crate::utils::id_gen!(next_seat_id, SEAT_ID, SEAT_IDS);
#[repr(transparent)]
pub struct SeatId(pub usize);
pub struct ActiveOutput(pub RefCell<Output>);
pub struct SupressedKeys(RefCell<Vec<u32>>);
pub struct Devices(RefCell<HashMap<String, Vec<DeviceCapability>>>);
impl Default for SeatId {
fn default() -> SeatId {
SeatId(next_seat_id())
}
}
impl Drop for SeatId {
fn drop(&mut self) {
SEAT_IDS.lock().unwrap().remove(&self.0);
}
}
impl SupressedKeys {
fn new() -> SupressedKeys {
SupressedKeys(RefCell::new(Vec::new()))
@ -84,6 +100,7 @@ impl Devices {
pub fn add_seat(dh: &DisplayHandle, name: String) -> Seat<State> {
let seat = Seat::<State>::new(dh, name, None);
let userdata = seat.user_data();
userdata.insert_if_missing(SeatId::default);
userdata.insert_if_missing(|| Devices::new());
userdata.insert_if_missing(|| SupressedKeys::new());
userdata.insert_if_missing(|| RefCell::new(CursorImageStatus::Default));

View file

@ -1,4 +1,4 @@
use crate::{input::ActiveOutput, state::Common};
use crate::{input::{ActiveOutput, SeatId}, state::Common};
use smithay::{
utils::{Logical, Rectangle, Transform},
wayland::{output::Output, seat::Seat},
@ -28,6 +28,16 @@ impl OutputExt for Output {
}
}
pub trait SeatExt {
fn id(&self) -> usize;
}
impl SeatExt for Seat<State> {
fn id(&self) -> usize {
self.user_data().get::<SeatId>().unwrap().0
}
}
pub fn active_output(seat: &Seat<State>, state: &Common) -> Output {
seat.user_data()
.get::<ActiveOutput>()