From 3dd110f4917fad25d4b3267905b19850ba1a6410 Mon Sep 17 00:00:00 2001 From: Hiren Kangad Date: Fri, 13 Mar 2026 15:30:23 +0530 Subject: [PATCH] refboard: restore clipboard copy and native paste flows --- frontend/src/canvas/clipboard.ts | 6 ++---- frontend/src/canvas/shortcut-definitions.ts | 1 + frontend/src/canvas/shortcuts.ts | 1 + frontend/src/hooks/useShortcutHandler.ts | 4 +++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/frontend/src/canvas/clipboard.ts b/frontend/src/canvas/clipboard.ts index ae29fb0..e12ba05 100644 --- a/frontend/src/canvas/clipboard.ts +++ b/frontend/src/canvas/clipboard.ts @@ -61,8 +61,7 @@ export async function writeCanvasToClipboard( outputCanvas.width = sw; outputCanvas.height = sh; const ctx2d = outputCanvas.getContext('2d')!; - ctx2d.fillStyle = '#1e1e1e'; - ctx2d.fillRect(0, 0, outputCanvas.width, outputCanvas.height); + ctx2d.clearRect(0, 0, outputCanvas.width, outputCanvas.height); ctx2d.drawImage(sourceCanvas, sx, sy, sw, sh, 0, 0, sw, sh); } else { // Full current view copy. @@ -70,8 +69,7 @@ export async function writeCanvasToClipboard( outputCanvas.width = sourceCanvas.width; outputCanvas.height = sourceCanvas.height; const ctx2d = outputCanvas.getContext('2d')!; - ctx2d.fillStyle = '#1e1e1e'; - ctx2d.fillRect(0, 0, outputCanvas.width, outputCanvas.height); + ctx2d.clearRect(0, 0, outputCanvas.width, outputCanvas.height); ctx2d.drawImage(sourceCanvas, 0, 0); } diff --git a/frontend/src/canvas/shortcut-definitions.ts b/frontend/src/canvas/shortcut-definitions.ts index e49ca36..b93a5ec 100644 --- a/frontend/src/canvas/shortcut-definitions.ts +++ b/frontend/src/canvas/shortcut-definitions.ts @@ -492,6 +492,7 @@ export const shortcuts: ShortcutDef[] = [ { id: 'paste', keys: { key: 'v', ctrl: true }, category: 'editing', description: 'Paste', + preventDefault: false, handler: async (ctx) => { // Only handle recent internal copies here. // For external clipboard content (images, text, HTML), do NOT call diff --git a/frontend/src/canvas/shortcuts.ts b/frontend/src/canvas/shortcuts.ts index 481d3b9..1960f94 100644 --- a/frontend/src/canvas/shortcuts.ts +++ b/frontend/src/canvas/shortcuts.ts @@ -24,6 +24,7 @@ export interface ShortcutDef { category: 'alignment' | 'arrangement' | 'normalize' | 'navigation' | 'editing' | 'view' | 'tools' | 'image'; needsSelection?: boolean; // skip if no objects selected minSelection?: number; // minimum selected objects (default 1 if needsSelection) + preventDefault?: boolean; // defaults to true } export interface ShortcutContext { diff --git a/frontend/src/hooks/useShortcutHandler.ts b/frontend/src/hooks/useShortcutHandler.ts index 7e7f253..1cf273b 100644 --- a/frontend/src/hooks/useShortcutHandler.ts +++ b/frontend/src/hooks/useShortcutHandler.ts @@ -141,7 +141,9 @@ export function useShortcutHandler(deps: ShortcutHandlerDeps) { if (def.needsSelection && activeCount === 0) continue; if (def.minSelection && activeCount < def.minSelection) continue; - e.preventDefault(); + if (def.preventDefault !== false) { + e.preventDefault(); + } await def.handler(ctx); // Update zoom display after any action