Fix regression in previous release that caused the Tag browser view to jump around when renaming items

This commit is contained in:
Kovid Goyal 2017-06-20 09:58:39 +05:30
parent bcb3f1c555
commit acc76f923a
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 17 additions and 4 deletions

View File

@ -297,6 +297,7 @@ class TagsModel(QAbstractItemModel): # {{{
def __init__(self, parent, prefs=gprefs): def __init__(self, parent, prefs=gprefs):
QAbstractItemModel.__init__(self, parent) QAbstractItemModel.__init__(self, parent)
self.use_position_based_index_on_next_recount = False
self.prefs = prefs self.prefs = prefs
self.node_map = {} self.node_map = {}
self.category_nodes = [] self.category_nodes = []
@ -1090,6 +1091,7 @@ class TagsModel(QAbstractItemModel): # {{{
nkey_lower = icu_lower(nkey) nkey_lower = icu_lower(nkey)
if ckey == nkey: if ckey == nkey:
self.use_position_based_index_on_next_recount = True
return True return True
for c in sorted(user_cats.keys(), key=sort_key): for c in sorted(user_cats.keys(), key=sort_key):
@ -1112,6 +1114,7 @@ class TagsModel(QAbstractItemModel): # {{{
user_cats[nkey + rest] = user_cats[ckey + rest] user_cats[nkey + rest] = user_cats[ckey + rest]
del user_cats[ckey + rest] del user_cats[ckey + rest]
self.user_categories_edited.emit(user_cats, nkey) # Does a refresh self.user_categories_edited.emit(user_cats, nkey) # Does a refresh
self.use_position_based_index_on_next_recount = True
return True return True
key = item.tag.category key = item.tag.category
@ -1129,10 +1132,12 @@ class TagsModel(QAbstractItemModel): # {{{
error_dialog(self.gui_parent, _('Duplicate search name'), error_dialog(self.gui_parent, _('Duplicate search name'),
_('The saved search name %s is already used.')%val).exec_() _('The saved search name %s is already used.')%val).exec_()
return False return False
self.use_position_based_index_on_next_recount = True
self.db.saved_search_rename(unicode(item.data(role) or ''), val) self.db.saved_search_rename(unicode(item.data(role) or ''), val)
item.tag.name = val item.tag.name = val
self.search_item_renamed.emit() # Does a refresh self.search_item_renamed.emit() # Does a refresh
else: else:
self.use_position_based_index_on_next_recount = True
restrict_to_book_ids=self.get_book_ids_to_use() if item.use_vl else None restrict_to_book_ids=self.get_book_ids_to_use() if item.use_vl else None
self.db.new_api.rename_items(key, {item.tag.id: val}, self.db.new_api.rename_items(key, {item.tag.id: val},
restrict_to_book_ids=restrict_to_book_ids) restrict_to_book_ids=restrict_to_book_ids)

View File

@ -780,7 +780,12 @@ class TagsView(QTreeView): # {{{
ci = self.currentIndex() ci = self.currentIndex()
if not ci.isValid(): if not ci.isValid():
ci = self.indexAt(QPoint(10, 10)) ci = self.indexAt(QPoint(10, 10))
path = self.model().named_path_for_index(ci) if self.is_visible(ci) else None use_pos = self._model.use_position_based_index_on_next_recount
self._model.use_position_based_index_on_next_recount = False
if use_pos:
path = self._model.path_for_index(ci) if self.is_visible(ci) else None
else:
path = self._model.named_path_for_index(ci) if self.is_visible(ci) else None
expanded_categories, state_map = self.get_state() expanded_categories, state_map = self.get_state()
self._model.rebuild_node_tree(state_map=state_map) self._model.rebuild_node_tree(state_map=state_map)
self.blockSignals(True) self.blockSignals(True)
@ -789,9 +794,12 @@ class TagsView(QTreeView): # {{{
if idx is not None and idx.isValid(): if idx is not None and idx.isValid():
self.expand(idx) self.expand(idx)
if path is not None: if path is not None:
index = self._model.index_for_named_path(path) if use_pos:
if index.isValid(): self.show_item_at_path(path)
self.show_item_at_index(index) else:
index = self._model.index_for_named_path(path)
if index.isValid():
self.show_item_at_index(index)
self.blockSignals(False) self.blockSignals(False)
def show_item_at_path(self, path, box=False, def show_item_at_path(self, path, box=False,