diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 2fd2135956..7b88a943bb 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -110,6 +110,7 @@ defs['bd_overlay_cover_size'] = False defs['tags_browser_category_icons'] = {} defs['cover_browser_reflections'] = True defs['extra_row_spacing'] = 0 +defs['refresh_book_list_on_bulk_edit'] = True del defs # }}} diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index 729de33c7f..4817db953c 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -10,7 +10,7 @@ from functools import partial from PyQt4.Qt import QMenu, QModelIndex, QTimer, QIcon -from calibre.gui2 import error_dialog, Dispatcher, question_dialog +from calibre.gui2 import error_dialog, Dispatcher, question_dialog, gprefs from calibre.gui2.dialogs.metadata_bulk import MetadataBulkDialog from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.dialogs.device_category_editor import DeviceCategoryEditor @@ -366,8 +366,11 @@ class EditMetadataAction(InterfaceAction): self.gui.tags_view.blockSignals(False) if changed: m = self.gui.library_view.model() - m.refresh(reset=False) - m.research() + if gprefs['refresh_book_list_on_bulk_edit']: + m.refresh(reset=False) + m.research() + else: + m.refresh_ids(book_ids) self.gui.tags_view.recount() if self.gui.cover_flow: self.gui.cover_flow.dataChanged() diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 84ca9135f0..0e4b2a1572 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -317,6 +317,8 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): Ui_MetadataBulkDialog.__init__(self) self.model = model self.db = model.db + self.refresh_book_list.setChecked(gprefs['refresh_book_list_on_bulk_edit']) + self.refresh_book_list.toggled.connect(self.save_refresh_booklist) self.ids = [self.db.id(r) for r in rows] self.box_title.setText('

' + _('Editing meta information for %d books') % @@ -380,6 +382,9 @@ class MetadataBulkDialog(ResizableDialog, Ui_MetadataBulkDialog): self.authors.setFocus(Qt.OtherFocusReason) self.exec_() + def save_refresh_booklist(self, *args): + gprefs['refresh_book_list_on_bulk_edit'] = bool(self.refresh_book_list.isChecked()) + def save_state(self, *args): gprefs['bulk_metadata_window_geometry'] = \ bytearray(self.saveGeometry()) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index b03f3e8e94..2b48e635be 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -45,7 +45,7 @@ 0 0 950 - 576 + 577 @@ -1113,7 +1113,7 @@ not multiple and the destination field is multiple 0 0 934 - 213 + 256 @@ -1170,14 +1170,30 @@ not multiple and the destination field is multiple - - - Qt::Horizontal - - - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + If enabled, the book list will be re-sorted and any existing +search or Virtual LIbrary will be refreshed after the edit +is completed. This can be slow on large libraries. + + + &Refresh book list after edit + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + @@ -1241,7 +1257,6 @@ not multiple and the destination field is multiple scrollArea central_widget query_field - button_box save_button remove_button search_field