From 3300ddec540fa034e4a53ae03ee2d43a526b7b2f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 30 Jan 2018 11:28:20 +0530 Subject: [PATCH] Make selection mirroring a little more intelligent --- src/calibre/gui2/library/views.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index eea3edefec..097e9a4d2c 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -300,6 +300,7 @@ class BooksView(QTableView): # {{{ self._model.sorting_done.connect(self.sorting_done, type=Qt.QueuedConnection) self.set_row_header_visibility() + self.allow_mirroring = True if modelcls is not BooksModel: self.pin_view.setVisible(False) else: @@ -307,18 +308,20 @@ class BooksView(QTableView): # {{{ self.pin_view.verticalScrollBar().valueChanged.connect(self.verticalScrollBar().setValue) self.verticalScrollBar().valueChanged.connect(self.pin_view.verticalScrollBar().setValue) for wv in self, self.pin_view: - wv.selectionModel().currentRowChanged.connect(self.mirror_selection_between_views) - wv.selectionModel().selectionChanged.connect(self.mirror_selection_between_views) + wv.selectionModel().currentRowChanged.connect(partial(self.mirror_selection_between_views, wv)) + wv.selectionModel().selectionChanged.connect(partial(self.mirror_selection_between_views, wv)) def set_pin_view_visibility(self, visible=False): self.pin_view.setVisible(visible) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff if visible else Qt.ScrollBarAsNeeded) - def mirror_selection_between_views(self): - src = self if self.hasFocus() else self.pin_view - dest = self.pin_view if self.hasFocus() else self - dest.selectionModel().select(src.selectionModel().selection(), QItemSelectionModel.ClearAndSelect) - dest.selectionModel().setCurrentIndex(src.selectionModel().currentIndex(), QItemSelectionModel.NoUpdate) + def mirror_selection_between_views(self, src): + if self.allow_mirroring: + dest = self.pin_view if src is self else self + self.allow_mirroring = False + dest.selectionModel().select(src.selectionModel().selection(), QItemSelectionModel.ClearAndSelect) + dest.selectionModel().setCurrentIndex(src.selectionModel().currentIndex(), QItemSelectionModel.NoUpdate) + self.allow_mirroring = True # Column Header Context Menu {{{ def column_header_context_handler(self, action=None, column=None):