From b55947e536485d4a62d4a0212424d187f9804998 Mon Sep 17 00:00:00 2001 From: Marco Wende Date: Wed, 1 Jul 2026 18:57:30 +0200 Subject: [PATCH] Add clipboard image editing Open the editor with an image from the clipboard via menu ("Aus Zwischenablage bearbeiten") or URL (snippingtool://clipboard). Co-Authored-By: Claude Opus 4.6 --- Sources/AboutWindowController.swift | 1 + Sources/AppCoordinator.swift | 15 +++++++++++++++ Sources/MenuBarContentView.swift | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/Sources/AboutWindowController.swift b/Sources/AboutWindowController.swift index 92b2d18..f032198 100644 --- a/Sources/AboutWindowController.swift +++ b/Sources/AboutWindowController.swift @@ -119,6 +119,7 @@ struct HelpTab: View { urlRow("snippingtool://fullscreen?edit=true", "Vollbild + Editor") urlRow("snippingtool://edit", "Bild aus Datei bearbeiten") urlRow("snippingtool://editlast", "Letzten Screenshot bearbeiten") + urlRow("snippingtool://clipboard", "Zwischenablage bearbeiten") } helpSection("Einrichtung in Logitech Options+") { diff --git a/Sources/AppCoordinator.swift b/Sources/AppCoordinator.swift index a0c163a..25752a9 100644 --- a/Sources/AppCoordinator.swift +++ b/Sources/AppCoordinator.swift @@ -126,6 +126,11 @@ final class AppCoordinator: ObservableObject { return } + if modeString == "paste" || modeString == "clipboard" || modeString == "editclipboard" { + openEditorFromClipboard() + return + } + let mode: CaptureMode? switch modeString { case "fullscreen", "full", "full-screen", "screen": @@ -211,6 +216,16 @@ final class AppCoordinator: ObservableObject { } } + func openEditorFromClipboard() { + guard let pasteboard = NSPasteboard.general.readObjects(forClasses: [NSImage.self], options: nil), + let image = pasteboard.first as? NSImage else { return } + let tempURL = URL(fileURLWithPath: NSTemporaryDirectory()) + .appendingPathComponent(Self.filename(ext: imageFormat.fileExtension)) + DispatchQueue.main.async { + self.openEditor(image: image, sourceURL: tempURL) + } + } + func openEditorForFile() { DispatchQueue.main.async { NSApplication.shared.setActivationPolicy(.regular) diff --git a/Sources/MenuBarContentView.swift b/Sources/MenuBarContentView.swift index 2914f1b..3898587 100644 --- a/Sources/MenuBarContentView.swift +++ b/Sources/MenuBarContentView.swift @@ -16,6 +16,10 @@ struct MenuBarContentView: View { } .disabled(coordinator.lastCapturedURL == nil) + Button("Aus Zwischenablage bearbeiten") { + coordinator.openEditorFromClipboard() + } + Button("Bild bearbeiten…") { coordinator.openEditorForFile() }