fix: move drag-drop to MainWindow to bypass QListWidget viewport on Wayland

This commit is contained in:
2026-04-06 20:35:47 +02:00
parent 3d92a66660
commit c80ebf9383
+17 -20
View File
@@ -618,11 +618,7 @@ class PlaylistWidget(QListWidget):
def __init__(self):
super().__init__()
# Disable built-in drag-drop mode so Qt doesn't intercept drops
# through the viewport (which breaks on Wayland/KDE).
self.setDragDropMode(QAbstractItemView.DragDropMode.NoDragDrop)
self.setAcceptDrops(True)
self.viewport().setAcceptDrops(True)
self.setMinimumWidth(200)
self.setWordWrap(True)
self._paths: list[str] = []
@@ -663,22 +659,6 @@ class PlaylistWidget(QListWidget):
def _on_item_clicked(self, item: QListWidgetItem) -> None:
self._select(self.row(item))
def dragEnterEvent(self, event: QDragEnterEvent) -> None:
if event.mimeData().hasUrls():
event.acceptProposedAction()
def dragMoveEvent(self, event) -> None:
if event.mimeData().hasUrls():
event.acceptProposedAction()
def dropEvent(self, event: QDropEvent) -> None:
paths = [
u.toLocalFile() for u in event.mimeData().urls()
if os.path.isfile(u.toLocalFile())
]
if paths:
self.add_files(paths)
class SetupWorker(QThread):
"""Installs the ML venv. Streams output line-by-line via `line` signal."""
@@ -852,6 +832,7 @@ class MainWindow(QMainWindow):
super().__init__()
self.setWindowTitle("8-cut")
self.resize(1100, 680)
self.setAcceptDrops(True)
# Services
self._db = ProcessedDB()
@@ -1275,6 +1256,22 @@ class MainWindow(QMainWindow):
# --- Mask generation ---
def dragEnterEvent(self, event: QDragEnterEvent) -> None:
if event.mimeData().hasUrls():
event.acceptProposedAction()
def dragMoveEvent(self, event) -> None:
if event.mimeData().hasUrls():
event.acceptProposedAction()
def dropEvent(self, event: QDropEvent) -> None:
paths = [
u.toLocalFile() for u in event.mimeData().urls()
if os.path.isfile(u.toLocalFile())
]
if paths:
self._playlist.add_files(paths)
def _on_venv_installed(self) -> None:
self._btn_masks.setEnabled(True)