diff --git a/src/wayland/handlers/data_device.rs b/src/wayland/handlers/data_device.rs index 3590a35b..61b4564d 100644 --- a/src/wayland/handlers/data_device.rs +++ b/src/wayland/handlers/data_device.rs @@ -10,17 +10,17 @@ use smithay::{ ClientDndGrabHandler, DataDeviceHandler, DataDeviceState, ServerDndGrabHandler, }, }; -use std::cell::RefCell; +use std::sync::Mutex; pub struct DnDIcon { - surface: RefCell>, + surface: Mutex>, } pub fn get_dnd_icon(seat: &Seat) -> Option { let userdata = seat.user_data(); userdata .get::() - .and_then(|x| x.surface.borrow().clone()) + .and_then(|x| x.surface.lock().unwrap().clone()) .filter(IsAlive::alive) } @@ -32,17 +32,18 @@ impl ClientDndGrabHandler for State { seat: Seat, ) { let user_data = seat.user_data(); - user_data.insert_if_missing(|| DnDIcon { - surface: RefCell::new(None), + user_data.insert_if_missing_threadsafe(|| DnDIcon { + surface: Mutex::new(None), }); - *user_data.get::().unwrap().surface.borrow_mut() = icon; + *user_data.get::().unwrap().surface.lock().unwrap() = icon; } fn dropped(&mut self, seat: Seat) { seat.user_data() .get::() .unwrap() .surface - .borrow_mut() + .lock() + .unwrap() .take(); } }