From 85ae083c082cb39283991fec423f8f0e1aa72322 Mon Sep 17 00:00:00 2001 From: Juanjo Diaz Date: Thu, 10 Nov 2022 17:51:49 +0100 Subject: [PATCH] feat: add serverCut support for extended messages --- core/rfb.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/core/rfb.js b/core/rfb.js index fe6364b3..d7e64d13 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -2180,6 +2180,21 @@ export default class RFB extends EventTargetMixin { return this._fail("Unexpected SetColorMapEntries message"); } + _triggerClipboardEvent(text) { + this.dispatchEvent(new CustomEvent("clipboard", { detail: { text: text } })); + + if (Clipboard.isSupported) { + const clipboardData = new DataTransfer(); + clipboardData.setData("text/plain", text); + const clipboardEvent = new ClipboardEvent('copy', { clipboardData }); + // Force initialization since the constructor is broken in Firefox + if (!clipboardEvent.clipboardData.items.length) { + clipboardEvent.clipboardData.items.add(text, "text/plain"); + } + this._canvas.dispatchEvent(clipboardEvent); + } + } + _handleServerCutText() { Log.Debug("ServerCutText"); @@ -2199,19 +2214,7 @@ export default class RFB extends EventTargetMixin { return true; } - this.dispatchEvent(new CustomEvent("clipboard", { detail: { text: text } })); - - if (Clipboard.isSupported) { - const clipboardData = new DataTransfer(); - clipboardData.setData("text/plain", text); - const clipboardEvent = new ClipboardEvent('copy', { clipboardData }); - // Force initialization since the constructor is broken in Firefox - if (!clipboardEvent.clipboardData.items.length) { - clipboardEvent.clipboardData.items.add(text, "text/plain"); - } - this._canvas.dispatchEvent(clipboardEvent); - } - + this._triggerClipboardEvent(text); } else { //Extended msg. length = Math.abs(length); @@ -2346,9 +2349,7 @@ export default class RFB extends EventTargetMixin { textData = textData.replace("\r\n", "\n"); - this.dispatchEvent(new CustomEvent( - "clipboard", - { detail: { text: textData } })); + this._triggerClipboardEvent(textData); } } else { return this._fail("Unexpected action in extended clipboard message: " + actions);