fix(selection): keep active selection on empty box/lasso
An empty box or lasso drag called deselect_all, discarding a selection the user may have built up over several picks. Drop the empty-clear from the lasso and two-click box paths so a stray empty drag leaves the selection untouched; Esc remains the deliberate clear. (issue #83) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
b3b94b0130
commit
9de2760dee
1 changed files with 5 additions and 8 deletions
|
|
@ -3396,14 +3396,13 @@ impl OpenCADStudio {
|
||||||
// Selection filter: keep only allowed types.
|
// Selection filter: keep only allowed types.
|
||||||
handles.retain(|&h| self.tabs[i].scene.passes_selection_filter(h));
|
handles.retain(|&h| self.tabs[i].scene.passes_selection_filter(h));
|
||||||
// Accumulate like the box path (issue #83): plain
|
// Accumulate like the box path (issue #83): plain
|
||||||
// lasso adds, Shift+lasso removes, an empty lasso
|
// lasso adds, Shift+lasso removes. An empty lasso
|
||||||
// clears.
|
// leaves the current selection untouched so a stray
|
||||||
|
// drag never discards hard-won picks.
|
||||||
if self.shift_down {
|
if self.shift_down {
|
||||||
for h in &handles {
|
for h in &handles {
|
||||||
self.tabs[i].scene.deselect_entity(*h);
|
self.tabs[i].scene.deselect_entity(*h);
|
||||||
}
|
}
|
||||||
} else if handles.is_empty() {
|
|
||||||
self.tabs[i].scene.deselect_all();
|
|
||||||
} else {
|
} else {
|
||||||
for h in &handles {
|
for h in &handles {
|
||||||
self.tabs[i].scene.select_entity(*h, false);
|
self.tabs[i].scene.select_entity(*h, false);
|
||||||
|
|
@ -3534,14 +3533,12 @@ impl OpenCADStudio {
|
||||||
handles.retain(|&h| self.tabs[i].scene.passes_selection_filter(h));
|
handles.retain(|&h| self.tabs[i].scene.passes_selection_filter(h));
|
||||||
// Accumulate (issue #83): a plain box adds to the
|
// Accumulate (issue #83): a plain box adds to the
|
||||||
// current selection, Shift+box removes the boxed
|
// current selection, Shift+box removes the boxed
|
||||||
// entities, and an empty box clears (the two-click
|
// entities. An empty box leaves the selection alone
|
||||||
// analogue of clicking empty space).
|
// so an accidental empty drag never discards it.
|
||||||
if self.shift_down {
|
if self.shift_down {
|
||||||
for h in &handles {
|
for h in &handles {
|
||||||
self.tabs[i].scene.deselect_entity(*h);
|
self.tabs[i].scene.deselect_entity(*h);
|
||||||
}
|
}
|
||||||
} else if handles.is_empty() {
|
|
||||||
self.tabs[i].scene.deselect_all();
|
|
||||||
} else {
|
} else {
|
||||||
for h in &handles {
|
for h in &handles {
|
||||||
self.tabs[i].scene.select_entity(*h, false);
|
self.tabs[i].scene.select_entity(*h, false);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue