Merge pull request #559 from Ni-zav/fix/544-project-item-deselect-s20261010T084400Z-a6e9

# Conflicts:
#	crates/script/src/tests.rs
This commit is contained in:
Claude committed 2026-10-10 12:49:11 +00:00
commit ead13d81d4
2 files changed
+40 -1

No files matched your search

+12 -1
View File
@@ -1342,7 +1342,18 @@ Item.prototype = {
get parentFolder() { return __item(this.__info().parent); },
set parentFolder(f) { __call("project.move", { items: [this.__id], folder: f && f.__id ? f.__id : null }); },
get selected() { return this.__info().selected; },
set selected(v) { if (v) __call("project.select", { items: [this.__id], add: true }); },
set selected(v) {
var selection = __get("project").selection;
var selected = selection.indexOf(this.__id) !== -1;
if (!!v === selected) return;
if (v) {
__call("project.select", { items: [this.__id], add: true });
} else {
var id = this.__id;
// Replace just this item, preserving the other Project panel selections and their order.
__call("project.select", { items: selection.filter(function (item) { return item !== id; }) });
}
},
get usedIn() { return this.__info().usedIn.map(function (c) { return new CompItem(c); }); },
remove: function () { __call("project.delete", { items: [this.__id] }); },
};
+28
View File
@@ -564,3 +564,31 @@ fn text_document_baseline_flags_reflect_pending_edits_and_applied_value() {
])
);
}
#[test]
fn setting_item_selected_false_preserves_other_project_items() {
let mut s = session();
let o = ok(
&mut s,
r#"
var target = app.project.items.addFolder("Target");
var keep = app.project.items.addFolder("Keep");
app.run("project.select", {items: []});
keep.selected = true;
target.selected = true;
var states = [[target.selected, keep.selected]];
target.selected = false;
states.push([target.selected, keep.selected]);
target.selected = false; // idempotent: never remove Keep
states.push([target.selected, keep.selected]);
target.selected = true;
states.push([target.selected, keep.selected]);
app.project.selection.map(function (item) { return item.name; }).join(",")
+ "|" + JSON.stringify(states);
"#,
);
assert_eq!(
o.result,
json!("Keep,Target|[[true,true],[false,true],[false,true],[true,true]]")
);
}