mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-08 01:26:28 +00:00
Avoid selection updates on file saving
Triggers the selection update only once after saving finished.
This commit is contained in:
@@ -383,7 +383,7 @@ class File(QtCore.QObject, Item):
|
||||
for k, v in temp_info.items():
|
||||
self.orig_metadata[k] = v
|
||||
self.clear_errors()
|
||||
self.clear_pending()
|
||||
self.clear_pending(signal=False)
|
||||
self._add_path_to_metadata(self.orig_metadata)
|
||||
if images_changed:
|
||||
self.metadata_images_changed.emit()
|
||||
@@ -821,16 +821,17 @@ class File(QtCore.QObject, Item):
|
||||
def set_pending(self):
|
||||
if self.state != File.REMOVED:
|
||||
self.state = File.PENDING
|
||||
self.update_item()
|
||||
self.update_item(update_selection=False)
|
||||
|
||||
def clear_pending(self):
|
||||
def clear_pending(self, signal=True):
|
||||
if self.state == File.PENDING:
|
||||
self.state = File.NORMAL if self.similarity == 1.0 else File.CHANGED
|
||||
self.update_item()
|
||||
if signal:
|
||||
self.update_item(update_selection=False)
|
||||
|
||||
def update_item(self):
|
||||
def update_item(self, update_selection=True):
|
||||
if self.item:
|
||||
self.item.update()
|
||||
self.item.update(update_selection=update_selection)
|
||||
|
||||
def iterfiles(self, save=False):
|
||||
yield self
|
||||
|
||||
@@ -911,13 +911,13 @@ class ClusterItem(TreeItem):
|
||||
super().__init__(*args)
|
||||
self.setIcon(MainPanel.TITLE_COLUMN, ClusterItem.icon_dir)
|
||||
|
||||
def update(self):
|
||||
def update(self, update_selection=True):
|
||||
for i, column in enumerate(MainPanel.columns):
|
||||
self.setText(i, self.obj.column(column[1]))
|
||||
album = self.obj.related_album
|
||||
if self.obj.special and album and album.loaded:
|
||||
album.item.update(update_tracks=False)
|
||||
if self.isSelected():
|
||||
if update_selection and self.isSelected():
|
||||
TreeItem.window.update_selection(new_selection=False)
|
||||
|
||||
def add_file(self, file):
|
||||
@@ -945,7 +945,7 @@ class ClusterItem(TreeItem):
|
||||
|
||||
class AlbumItem(TreeItem):
|
||||
|
||||
def update(self, update_tracks=True):
|
||||
def update(self, update_tracks=True, update_selection=True):
|
||||
album = self.obj
|
||||
selection_changed = self.isSelected()
|
||||
if update_tracks:
|
||||
@@ -993,7 +993,7 @@ class AlbumItem(TreeItem):
|
||||
self.setToolTip(MainPanel.TITLE_COLUMN, _("Album unchanged"))
|
||||
for i, column in enumerate(MainPanel.columns):
|
||||
self.setText(i, album.column(column[1]))
|
||||
if selection_changed:
|
||||
if selection_changed and update_selection:
|
||||
TreeItem.window.update_selection(new_selection=False)
|
||||
# Workaround for PICARD-1446: Expand/collapse indicator for the release
|
||||
# is briefly missing on Windows
|
||||
@@ -1015,7 +1015,7 @@ class NatAlbumItem(AlbumItem):
|
||||
|
||||
class TrackItem(TreeItem):
|
||||
|
||||
def update(self, update_album=True, update_files=True):
|
||||
def update(self, update_album=True, update_files=True, update_selection=True):
|
||||
track = self.obj
|
||||
if track.num_linked_files == 1:
|
||||
file = track.files[0]
|
||||
@@ -1061,7 +1061,7 @@ class TrackItem(TreeItem):
|
||||
items = []
|
||||
for i in range(newnum - 1, oldnum - 1, -1):
|
||||
item = FileItem(track.files[i], False)
|
||||
item.update(update_track=False)
|
||||
item.update(update_track=False, update_selection=update_selection)
|
||||
items.append(item)
|
||||
self.addChildren(items)
|
||||
self.setExpanded(True)
|
||||
@@ -1074,15 +1074,15 @@ class TrackItem(TreeItem):
|
||||
self.setText(i, track.column(column[1]))
|
||||
self.setForeground(i, color)
|
||||
self.setBackground(i, bgcolor)
|
||||
if self.isSelected():
|
||||
if update_selection and self.isSelected():
|
||||
TreeItem.window.update_selection(new_selection=False)
|
||||
if update_album:
|
||||
self.parent().update(update_tracks=False)
|
||||
self.parent().update(update_tracks=False, update_selection=update_selection)
|
||||
|
||||
|
||||
class FileItem(TreeItem):
|
||||
|
||||
def update(self, update_track=True):
|
||||
def update(self, update_track=True, update_selection=True):
|
||||
file = self.obj
|
||||
self.setIcon(MainPanel.TITLE_COLUMN, FileItem.decide_file_icon(file))
|
||||
fingerprint_icon, fingerprint_tooltip = FileItem.decide_fingerprint_icon_info(file)
|
||||
@@ -1096,11 +1096,11 @@ class FileItem(TreeItem):
|
||||
self.setBackground(i, bgcolor)
|
||||
if file.errors:
|
||||
self.setToolTip(MainPanel.TITLE_COLUMN, _("Processing error(s): See the Errors tab in the File Info dialog"))
|
||||
if self.isSelected():
|
||||
if update_selection and self.isSelected():
|
||||
TreeItem.window.update_selection(new_selection=False)
|
||||
parent = self.parent()
|
||||
if isinstance(parent, TrackItem) and update_track:
|
||||
parent.update(update_files=False)
|
||||
parent.update(update_files=False, update_selection=update_selection)
|
||||
|
||||
@staticmethod
|
||||
def decide_file_icon(file):
|
||||
|
||||
Reference in New Issue
Block a user