diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index 52c280b2f6..047c2cf3cf 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -119,6 +119,12 @@ def mousePressEvent(self, event): return qt_item_view_base_class(self).mousePressEvent(self, event) +def mouseReleaseEvent(self, event): + if hasattr(self, 'handle_mouse_press_event'): + return self.handle_mouse_release_event(event) + return qt_item_view_base_class(self).mouseReleaseEvent(self, event) + + def drag_icon(self, cover, multiple): cover = cover.scaledToHeight(120, Qt.TransformationMode.SmoothTransformation) if multiple: @@ -263,7 +269,7 @@ def setup_dnd_interface(cls_or_self): cls = cls_or_self fmap = globals() for x in ( - 'dragMoveEvent', 'event_has_mods', 'mousePressEvent', 'mouseMoveEvent', + 'dragMoveEvent', 'event_has_mods', 'mousePressEvent', 'mouseMoveEvent', 'mouseReleaseEvent', 'drag_data', 'drag_icon', 'dragEnterEvent', 'dropEvent', 'paths_from_event'): func = fmap[x] setattr(cls, x, func) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 297cfbb760..00742c8951 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -1229,19 +1229,22 @@ class BooksView(QTableView): # {{{ # ensure clicked row is always selected index, QItemSelectionModel.SelectionFlag.Select | QItemSelectionModel.SelectionFlag.Rows) else: - if ( - m == Qt.KeyboardModifier.NoModifier and ev.button() == Qt.MouseButton.LeftButton and - self.editTriggers() & QAbstractItemView.EditTrigger.SelectedClicked - ): - # As of Qt 6 , Qt does not clear a multi-row selection when the - # edit triggers contain SelectedClicked and the clicked row is - # already selected, so do it ourselves - index = self.indexAt(ev.pos()) - sm = self.selectionModel() - if index.isValid() and sm.isSelected(index): - self.select_rows((index,), using_ids=False, change_current=False, scroll=False) QTableView.mousePressEvent(self, ev) + def handle_mouse_release_event(self, ev): + if ( + ev.modifiers() == Qt.KeyboardModifier.NoModifier and ev.button() == Qt.MouseButton.LeftButton and + self.editTriggers() & QAbstractItemView.EditTrigger.SelectedClicked + ): + # As of Qt 6, Qt does not clear a multi-row selection when the + # edit triggers contain SelectedClicked and the clicked row is + # already selected, so do it ourselves + index = self.indexAt(ev.pos()) + sm = self.selectionModel() + if index.isValid() and sm.isSelected(index): + self.select_rows((index,), using_ids=False, change_current=False, scroll=False) + QTableView.mouseReleaseEvent(self, ev) + @property def column_map(self): return self._model.column_map