diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 49e5c497fe..b2b2597434 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -1057,6 +1057,7 @@ class DeviceBooksModel(BooksModel): # {{{ booklist_dirtied = pyqtSignal() upload_collections = pyqtSignal(object) + resize_rows = pyqtSignal() def __init__(self, parent): BooksModel.__init__(self, parent) @@ -1163,6 +1164,11 @@ class DeviceBooksModel(BooksModel): # {{{ return flags def search(self, text, reset=True): + # This should not be here, but since the DeviceBooksModel does not + # implement count_changed and I am too lazy to fix that, this kludge + # will have to do + self.resize_rows.emit() + if not text or not text.strip(): self.map = list(range(len(self.db))) else: diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 452cab2430..c0d5a0e827 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -90,6 +90,7 @@ class BooksView(QTableView): # {{{ def __init__(self, parent, modelcls=BooksModel, use_edit_metadata_dialog=True): QTableView.__init__(self, parent) + self.row_sizing_done = False if not tweaks['horizontal_scrolling_per_column']: self.setHorizontalScrollMode(self.ScrollPerPixel) @@ -141,6 +142,8 @@ class BooksView(QTableView): # {{{ self.display_parent = parent self._model = modelcls(self) self.setModel(self._model) + self._model.count_changed_signal.connect(self.do_row_sizing, + type=Qt.QueuedConnection) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSortingEnabled(True) self.selectionModel().currentRowChanged.connect(self._model.current_changed) @@ -521,13 +524,17 @@ class BooksView(QTableView): # {{{ self.apply_state(old_state, max_sort_levels=max_levels) self.column_header.blockSignals(False) - # Resize all rows to have the correct height - if self.model().rowCount(QModelIndex()) > 0: - self.resizeRowToContents(0) - self.verticalHeader().setDefaultSectionSize(self.rowHeight(0)) + self.do_row_sizing() self.was_restored = True + def do_row_sizing(self): + # Resize all rows to have the correct height + if not self.row_sizing_done and self.model().rowCount(QModelIndex()) > 0: + self.resizeRowToContents(0) + self.verticalHeader().setDefaultSectionSize(self.rowHeight(0)) + self.row_sizing_done = True + def resize_column_to_fit(self, column): col = self.column_map.index(column) self.column_resized(col, self.columnWidth(col), self.columnWidth(col)) @@ -943,6 +950,8 @@ class DeviceBooksView(BooksView): # {{{ def __init__(self, parent): BooksView.__init__(self, parent, DeviceBooksModel, use_edit_metadata_dialog=False) + self._model.resize_rows.connect(self.do_row_sizing, + type=Qt.QueuedConnection) self.can_add_columns = False self.columns_resized = False self.resize_on_select = False