diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py
index ac04652efa..bd9728989b 100644
--- a/src/calibre/gui2/actions/edit_metadata.py
+++ b/src/calibre/gui2/actions/edit_metadata.py
@@ -173,6 +173,8 @@ class EditMetadataAction(InterfaceAction):
'''
rows = [r.row() for r in \
self.gui.library_view.selectionModel().selectedRows()]
+ m = self.gui.library_view.model()
+ ids = [m.id(r) for r in rows]
if not rows or len(rows) == 0:
d = error_dialog(self.gui, _('Cannot edit metadata'),
_('No books selected'))
@@ -191,6 +193,7 @@ class EditMetadataAction(InterfaceAction):
self.gui.tags_view.recount()
if self.gui.cover_flow:
self.gui.cover_flow.dataChanged()
+ self.gui.library_view.select_rows(ids)
# Merge books {{{
def merge_books(self, safe_merge=False):
diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py
index b0ba049a7f..2e5c7838ca 100644
--- a/src/calibre/gui2/dialogs/metadata_bulk.py
+++ b/src/calibre/gui2/dialogs/metadata_bulk.py
@@ -220,6 +220,8 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
if val:
val.sort(cmp=lambda x,y: cmp(x.lower(), y.lower()))
val = val[0]
+ if txt == 'authors':
+ val = val.replace('|', ',')
else:
val = ''
else:
@@ -303,6 +305,8 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
# The standard tags and authors values want to be lists.
# All custom columns are to be strings
val = fm['is_multiple'].join(val)
+ elif field == 'authors':
+ val = [v.replace('|', ',') for v in val]
else:
val = apply_pattern(val)
diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui
index 18d6760ea7..aca7b0cb75 100644
--- a/src/calibre/gui2/dialogs/metadata_bulk.ui
+++ b/src/calibre/gui2/dialogs/metadata_bulk.ui
@@ -328,6 +328,9 @@ Future conversion of these books will use the default settings.
true
+
+ true
+
-
diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py
index d67d286aeb..724454dccf 100644
--- a/src/calibre/gui2/library/views.py
+++ b/src/calibre/gui2/library/views.py
@@ -479,6 +479,36 @@ class BooksView(QTableView): # {{{
sm = self.selectionModel()
sm.select(index, sm.ClearAndSelect|sm.Rows)
+ def select_rows(self, identifiers, using_ids=True, change_current=True,
+ scroll=True):
+ '''
+ Select rows identified by identifiers. identifiers can be a set of ids,
+ row numbers or QModelIndexes.
+ '''
+ selmode = self.selectionMode()
+ self.setSelectionMode(QAbstractItemView.MultiSelection)
+ try:
+ rows = set([x.row() if hasattr(x, 'row') else x for x in
+ identifiers])
+ if using_ids:
+ rows = set([])
+ identifiers = set(identifiers)
+ m = self.model()
+ for row in range(m.rowCount(QModelIndex())):
+ if m.id(row) in identifiers:
+ rows.add(row)
+ if rows:
+ row = list(sorted(rows))[0]
+ if change_current:
+ self.set_current_row(row, select=False)
+ if scroll:
+ self.scroll_to_row(row)
+ self.clearSelection()
+ for r in rows:
+ self.selectRow(r)
+ finally:
+ self.setSelectionMode(selmode)
+
def close(self):
self._model.close()