From 99984fc2d65ac912884969d593096bf661fd9bca Mon Sep 17 00:00:00 2001 From: Adesh Gupta <148623820+4adex@users.noreply.github.com> Date: Fri, 15 Aug 2025 16:25:05 +0530 Subject: [PATCH] Fix regression in shallow select (#3050) * Add defer message for shallow select * Fixed infinite loop --- editor/src/messages/tool/tool_messages/select_tool.rs | 11 +++++++++-- editor/src/node_graph_executor.rs | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 31bd2c3a..fbf63aaf 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -92,6 +92,7 @@ pub enum SelectToolMessage { remove_from_selection: Key, }, EditLayer, + EditLayerExec, Enter, PointerMove(SelectToolPointerKeys), PointerOutsideViewport(SelectToolPointerKeys), @@ -323,6 +324,7 @@ impl<'a> MessageHandler> for Sele PointerMove, Abort, EditLayer, + EditLayerExec, Enter, ); @@ -985,14 +987,19 @@ impl Fsm for SelectToolFsmState { self } (_, SelectToolMessage::EditLayer) => { - // Edit the clicked layer + responses.add(DeferMessage::AfterGraphRun { + messages: vec![SelectToolMessage::EditLayerExec.into()], + }); + + self + } + (_, SelectToolMessage::EditLayerExec) => { if let Some(intersect) = document.click(input) { match tool_data.nested_selection_behavior { NestedSelectionBehavior::Shallowest => edit_layer_shallowest_manipulation(document, intersect, responses), NestedSelectionBehavior::Deepest => edit_layer_deepest_manipulation(intersect, &document.network_interface, responses), } } - self } ( diff --git a/editor/src/node_graph_executor.rs b/editor/src/node_graph_executor.rs index 300fb820..c127ed73 100644 --- a/editor/src/node_graph_executor.rs +++ b/editor/src/node_graph_executor.rs @@ -288,7 +288,7 @@ impl NodeGraphExecutor { } else { self.process_node_graph_output(node_graph_output, responses)?; } - responses.add_front(DeferMessage::TriggerGraphRun(execution_id, execution_context.document_id)); + responses.add(DeferMessage::TriggerGraphRun(execution_id, execution_context.document_id)); // Update the Data panel on the frontend using the value of the inspect result. if let Some(inspect_result) = (self.previous_node_to_inspect.is_some()).then_some(inspect_result).flatten() {