diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 051f871e73..57ea04fb75 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -490,28 +490,39 @@ class BooksView(QTableView): # {{{ drag.setMimeData(md) cover = self.drag_icon(m.cover(self.currentIndex().row()), len(selected) > 1) - drag.setHotSpot(QPoint(cover.width()//3, cover.height()//3)) + drag.setHotSpot(QPoint(-15, -15)) 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) + \ @@ -645,7 +656,7 @@ class DeviceBooksView(BooksView): # {{{ drag.setMimeData(md) cover = self.drag_icon(m.cover(self.currentIndex().row()), len(paths) > 1) - drag.setHotSpot(QPoint(cover.width()//3, cover.height()//3)) + drag.setHotSpot(QPoint(-15, -15)) drag.setPixmap(cover) return drag diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 442b909a8a..0824dedae6 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -83,6 +83,7 @@ class TagsView(QTreeView): # {{{ self.setItemDelegate(TagDelegate(self)) self.made_connections = False self.setAcceptDrops(True) + self.setDragDropMode(self.DropOnly) self.setDropIndicatorShown(True) def set_database(self, db, tag_match, sort_by):