From e0e0b42f1f40124efd3f349cc066aeca45ff77cc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 4 Oct 2010 14:54:07 -0600 Subject: [PATCH] Fix dragging to allow dragging of multiple items --- src/calibre/gui2/library/views.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 117668da22..57ea04fb75 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -494,24 +494,35 @@ class BooksView(QTableView): # {{{ drag.setPixmap(cover) return drag + def event_has_mods(self, event=None): + mods = event.modifiers() if event is not None else \ + QApplication.keyboardModifiers() + return mods & Qt.ControlModifier or mods & Qt.ShiftModifier + def mousePressEvent(self, event): - if event.button() == Qt.LeftButton: + if event.button() == Qt.LeftButton and not self.event_has_mods(): self.drag_start_pos = event.pos() return QTableView.mousePressEvent(self, event) def mouseMoveEvent(self, event): + if self.drag_start_pos is None: + return QTableView.mouseMoveEvent(self, event) + + if self.event_has_mods(): + self.drag_start_pos = None + return + if not (event.buttons() & Qt.LeftButton) or \ - self.drag_start_pos is None or \ - QApplication.keyboardModifiers() != Qt.NoModifier or \ (event.pos() - self.drag_start_pos).manhattanLength() \ < QApplication.startDragDistance(): - return QTableView.mouseMoveEvent(self, event) + return index = self.indexAt(event.pos()) if not index.isValid(): return drag = self.drag_data() drag.exec_(Qt.CopyAction) + self.drag_start_pos = None def dragEnterEvent(self, event): if int(event.possibleActions() & Qt.CopyAction) + \