From 36d32e83a6e296ee22f1c6ddeca5096ebe48af04 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 14 Dec 2023 08:51:26 +0100 Subject: [PATCH] clipboard - invalidate resources on `copy` event (#200641) (#200814) --- src/vs/platform/clipboard/browser/clipboardService.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/vs/platform/clipboard/browser/clipboardService.ts b/src/vs/platform/clipboard/browser/clipboardService.ts index 30ce2a62e5e2c..f9a61f6ce3c10 100644 --- a/src/vs/platform/clipboard/browser/clipboardService.ts +++ b/src/vs/platform/clipboard/browser/clipboardService.ts @@ -4,7 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { isSafari, isWebkitWebView } from 'vs/base/browser/browser'; -import { $, addDisposableListener, getActiveDocument } from 'vs/base/browser/dom'; +import { $, addDisposableListener, getActiveDocument, onDidRegisterWindow } from 'vs/base/browser/dom'; +import { mainWindow } from 'vs/base/browser/window'; import { DeferredPromise } from 'vs/base/common/async'; import { Event } from 'vs/base/common/event'; import { hash } from 'vs/base/common/hash'; @@ -27,6 +28,14 @@ export class BrowserClipboardService extends Disposable implements IClipboardSer if (isSafari || isWebkitWebView) { this.installWebKitWriteTextWorkaround(); } + + // Keep track of copy operations to reset our set of + // copied resources: since we keep resources in memory + // and not in the clipboard, we have to invalidate + // that state when the user copies other data. + this._register(Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposables }) => { + disposables.add(addDisposableListener(window.document, 'copy', () => this.clearResources())); + }, { window: mainWindow, disposables: this._store })); } private webKitPendingClipboardWritePromise: DeferredPromise | undefined;