@@ -665,12 +665,7 @@ impl Fsm for SelectToolFsmState {
665665						responses. add ( DocumentMessage :: StartTransaction ) ; 
666666						SelectToolFsmState :: Dragging 
667667					}  else  { 
668- 						// Deselect all layers if using shallowest selection behavior 
669- 						// Necessary since for shallowest mode, we need to know the current selected layers to determine the next 
670- 						if  tool_data. nested_selection_behavior  == NestedSelectionBehavior :: Shallowest  { 
671- 							responses. add ( DocumentMessage :: DeselectAllLayers ) ; 
672- 							tool_data. layers_dragging . clear ( ) ; 
673- 						} 
668+ 						// Make a box selection, preserving previously selected layers 
674669						let  selection = tool_data. nested_selection_behavior ; 
675670						SelectToolFsmState :: DrawingBox  {  selection } 
676671					} 
@@ -1011,7 +1006,15 @@ impl Fsm for SelectToolFsmState {
10111006				let  new_selected:  HashSet < _ >  = document. intersect_quad_no_artboards ( quad,  input) . collect ( ) ; 
10121007				let  current_selected:  HashSet < _ >  = document. network_interface . selected_nodes ( & [ ] ) . unwrap ( ) . selected_layers ( document. metadata ( ) ) . collect ( ) ; 
10131008				if  new_selected != current_selected { 
1014- 					tool_data. layers_dragging  = new_selected. into_iter ( ) . collect ( ) ; 
1009+ 					let  parent_selected:  HashSet < _ >  = new_selected
1010+ 						. into_iter ( ) 
1011+ 						. map ( |layer| { 
1012+ 							// Find the parent node 
1013+ 							layer. ancestors ( document. metadata ( ) ) . filter ( not_artboard ( document) ) . last ( ) . unwrap_or ( layer) 
1014+ 						} ) 
1015+ 						. collect ( ) ; 
1016+ 
1017+ 					tool_data. layers_dragging . extend ( parent_selected. iter ( ) . copied ( ) ) ; 
10151018					responses. add ( NodeGraphMessage :: SelectedNodesSet  { 
10161019						nodes :  tool_data
10171020							. layers_dragging 
0 commit comments