diff --git a/src/calibre/gui2/viewer/bookmarks.py b/src/calibre/gui2/viewer/bookmarks.py index 8868d77ad5..8399de2834 100644 --- a/src/calibre/gui2/viewer/bookmarks.py +++ b/src/calibre/gui2/viewer/bookmarks.py @@ -35,15 +35,23 @@ class BookmarksList(QListWidget): self.ac_delete = ac = QAction(QIcon(I('trash.png')), _('Remove this bookmark'), self) self.addAction(ac) + @property + def current_non_removed_item(self): + ans = self.currentItem() + if ans is not None: + bm = ans.data(Qt.UserRole) + if not bm.get('removed'): + return ans + def keyPressEvent(self, ev): if ev.key() in (Qt.Key_Enter, Qt.Key_Return): - i = self.currentItem() + i = self.current_non_removed_item if i is not None: self.bookmark_activated.emit(i) ev.accept() return if ev.key() in (Qt.Key_Delete, Qt.Key_Backspace): - i = self.currentItem() + i = self.current_non_removed_item if i is not None: self.ac_delete.trigger() ev.accept() @@ -58,6 +66,8 @@ class BookmarksList(QListWidget): current_item = items[row] items = [i for i in items if not i.isHidden()] count = len(items) + if not count: + return row = items.index(current_item) nrow = (row + delta + count) % count self.setCurrentItem(items[nrow]) @@ -240,7 +250,7 @@ class BookmarkManager(QWidget): self.edited.emit(self.get_bookmarks()) def delete_bookmark(self): - item = self.bookmarks_list.currentItem() + item = self.bookmarks_list.current_non_removed_item if item is not None: bm = item.data(Qt.UserRole) if confirm( @@ -256,7 +266,7 @@ class BookmarkManager(QWidget): self.edited.emit(self.get_bookmarks()) def edit_bookmark(self): - item = self.bookmarks_list.currentItem() + item = self.bookmarks_list.current_non_removed_item if item is not None: self.bookmarks_list.editItem(item)