diff --git a/src/public/app/menus/image_context_menu.js b/src/public/app/menus/image_context_menu.js index 3b2abdca8..d45e35f62 100644 --- a/src/public/app/menus/image_context_menu.js +++ b/src/public/app/menus/image_context_menu.js @@ -22,15 +22,31 @@ function setupContextMenu($image) { command: "copyImageReferenceToClipboard", uiIcon: "bx bx-empty" }, - {title: "Copy image to clipboard", command: "copyImageToClipboard", uiIcon: "bx bx-empty"}, + { title: "Copy image to clipboard", command: "copyImageToClipboard", uiIcon: "bx bx-empty" }, ], - selectMenuItemHandler: ({command}) => { + selectMenuItemHandler: async ({ command }) => { if (command === 'copyImageReferenceToClipboard') { imageService.copyImageReferenceToClipboard($image); } else if (command === 'copyImageToClipboard') { - const webContents = utils.dynamicRequire('@electron/remote').getCurrentWebContents(); - utils.dynamicRequire('electron'); - webContents.copyImageAt(e.pageX, e.pageY); + try { + const nativeImage = utils.dynamicRequire('electron').nativeImage; + const clipboard = utils.dynamicRequire('electron').clipboard; + + const response = await fetch( + $image.attr('src') + ); + const blob = await response.blob(); + + clipboard.writeImage( + nativeImage.createFromBuffer( + Buffer.from( + await blob.arrayBuffer() + ) + ) + ); + } catch (error) { + console.error('Failed to copy image to clipboard:', error); + } } else { throw new Error(`Unrecognized command '${command}'`); } @@ -41,4 +57,4 @@ function setupContextMenu($image) { export default { setupContextMenu -}; +}; \ No newline at end of file