diff --git a/blocksuite/affine/widgets/widget-remote-selection/src/doc/doc-remote-selection.ts b/blocksuite/affine/widgets/widget-remote-selection/src/doc/doc-remote-selection.ts index 69a088f09e..1591b27901 100644 --- a/blocksuite/affine/widgets/widget-remote-selection/src/doc/doc-remote-selection.ts +++ b/blocksuite/affine/widgets/widget-remote-selection/src/doc/doc-remote-selection.ts @@ -323,6 +323,14 @@ export class AffineDocRemoteSelectionWidget extends WidgetComponent { this._updateSelections(selections); }) ); + + this.disposables.add( + this.std.event.active$.subscribe(value => { + if (!value) { + this.std.selection.clearRemote(); + } + }) + ); } override render() { diff --git a/blocksuite/framework/store/src/extension/selection/selection-extension.ts b/blocksuite/framework/store/src/extension/selection/selection-extension.ts index 81338f6c5e..d4126ae7ff 100644 --- a/blocksuite/framework/store/src/extension/selection/selection-extension.ts +++ b/blocksuite/framework/store/src/extension/selection/selection-extension.ts @@ -162,6 +162,13 @@ export class StoreSelectionExtension extends StoreExtension { this.set([...current, ...selections]); } + // This method is used to clear **current editor's remote selections** + // When the editor is not active, the remote selections should be cleared + // So other editors won't see the remote selections from this editor + clearRemote() { + this.store.awarenessStore.setLocalSelection(this._id, []); + } + update(fn: (currentSelections: BaseSelection[]) => BaseSelection[]) { const selections = fn(this.value); this.set(selections);