Fix dragging to allow dragging of multiple items

This commit is contained in:
Kovid Goyal 2010-10-04 14:54:07 -06:00
parent 640eaa8bd8
commit e0e0b42f1f

View File

@ -494,24 +494,35 @@ class BooksView(QTableView): # {{{
drag.setPixmap(cover) drag.setPixmap(cover)
return drag 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): 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() self.drag_start_pos = event.pos()
return QTableView.mousePressEvent(self, event) return QTableView.mousePressEvent(self, event)
def mouseMoveEvent(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 \ 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() \ (event.pos() - self.drag_start_pos).manhattanLength() \
< QApplication.startDragDistance(): < QApplication.startDragDistance():
return QTableView.mouseMoveEvent(self, event) return
index = self.indexAt(event.pos()) index = self.indexAt(event.pos())
if not index.isValid(): if not index.isValid():
return return
drag = self.drag_data() drag = self.drag_data()
drag.exec_(Qt.CopyAction) drag.exec_(Qt.CopyAction)
self.drag_start_pos = None
def dragEnterEvent(self, event): def dragEnterEvent(self, event):
if int(event.possibleActions() & Qt.CopyAction) + \ if int(event.possibleActions() & Qt.CopyAction) + \