From c91d21e18e76c322b76424c9e2850a48467837da Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 9 Feb 2021 09:33:03 +1000 Subject: [PATCH] don't select contiguously with shift+click; enable multiple selection https://github.com/ankitects/anki/issues/1011 --- qt/aqt/sidebar.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/qt/aqt/sidebar.py b/qt/aqt/sidebar.py index f58c7e746..2aef97283 100644 --- a/qt/aqt/sidebar.py +++ b/qt/aqt/sidebar.py @@ -299,10 +299,9 @@ class SidebarTreeView(QTreeView): self.setHeaderHidden(True) self.setIndentation(15) self.setAutoExpandDelay(600) - # this doesn't play nicely with shift+click to OR items - we may want - # to put it behind a 'multi-select' mode - # self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) - + # pylint: disable=no-member + mode = QAbstractItemView.SelectionMode.ExtendedSelection # type: ignore + self.setSelectionMode(mode) self.setDragDropMode(QAbstractItemView.InternalMove) self.setDragDropOverwriteMode(False) @@ -397,6 +396,18 @@ class SidebarTreeView(QTreeView): else: super().keyPressEvent(event) + # don't extend selection when shift+clicking with mouse (conflicts + # with OR-ing). User can still shift+up/down to select contiguously. + def selectionCommand( + self, index: QModelIndex, event: QEvent = None + ) -> QItemSelectionModel.SelectionFlags: + flags = super().selectionCommand(index, event) + mods = self.mw.app.keyboardModifiers() + if isinstance(event, QMouseEvent) and mods & Qt.ShiftModifier: + # pylint: disable=no-member + flags &= ~QItemSelectionModel.SelectionFlag.Current # type: ignore + return flags + ########### def handle_drag_drop(self, sources: List[SidebarItem], target: SidebarItem) -> bool: