diff --git a/src/mol-model/structure/structure/structure.ts b/src/mol-model/structure/structure/structure.ts index 03569e40a691a22fcd4e21b6b5c28709c282a01c..724bec9bce62069ea60f093cdcda3953d4b399e3 100644 --- a/src/mol-model/structure/structure/structure.ts +++ b/src/mol-model/structure/structure/structure.ts @@ -513,6 +513,11 @@ namespace Structure { return areEquivalent(a.parent || a, b.parent || b) } + /** Check if the structures or their parents are equal */ + export function areParentsEqual(a: Structure, b: Structure) { + return (a.parent || a) === (b.parent || b) + } + export class ElementLocationIterator implements Iterator<StructureElement> { private current = StructureElement.create(); private unitIndex = 0; diff --git a/src/mol-plugin/ui/sequence.tsx b/src/mol-plugin/ui/sequence.tsx index b8f9569f5516dceb2cebca18f877f385237f12ad..caab759f3f073d6d9fe30b9ff0077228ca5a299a 100644 --- a/src/mol-plugin/ui/sequence.tsx +++ b/src/mol-plugin/ui/sequence.tsx @@ -128,7 +128,9 @@ export class SequenceView extends PluginUIComponent<{ }, SequenceViewState> { this.subscribe(this.plugin.state.behavior.currentObject, o => { const current = this.plugin.state.dataState.cells.get(o.ref)!; this.spine.current = current - this.setState(this.getInitialState()) + if (!Structure.areParentsEqual(this.state.structure, this.getStructure())) { + this.setState(this.getInitialState()) + } }); this.subscribe(this.plugin.events.state.object.updated, ({ ref, state }) => { diff --git a/src/mol-state/tree/spine.ts b/src/mol-state/tree/spine.ts index 9adc01e7c86a5d299ac998b112258af828e94785..667c8a0288d5c6ad557d2c68e9874b4e98518640 100644 --- a/src/mol-state/tree/spine.ts +++ b/src/mol-state/tree/spine.ts @@ -36,15 +36,15 @@ namespace StateTreeSpine { getRootOfType<T extends StateObject.Ctor>(t: T): StateObject.From<T> | undefined { if (!this._current) return void 0; - let cell = this._current; + let cell = this._current; // check current first let ret: StateObjectCell | undefined = void 0; while (true) { - cell = this.cells.get(cell.transform.parent)!; if (!cell.obj) return void 0; if (cell.obj.type === t.type) { ret = cell; } if (cell.transform.ref === StateTransform.RootRef) return ret ? ret.obj as StateObject.From<T> : void 0; + cell = this.cells.get(cell.transform.parent)!; // assign parent for next check } }