From 640eaa8bd885b587c7526f067b0f465c6ea2da8b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 4 Oct 2010 14:24:06 -0600 Subject: [PATCH 1/2] Drag and drop: Put the mouse cursor in the upper left corner --- src/calibre/gui2/library/views.py | 4 ++-- src/calibre/gui2/tag_view.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 051f871e73..117668da22 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -490,7 +490,7 @@ 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 @@ -645,7 +645,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 91b07c4d7e..12f567bf54 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -80,6 +80,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): From e0e0b42f1f40124efd3f349cc066aeca45ff77cc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 4 Oct 2010 14:54:07 -0600 Subject: [PATCH 2/2] 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) + \