Fix event capturing order in pane_grid
This commit is contained in:
parent
e5f1e31a5c
commit
9511bfb971
1 changed files with 41 additions and 38 deletions
|
|
@ -491,6 +491,36 @@ where
|
||||||
&None
|
&None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let picked_pane = action.picked_pane().map(|(pane, _)| pane);
|
||||||
|
|
||||||
|
for (((pane, content), tree), layout) in self
|
||||||
|
.panes
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.zip(&mut self.contents)
|
||||||
|
.zip(&mut tree.children)
|
||||||
|
.zip(layout.children())
|
||||||
|
.filter(|(((pane, _), _), _)| {
|
||||||
|
self.internal
|
||||||
|
.maximized()
|
||||||
|
.map_or(true, |maximized| *pane == maximized)
|
||||||
|
})
|
||||||
|
{
|
||||||
|
let is_picked = picked_pane == Some(pane);
|
||||||
|
|
||||||
|
content.update(
|
||||||
|
tree,
|
||||||
|
event.clone(),
|
||||||
|
layout,
|
||||||
|
cursor,
|
||||||
|
renderer,
|
||||||
|
clipboard,
|
||||||
|
shell,
|
||||||
|
viewport,
|
||||||
|
is_picked,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
|
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
|
||||||
| Event::Touch(touch::Event::FingerPressed { .. }) => {
|
| Event::Touch(touch::Event::FingerPressed { .. }) => {
|
||||||
|
|
@ -601,10 +631,6 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shell.capture_event();
|
|
||||||
} else if action.picked_split().is_some() {
|
|
||||||
shell.capture_event();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*action = state::Action::Idle;
|
*action = state::Action::Idle;
|
||||||
|
|
@ -657,49 +683,26 @@ where
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
let picked_pane = action.picked_pane().map(|(pane, _)| pane);
|
|
||||||
|
|
||||||
for (((pane, content), tree), layout) in self
|
|
||||||
.panes
|
|
||||||
.iter()
|
|
||||||
.copied()
|
|
||||||
.zip(&mut self.contents)
|
|
||||||
.zip(&mut tree.children)
|
|
||||||
.zip(layout.children())
|
|
||||||
.filter(|(((pane, _), _), _)| {
|
|
||||||
self.internal
|
|
||||||
.maximized()
|
|
||||||
.map_or(true, |maximized| *pane == maximized)
|
|
||||||
})
|
|
||||||
{
|
|
||||||
let is_picked = picked_pane == Some(pane);
|
|
||||||
|
|
||||||
content.update(
|
|
||||||
tree,
|
|
||||||
event.clone(),
|
|
||||||
layout,
|
|
||||||
cursor,
|
|
||||||
renderer,
|
|
||||||
clipboard,
|
|
||||||
shell,
|
|
||||||
viewport,
|
|
||||||
is_picked,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if shell.redraw_request() != Some(window::RedrawRequest::NextFrame) {
|
if shell.redraw_request() != Some(window::RedrawRequest::NextFrame) {
|
||||||
let interaction = self
|
let interaction = self
|
||||||
.grid_interaction(action, layout, cursor)
|
.grid_interaction(action, layout, cursor)
|
||||||
.or_else(|| {
|
.or_else(|| {
|
||||||
self.contents.iter().zip(layout.children()).find_map(
|
self.panes
|
||||||
|(content, layout)| {
|
.iter()
|
||||||
|
.zip(&self.contents)
|
||||||
|
.zip(layout.children())
|
||||||
|
.filter(|((&pane, _content), _layout)| {
|
||||||
|
self.internal
|
||||||
|
.maximized()
|
||||||
|
.map_or(true, |maximized| pane == maximized)
|
||||||
|
})
|
||||||
|
.find_map(|((_pane, content), layout)| {
|
||||||
content.grid_interaction(
|
content.grid_interaction(
|
||||||
layout,
|
layout,
|
||||||
cursor,
|
cursor,
|
||||||
on_drag.is_some(),
|
on_drag.is_some(),
|
||||||
)
|
)
|
||||||
},
|
})
|
||||||
)
|
|
||||||
})
|
})
|
||||||
.unwrap_or(mouse::Interaction::None);
|
.unwrap_or(mouse::Interaction::None);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue