diff --git a/js/CanvasInteractions.js b/js/CanvasInteractions.js index 21faa55..ef6ec67 100644 --- a/js/CanvasInteractions.js +++ b/js/CanvasInteractions.js @@ -575,8 +575,15 @@ export class CanvasInteractions { } break; case 'v': - // Paste from internal clipboard or system clipboard - this.canvas.canvasLayers.handlePaste('mouse'); + // Only handle internal clipboard paste here. + // If internal clipboard is empty, let the paste event bubble + // so handlePasteEvent can access e.clipboardData for system images. + if (this.canvas.canvasLayers.internalClipboard.length > 0) { + this.canvas.canvasLayers.pasteLayers(); + } else { + // Don't preventDefault - let paste event fire for system clipboard + handled = false; + } break; default: handled = false; diff --git a/src/CanvasInteractions.ts b/src/CanvasInteractions.ts index 52a1a4a..8f39703 100644 --- a/src/CanvasInteractions.ts +++ b/src/CanvasInteractions.ts @@ -704,8 +704,15 @@ export class CanvasInteractions { } break; case 'v': - // Paste from internal clipboard or system clipboard - this.canvas.canvasLayers.handlePaste('mouse'); + // Only handle internal clipboard paste here. + // If internal clipboard is empty, let the paste event bubble + // so handlePasteEvent can access e.clipboardData for system images. + if (this.canvas.canvasLayers.internalClipboard.length > 0) { + this.canvas.canvasLayers.pasteLayers(); + } else { + // Don't preventDefault - let paste event fire for system clipboard + handled = false; + } break; default: handled = false;