seat: Make render-related state thread-safe

This commit is contained in:
Victoria Brekenfeld 2024-06-07 19:26:23 +02:00 committed by Victoria Brekenfeld
parent bd58481d19
commit c7d50e7c5b
11 changed files with 137 additions and 112 deletions

View file

@ -1197,13 +1197,15 @@ impl PointerTarget<State> for CosmicStack {
};
let _old_focus = p.swap_focus(Some(next));
let cursor_state = seat.user_data().get::<CursorState>().unwrap();
cursor_state.set_shape(next.cursor_shape());
let cursor_status = seat
let mut cursor_state = seat
.user_data()
.get::<RefCell<CursorImageStatus>>()
.get::<CursorState>()
.unwrap()
.lock()
.unwrap();
*cursor_status.borrow_mut() = CursorImageStatus::default_named();
cursor_state.set_shape(next.cursor_shape());
let cursor_status = seat.user_data().get::<Mutex<CursorImageStatus>>().unwrap();
*cursor_status.lock().unwrap() = CursorImageStatus::default_named();
});
event.location -= self.0.with_program(|p| {
@ -1225,13 +1227,15 @@ impl PointerTarget<State> for CosmicStack {
};
let _previous = p.swap_focus(Some(next));
let cursor_state = seat.user_data().get::<CursorState>().unwrap();
cursor_state.set_shape(next.cursor_shape());
let cursor_status = seat
let mut cursor_state = seat
.user_data()
.get::<RefCell<CursorImageStatus>>()
.get::<CursorState>()
.unwrap()
.lock()
.unwrap();
*cursor_status.borrow_mut() = CursorImageStatus::default_named();
cursor_state.set_shape(next.cursor_shape());
let cursor_status = seat.user_data().get::<Mutex<CursorImageStatus>>().unwrap();
*cursor_status.lock().unwrap() = CursorImageStatus::default_named();
});
let active_window_geo = self.0.with_program(|p| {
@ -1322,7 +1326,12 @@ impl PointerTarget<State> for CosmicStack {
fn leave(&self, seat: &Seat<State>, data: &mut State, serial: Serial, time: u32) {
self.0.with_program(|p| {
let cursor_state = seat.user_data().get::<CursorState>().unwrap();
let mut cursor_state = seat
.user_data()
.get::<CursorState>()
.unwrap()
.lock()
.unwrap();
cursor_state.set_shape(CursorShape::Default);
let _previous = p.swap_focus(None);
});

View file

@ -46,7 +46,6 @@ use smithay::{
};
use std::{
borrow::Cow,
cell::RefCell,
fmt,
hash::Hash,
sync::{
@ -686,12 +685,9 @@ impl PointerTarget<State> for CosmicWindow {
assert_eq!(old_focus, None);
let cursor_state = seat.user_data().get::<CursorState>().unwrap();
cursor_state.set_shape(next.cursor_shape());
let cursor_status = seat
.user_data()
.get::<RefCell<CursorImageStatus>>()
.unwrap();
*cursor_status.borrow_mut() = CursorImageStatus::default_named();
cursor_state.lock().unwrap().set_shape(next.cursor_shape());
let cursor_status = seat.user_data().get::<Mutex<CursorImageStatus>>().unwrap();
*cursor_status.lock().unwrap() = CursorImageStatus::default_named();
}
});
@ -709,12 +705,9 @@ impl PointerTarget<State> for CosmicWindow {
let _previous = p.swap_focus(Some(next));
let cursor_state = seat.user_data().get::<CursorState>().unwrap();
cursor_state.set_shape(next.cursor_shape());
let cursor_status = seat
.user_data()
.get::<RefCell<CursorImageStatus>>()
.unwrap();
*cursor_status.borrow_mut() = CursorImageStatus::default_named();
cursor_state.lock().unwrap().set_shape(next.cursor_shape());
let cursor_status = seat.user_data().get::<Mutex<CursorImageStatus>>().unwrap();
*cursor_status.lock().unwrap() = CursorImageStatus::default_named();
}
});
@ -794,7 +787,7 @@ impl PointerTarget<State> for CosmicWindow {
fn leave(&self, seat: &Seat<State>, data: &mut State, serial: Serial, time: u32) {
self.0.with_program(|p| {
let cursor_state = seat.user_data().get::<CursorState>().unwrap();
cursor_state.set_shape(CursorShape::Default);
cursor_state.lock().unwrap().set_shape(CursorShape::Default);
let _previous = p.swap_focus(None);
});
PointerTarget::leave(&self.0, seat, data, serial, time)