From e59e405d739344e2871600303b84eb242c555ae3 Mon Sep 17 00:00:00 2001 From: pax Date: Sun, 5 Apr 2026 15:44:00 -0500 Subject: [PATCH] =?UTF-8?q?v0.1.7=20=E2=80=94=20Unified=20QMimeData=20clip?= =?UTF-8?q?board=20across=20all=20tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- booru_viewer/gui/bookmarks.py | 21 ++++++++------------- booru_viewer/gui/library.py | 24 ++++++++---------------- pyproject.toml | 2 +- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/booru_viewer/gui/bookmarks.py b/booru_viewer/gui/bookmarks.py index 2a4b0a9..d861fe8 100644 --- a/booru_viewer/gui/bookmarks.py +++ b/booru_viewer/gui/bookmarks.py @@ -280,19 +280,14 @@ class BookmarksView(QWidget): elif action == copy_file: path = fav.cached_path if path and Path(path).exists(): - import shutil, subprocess - if shutil.which("wl-copy"): - _MIMES = {".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png", - ".gif": "image/gif", ".webp": "image/webp", ".mp4": "video/mp4", - ".webm": "video/webm"} - mime = _MIMES.get(Path(path).suffix.lower(), "application/octet-stream") - with open(path, "rb") as f: - subprocess.run(["wl-copy", "--type", mime], stdin=f, timeout=10) - else: - from PySide6.QtGui import QPixmap - pix = QPixmap(path) - if not pix.isNull(): - QApplication.clipboard().setPixmap(pix) + from PySide6.QtCore import QMimeData, QUrl + from PySide6.QtGui import QPixmap + mime = QMimeData() + mime.setUrls([QUrl.fromLocalFile(str(Path(path).resolve()))]) + pix = QPixmap(path) + if not pix.isNull(): + mime.setImageData(pix.toImage()) + QApplication.clipboard().setMimeData(mime) elif action == copy_url: QApplication.clipboard().setText(fav.file_url) elif action == copy_tags: diff --git a/booru_viewer/gui/library.py b/booru_viewer/gui/library.py index 2ac9ca5..bc37f44 100644 --- a/booru_viewer/gui/library.py +++ b/booru_viewer/gui/library.py @@ -321,22 +321,14 @@ class LibraryView(QWidget): elif action == open_folder: QDesktopServices.openUrl(QUrl.fromLocalFile(str(filepath.parent))) elif action == copy_file: - import shutil, subprocess - if shutil.which("wl-copy"): - _MIMES = {".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png", - ".gif": "image/gif", ".webp": "image/webp", ".mp4": "video/mp4", - ".webm": "video/webm"} - mime = _MIMES.get(filepath.suffix.lower(), "application/octet-stream") - try: - with open(filepath, "rb") as f: - subprocess.run(["wl-copy", "--type", mime], stdin=f, timeout=10) - except Exception as e: - log.warning(f"wl-copy failed: {e}") - else: - from PySide6.QtGui import QPixmap as _QP - pix = _QP(str(filepath)) - if not pix.isNull(): - QApplication.clipboard().setPixmap(pix) + from PySide6.QtCore import QMimeData + from PySide6.QtGui import QPixmap as _QP + mime_data = QMimeData() + mime_data.setUrls([QUrl.fromLocalFile(str(filepath.resolve()))]) + pix = _QP(str(filepath)) + if not pix.isNull(): + mime_data.setImageData(pix.toImage()) + QApplication.clipboard().setMimeData(mime_data) elif action == copy_path: QApplication.clipboard().setText(str(filepath)) elif action == delete_action: diff --git a/pyproject.toml b/pyproject.toml index 121fb90..270fd8a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "booru-viewer" -version = "0.1.6" +version = "0.1.7" description = "Local booru image browser with Qt6 GUI" requires-python = ">=3.11" dependencies = [