fix: move drag-drop to MainWindow to bypass QListWidget viewport on Wayland
This commit is contained in:
@@ -618,11 +618,7 @@ class PlaylistWidget(QListWidget):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
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.setDragDropMode(QAbstractItemView.DragDropMode.NoDragDrop)
|
||||||
self.setAcceptDrops(True)
|
|
||||||
self.viewport().setAcceptDrops(True)
|
|
||||||
self.setMinimumWidth(200)
|
self.setMinimumWidth(200)
|
||||||
self.setWordWrap(True)
|
self.setWordWrap(True)
|
||||||
self._paths: list[str] = []
|
self._paths: list[str] = []
|
||||||
@@ -663,22 +659,6 @@ class PlaylistWidget(QListWidget):
|
|||||||
def _on_item_clicked(self, item: QListWidgetItem) -> None:
|
def _on_item_clicked(self, item: QListWidgetItem) -> None:
|
||||||
self._select(self.row(item))
|
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):
|
class SetupWorker(QThread):
|
||||||
"""Installs the ML venv. Streams output line-by-line via `line` signal."""
|
"""Installs the ML venv. Streams output line-by-line via `line` signal."""
|
||||||
@@ -852,6 +832,7 @@ class MainWindow(QMainWindow):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.setWindowTitle("8-cut")
|
self.setWindowTitle("8-cut")
|
||||||
self.resize(1100, 680)
|
self.resize(1100, 680)
|
||||||
|
self.setAcceptDrops(True)
|
||||||
|
|
||||||
# Services
|
# Services
|
||||||
self._db = ProcessedDB()
|
self._db = ProcessedDB()
|
||||||
@@ -1275,6 +1256,22 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
# --- Mask generation ---
|
# --- 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:
|
def _on_venv_installed(self) -> None:
|
||||||
self._btn_masks.setEnabled(True)
|
self._btn_masks.setEnabled(True)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user