@@ -186,7 +186,7 @@ fn collect_all_element_nodes_covering_impl(
186
186
position : LogicalPoint ,
187
187
component_instance : & ComponentInstance ,
188
188
current_element : & ElementRc ,
189
- component_stack : & Vec < Rc < Component > > ,
189
+ component_stack : & mut Vec < Rc < Component > > ,
190
190
result : & mut Vec < SelectionCandidate > ,
191
191
) {
192
192
let ce = self_or_embedded_component_root ( current_element) ;
@@ -195,27 +195,27 @@ fn collect_all_element_nodes_covering_impl(
195
195
} ;
196
196
let component_root_element = component. root_element . clone ( ) ;
197
197
198
- let mut tmp;
199
- let children_component_stack = {
200
- if Rc :: ptr_eq ( & component_root_element, & ce) {
201
- tmp = component_stack. clone ( ) ;
202
- tmp. push ( component. clone ( ) ) ;
203
- & tmp
204
- } else {
205
- component_stack
206
- }
198
+ let must_pop = if Rc :: ptr_eq ( & component_root_element, & ce) {
199
+ component_stack. push ( component. clone ( ) ) ;
200
+ true
201
+ } else {
202
+ false
207
203
} ;
208
204
209
205
for c in ce. borrow ( ) . children . iter ( ) . rev ( ) {
210
206
collect_all_element_nodes_covering_impl (
211
207
position,
212
208
component_instance,
213
209
c,
214
- children_component_stack ,
210
+ component_stack ,
215
211
result,
216
212
) ;
217
213
}
218
214
215
+ if must_pop {
216
+ component_stack. pop ( ) ;
217
+ }
218
+
219
219
if element_covers_point ( position, component_instance, & ce) {
220
220
for ( i, _) in ce. borrow ( ) . debug . iter ( ) . enumerate ( ) . rev ( ) {
221
221
// All nodes have the same geometry
@@ -238,7 +238,7 @@ pub fn collect_all_element_nodes_covering(
238
238
position,
239
239
component_instance,
240
240
& root_element,
241
- & vec ! [ ] ,
241
+ & mut vec ! [ ] ,
242
242
& mut elements,
243
243
) ;
244
244
elements
0 commit comments