From fb1f5bad9745f4be5644a29b2e6ab35f953b7334 Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 16 Sep 2022 14:52:37 -0400 Subject: [PATCH] fix(panel item): clamp pointer motion to surface size --- src/wayland/panel_item.rs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/wayland/panel_item.rs b/src/wayland/panel_item.rs index 659a293..0b4f349 100644 --- a/src/wayland/panel_item.rs +++ b/src/wayland/panel_item.rs @@ -274,18 +274,20 @@ impl PanelItem { if let ItemType::Panel(panel_item) = &node.item.get().unwrap().specialization { if let Some(pointer) = panel_item.seat_data.pointer() { if let Some(core_surface) = panel_item.core_surface.upgrade() { - let flex_vec = flexbuffers::Reader::get_root(data)?.get_vector()?; - let x = flex_vec.index(0)?.get_f64()?; - let y = flex_vec.index(1)?.get_f64()?; - let mut pointer_active = panel_item.seat_data.pointer_active.lock(); - if *pointer_active { - pointer.motion(0, x, y); - } else { - pointer.enter(0, &core_surface.wl_surface(), x, y); - *pointer_active = true; + if let Some(size) = core_surface.with_data(|data| data.size) { + let flex_vec = flexbuffers::Reader::get_root(data)?.get_vector()?; + let x = flex_vec.index(0)?.get_f64()?.clamp(0.0, size.x as f64); + let y = flex_vec.index(1)?.get_f64()?.clamp(0.0, size.y as f64); + let mut pointer_active = panel_item.seat_data.pointer_active.lock(); + if *pointer_active { + pointer.motion(0, x, y); + } else { + pointer.enter(0, &core_surface.wl_surface(), x, y); + *pointer_active = true; + } + pointer.frame(); + core_surface.flush_clients(); } - pointer.frame(); - core_surface.flush_clients(); } } }