fix(script): make Item.selected=false deselect only that item (#544)

This commit is contained in:
Nigel Ihza Firdausy 2026-10-10 15:47:58 +07:00
parent 813c7c4650
commit d0489021b5
2 changed files with 40 additions and 1 deletions

View File

@ -1335,7 +1335,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] }); },
};

View File

@ -524,3 +524,31 @@ fn comp_preserves_nested_frame_rate_and_resolution() {
let (_, c) = comp_named(&s, "Nested");
assert!(c.preserve_frame_rate && c.preserve_resolution);
}
#[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]]")
);
}