From 0c0d1c68ab1ce62a31fbb470b5a23c12a9d051a6 Mon Sep 17 00:00:00 2001 From: ickshonpe Date: Mon, 1 Dec 2025 10:54:47 +0000 Subject: [PATCH 1/5] Fixed a comment in `pointer_events` the event is named `Release`, not `Up` --- crates/bevy_picking/src/events.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 4528001f0e429..3866d44a42318 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -617,7 +617,7 @@ pub fn pointer_events( PointerAction::Release(button) => { let state = pointer_state.get_mut(pointer_id, button); - // Emit Click and Up events on all the previously hovered entities. + // Emit Click and Release events on all the previously hovered entities. for (hovered_entity, hit) in previous_hover_map .get(&pointer_id) .iter() From ffebdd0047ee4d15f4adff20b4d71b03319add07 Mon Sep 17 00:00:00 2001 From: ickshonpe Date: Mon, 1 Dec 2025 12:18:04 +0000 Subject: [PATCH 2/5] Added a `clear` method to `PointerButtonState` to use in place of clearing the individual fields. --- crates/bevy_picking/src/events.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 3866d44a42318..f50e7a0c4b1f1 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -351,6 +351,15 @@ pub struct PointerButtonState { pub dragging_over: HashMap, } +impl PointerButtonState { + /// Clears all press and drag data tracked for this button on this pointer. + pub fn clear(&mut self) { + self.pressing.clear(); + self.dragging.clear(); + self.dragging_over.clear(); + } +} + /// State for all pointers. #[derive(Debug, Clone, Default, Resource)] pub struct PointerState { @@ -379,9 +388,7 @@ impl PointerState { pub fn clear(&mut self, pointer_id: PointerId) { for button in PointerButton::iter() { if let Some(state) = self.pointer_buttons.get_mut(&(pointer_id, button)) { - state.pressing.clear(); - state.dragging.clear(); - state.dragging_over.clear(); + state.clear() } } } @@ -699,9 +706,7 @@ pub fn pointer_events( } // Finally, we can clear the state of everything relating to presses or drags. - state.pressing.clear(); - state.dragging.clear(); - state.dragging_over.clear(); + state.clear(); } // Moved PointerAction::Move { delta } => { From 89fbaa1748acb1289af0178c806771a95bb4e51b Mon Sep 17 00:00:00 2001 From: ickshonpe Date: Mon, 1 Dec 2025 12:20:35 +0000 Subject: [PATCH 3/5] Added a `clear` method to `PointerButtonState` to use in place of clearing the individual fields. --- crates/bevy_picking/src/events.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 3866d44a42318..49c0a55a31262 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -351,6 +351,15 @@ pub struct PointerButtonState { pub dragging_over: HashMap, } +impl PointerButtonState { + /// Clears all press and drag data tracked for this button on its pointer. + pub fn clear(&mut self) { + self.pressing.clear(); + self.dragging.clear(); + self.dragging_over.clear(); + } +} + /// State for all pointers. #[derive(Debug, Clone, Default, Resource)] pub struct PointerState { @@ -379,9 +388,7 @@ impl PointerState { pub fn clear(&mut self, pointer_id: PointerId) { for button in PointerButton::iter() { if let Some(state) = self.pointer_buttons.get_mut(&(pointer_id, button)) { - state.pressing.clear(); - state.dragging.clear(); - state.dragging_over.clear(); + state.clear() } } } @@ -699,9 +706,7 @@ pub fn pointer_events( } // Finally, we can clear the state of everything relating to presses or drags. - state.pressing.clear(); - state.dragging.clear(); - state.dragging_over.clear(); + state.clear(); } // Moved PointerAction::Move { delta } => { From 0f1165601bf0b36740259c448c58a1e7d9fba080 Mon Sep 17 00:00:00 2001 From: ickshonpe Date: Mon, 1 Dec 2025 12:24:26 +0000 Subject: [PATCH 4/5] Removed change included by accident. --- crates/bevy_picking/src/events.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 49c0a55a31262..80ffc6ea9e0ef 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -624,7 +624,7 @@ pub fn pointer_events( PointerAction::Release(button) => { let state = pointer_state.get_mut(pointer_id, button); - // Emit Click and Release events on all the previously hovered entities. + // Emit Click and Up events on all the previously hovered entities. for (hovered_entity, hit) in previous_hover_map .get(&pointer_id) .iter() From d78efacf5802b9dc12136f23216c716fe09102c4 Mon Sep 17 00:00:00 2001 From: ickshonpe Date: Mon, 1 Dec 2025 16:00:28 +0000 Subject: [PATCH 5/5] Update crates/bevy_picking/src/events.rs Co-authored-by: Kevin Chen --- crates/bevy_picking/src/events.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_picking/src/events.rs b/crates/bevy_picking/src/events.rs index 80ffc6ea9e0ef..4fb10121efde8 100644 --- a/crates/bevy_picking/src/events.rs +++ b/crates/bevy_picking/src/events.rs @@ -388,7 +388,7 @@ impl PointerState { pub fn clear(&mut self, pointer_id: PointerId) { for button in PointerButton::iter() { if let Some(state) = self.pointer_buttons.get_mut(&(pointer_id, button)) { - state.clear() + state.clear(); } } }