diff --git a/src/calibre/gui2/actions/delete.py b/src/calibre/gui2/actions/delete.py index fc7f0e4522..92e794338c 100644 --- a/src/calibre/gui2/actions/delete.py +++ b/src/calibre/gui2/actions/delete.py @@ -302,7 +302,7 @@ class DeleteAction(InterfaceAction): self.gui.status_bar.show_message(_('Deleting books from device.'), 1000) if row > -1: nrow = row - 1 if row > 0 else row + 1 - cv.set_current_row(max(0, nrow)) + cv.set_current_row(min(cv.model().rowCount(None), max(0, nrow))) def delete_covers(self, *args): ids = self._get_selected_ids() @@ -421,4 +421,4 @@ class DeleteAction(InterfaceAction): self.gui.status_bar.show_message(_('Deleting books from device.'), 1000) if row > -1: nrow = row - 1 if row > 0 else row + 1 - cv.set_current_row(max(0, nrow)) + cv.set_current_row(min(cv.model().rowCount(None), max(0, nrow))) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 4c0ced0bcd..d0066aa1a7 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -1168,6 +1168,9 @@ class DeviceMixin(object): # {{{ ''' Called once deletion is done on the device ''' + cv, row = self.current_view(), -1 + if cv is not self.library_view: + row = cv.currentIndex().row() for view in (self.memory_view, self.card_a_view, self.card_b_view): view.model().deletion_done(job, job.failed) if job.failed: @@ -1186,11 +1189,14 @@ class DeviceMixin(object): # {{{ # if set_books_in_library did not. if not self.set_books_in_library(self.booklists(), reset=True, add_as_step_to_job=job, do_device_sync=False): + self.upload_booklists(job) # We need to reset the ondevice flags in the library. Use a big hammer, # so we don't need to worry about whether some succeeded or not. self.refresh_ondevice() + if row > -1: + cv.set_current_row(row) try: if not self.current_view().currentIndex().isValid(): self.current_view().set_current_row() @@ -1568,9 +1574,14 @@ class DeviceMixin(object): # {{{ self.device_manager.device.icon) # reset the views so that up-to-date info is shown. These need to be # here because some drivers update collections in sync_booklists + cv, row = self.current_view(), -1 + if cv is not self.library_view: + row = cv.currentIndex().row() self.memory_view.reset() self.card_a_view.reset() self.card_b_view.reset() + if row > -1: + cv.set_current_row(row) def _upload_collections(self, job): if job.failed: