v0.1.7 — Unified QMimeData clipboard across all tabs

This commit is contained in:
pax 2026-04-05 15:44:00 -05:00
parent 7b6a9ab911
commit e59e405d73
3 changed files with 17 additions and 30 deletions

View File

@ -280,19 +280,14 @@ class BookmarksView(QWidget):
elif action == copy_file: elif action == copy_file:
path = fav.cached_path path = fav.cached_path
if path and Path(path).exists(): if path and Path(path).exists():
import shutil, subprocess from PySide6.QtCore import QMimeData, QUrl
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 from PySide6.QtGui import QPixmap
mime = QMimeData()
mime.setUrls([QUrl.fromLocalFile(str(Path(path).resolve()))])
pix = QPixmap(path) pix = QPixmap(path)
if not pix.isNull(): if not pix.isNull():
QApplication.clipboard().setPixmap(pix) mime.setImageData(pix.toImage())
QApplication.clipboard().setMimeData(mime)
elif action == copy_url: elif action == copy_url:
QApplication.clipboard().setText(fav.file_url) QApplication.clipboard().setText(fav.file_url)
elif action == copy_tags: elif action == copy_tags:

View File

@ -321,22 +321,14 @@ class LibraryView(QWidget):
elif action == open_folder: elif action == open_folder:
QDesktopServices.openUrl(QUrl.fromLocalFile(str(filepath.parent))) QDesktopServices.openUrl(QUrl.fromLocalFile(str(filepath.parent)))
elif action == copy_file: elif action == copy_file:
import shutil, subprocess from PySide6.QtCore import QMimeData
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 from PySide6.QtGui import QPixmap as _QP
mime_data = QMimeData()
mime_data.setUrls([QUrl.fromLocalFile(str(filepath.resolve()))])
pix = _QP(str(filepath)) pix = _QP(str(filepath))
if not pix.isNull(): if not pix.isNull():
QApplication.clipboard().setPixmap(pix) mime_data.setImageData(pix.toImage())
QApplication.clipboard().setMimeData(mime_data)
elif action == copy_path: elif action == copy_path:
QApplication.clipboard().setText(str(filepath)) QApplication.clipboard().setText(str(filepath))
elif action == delete_action: elif action == delete_action:

View File

@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "booru-viewer" name = "booru-viewer"
version = "0.1.6" version = "0.1.7"
description = "Local booru image browser with Qt6 GUI" description = "Local booru image browser with Qt6 GUI"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [