Keep diagram selection after dragging and record native port evidence
This commit is contained in:
@@ -653,7 +653,15 @@ impl App {
|
||||
}
|
||||
Message::SelectProject => self.select(self.project().id),
|
||||
Message::SelectNode(id) => {
|
||||
if self.selected_node == Some(id) || self.selected == id {
|
||||
if (self.selected_node == Some(id)
|
||||
&& self.active_diagram
|
||||
.and_then(|diagram| self.project().diagrams.get(&diagram))
|
||||
.and_then(|diagram| diagram.nodes.get(&id))
|
||||
.is_some_and(|node| self.selected == node.element))
|
||||
// Defer a placement draft until release: it may change the
|
||||
// identity captured by the just-started canvas gesture.
|
||||
|| (self.selected == id && self.draft.as_ref().is_some_and(Draft::dirty))
|
||||
{
|
||||
return Task::none();
|
||||
}
|
||||
let original = self.selected;
|
||||
@@ -1107,12 +1115,19 @@ impl App {
|
||||
} else {
|
||||
node
|
||||
};
|
||||
self.execute(Command::MoveNode {
|
||||
if self.execute(Command::MoveNode {
|
||||
diagram,
|
||||
node,
|
||||
position,
|
||||
with_descendants: true,
|
||||
});
|
||||
}) && let Some(placement) =
|
||||
self.project().diagrams[&diagram].nodes.get(&node)
|
||||
{
|
||||
// A drag edits a placement, but the canvas still selects
|
||||
// the engineering element represented by that placement.
|
||||
self.selected = placement.element;
|
||||
self.refresh_draft();
|
||||
}
|
||||
}
|
||||
}
|
||||
Message::Zoom(factor) => {
|
||||
|
||||
Reference in New Issue
Block a user