fix(wayland): drop panel item correctly
This commit is contained in:
@@ -561,6 +561,18 @@ impl PanelItem {
|
|||||||
|
|
||||||
let _ = node.send_remote_signal("set_cursor", &data);
|
let _ = node.send_remote_signal("set_cursor", &data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn on_drop(&self) {
|
||||||
|
let Ok(toplevel_surface) = self.toplevel_surface.upgrade() else { return; };
|
||||||
|
let Some(focused_surface) = self.seat_data.pointer_focused_surface() else { return; };
|
||||||
|
|
||||||
|
if focused_surface.id() == toplevel_surface.id() {
|
||||||
|
let Some(pointer) = self.seat_data.pointer() else { return };
|
||||||
|
pointer.leave(0, &toplevel_surface);
|
||||||
|
pointer.frame();
|
||||||
|
*self.seat_data.pointer_focus.lock() = None;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
impl ItemSpecialization for PanelItem {
|
impl ItemSpecialization for PanelItem {
|
||||||
fn serialize_start_data(&self, id: &str) -> Vec<u8> {
|
fn serialize_start_data(&self, id: &str) -> Vec<u8> {
|
||||||
|
|||||||
@@ -335,7 +335,13 @@ impl Dispatch<XdgToplevel, XdgToplevelData, WaylandState> for WaylandState {
|
|||||||
xdg_toplevel::Request::SetFullscreen { output: _ } => (),
|
xdg_toplevel::Request::SetFullscreen { output: _ } => (),
|
||||||
xdg_toplevel::Request::UnsetFullscreen => (),
|
xdg_toplevel::Request::UnsetFullscreen => (),
|
||||||
xdg_toplevel::Request::SetMinimized => (),
|
xdg_toplevel::Request::SetMinimized => (),
|
||||||
xdg_toplevel::Request::Destroy => (),
|
xdg_toplevel::Request::Destroy => {
|
||||||
|
let Ok(wl_surface) = data.xdg_surface_data.wl_surface.upgrade() else { return };
|
||||||
|
let Some(panel_item) = compositor::with_states(&wl_surface, |data| {
|
||||||
|
data.data_map.get::<Arc<PanelItem>>().cloned()
|
||||||
|
}) else { return };
|
||||||
|
panel_item.on_drop();
|
||||||
|
}
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user