From c80ebf93831efabdd6f0b6aa195e82a81e694ef3 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Mon, 6 Apr 2026 20:35:47 +0200 Subject: [PATCH] fix: move drag-drop to MainWindow to bypass QListWidget viewport on Wayland --- main.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index 0378493..16f6972 100755 --- a/main.py +++ b/main.py @@ -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)