summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Cory Forsstrom <cory.forsstrom@lich.io>2021-07-27 15:41:45 -0700
committerLibravatar Cory Forsstrom <cory.forsstrom@lich.io>2021-07-27 15:41:45 -0700
commitbe65a847b05b8b8f09178172639fa2d5d58e52f3 (patch)
treed477d3df666994891c80908b153de8e39be28d9d
parent2a49e415d262f76eb699d48a58b767578d68b516 (diff)
downloadiced-be65a847b05b8b8f09178172639fa2d5d58e52f3.tar.gz
iced-be65a847b05b8b8f09178172639fa2d5d58e52f3.tar.bz2
iced-be65a847b05b8b8f09178172639fa2d5d58e52f3.zip
Prevent body events pane is picked / dragging
-rw-r--r--native/src/widget/pane_grid.rs13
-rw-r--r--native/src/widget/pane_grid/content.rs21
2 files changed, 24 insertions, 10 deletions
diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs
index e073d42e..6912d7a9 100644
--- a/native/src/widget/pane_grid.rs
+++ b/native/src/widget/pane_grid.rs
@@ -452,17 +452,26 @@ where
_ => {}
}
+ let picked_pane = self.state.picked_pane().map(|(pane, _)| pane);
+
self.elements
.iter_mut()
.zip(layout.children())
- .map(|((_, pane), layout)| {
- pane.on_event(
+ .map(|((pane, content), layout)| {
+ let is_picked = if let Some(picked_pane) = picked_pane {
+ picked_pane == *pane
+ } else {
+ false
+ };
+
+ content.on_event(
event.clone(),
layout,
cursor_position,
renderer,
clipboard,
messages,
+ is_picked,
)
})
.fold(event_status, event::Status::merge)
diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs
index b0110393..bac9fdd4 100644
--- a/native/src/widget/pane_grid/content.rs
+++ b/native/src/widget/pane_grid/content.rs
@@ -149,6 +149,7 @@ where
renderer: &Renderer,
clipboard: &mut dyn Clipboard,
messages: &mut Vec<Message>,
+ is_picked: bool,
) -> event::Status {
let mut event_status = event::Status::Ignored;
@@ -169,14 +170,18 @@ where
layout
};
- let body_status = self.body.on_event(
- event,
- body_layout,
- cursor_position,
- renderer,
- clipboard,
- messages,
- );
+ let body_status = if is_picked {
+ event::Status::Ignored
+ } else {
+ self.body.on_event(
+ event,
+ body_layout,
+ cursor_position,
+ renderer,
+ clipboard,
+ messages,
+ )
+ };
event_status.merge(body_status)
}