mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
Workaround for failed comparison of items in KFileItemModelRolesUpdater
The real fix is in the KDE/4.10 branch of kdelibs (commit b8f64ca3f4b6311519c21046031d66d9d0a570c6). We work around the problem that the KFileItem that a preview has been requested for is different from the KFileItems in the sets m_pendingVisibleItems and m_pendingInvisibleItems by refreshing those sets when we detect that the bug has been triggered. BUG: 304986 FIXED-IN: 4.9.3
This commit is contained in:
parent
282f5cb869
commit
37a54c053e
1 changed files with 26 additions and 0 deletions
|
@ -439,9 +439,22 @@ void KFileItemModelRolesUpdater::slotSortRoleChanged(const QByteArray& current,
|
|||
|
||||
void KFileItemModelRolesUpdater::slotGotPreview(const KFileItem& item, const QPixmap& pixmap)
|
||||
{
|
||||
const int oldNumberOfPendingItems = m_pendingVisibleItems.count() + m_pendingInvisibleItems.count();
|
||||
|
||||
m_pendingVisibleItems.remove(item);
|
||||
m_pendingInvisibleItems.remove(item);
|
||||
|
||||
const int newNumberOfPendingItems = m_pendingVisibleItems.count() + m_pendingInvisibleItems.count();
|
||||
|
||||
if (oldNumberOfPendingItems == newNumberOfPendingItems) {
|
||||
// 'item' could not be removed from either of the sets. It looks like
|
||||
// we have hit bug 304986. Replace the items in the sets by the items
|
||||
// in the model to work around the problem.
|
||||
// NOTE: This workaround is not needed any more in KDE 4.10.
|
||||
m_pendingVisibleItems = sortedItems(m_pendingVisibleItems).toSet();
|
||||
m_pendingInvisibleItems = sortedItems(m_pendingInvisibleItems).toSet();
|
||||
}
|
||||
|
||||
const int index = m_model->index(item);
|
||||
if (index < 0) {
|
||||
return;
|
||||
|
@ -499,9 +512,22 @@ void KFileItemModelRolesUpdater::slotGotPreview(const KFileItem& item, const QPi
|
|||
|
||||
void KFileItemModelRolesUpdater::slotPreviewFailed(const KFileItem& item)
|
||||
{
|
||||
const int oldNumberOfPendingItems = m_pendingVisibleItems.count() + m_pendingInvisibleItems.count();
|
||||
|
||||
m_pendingVisibleItems.remove(item);
|
||||
m_pendingInvisibleItems.remove(item);
|
||||
|
||||
const int newNumberOfPendingItems = m_pendingVisibleItems.count() + m_pendingInvisibleItems.count();
|
||||
|
||||
if (oldNumberOfPendingItems == newNumberOfPendingItems) {
|
||||
// 'item' could not be removed from either of the sets. It looks like
|
||||
// we have hit bug 304986. Replace the items in the sets by the items
|
||||
// in the model to work around the problem.
|
||||
// NOTE: This workaround is not needed any more in KDE 4.10.
|
||||
m_pendingVisibleItems = sortedItems(m_pendingVisibleItems).toSet();
|
||||
m_pendingInvisibleItems = sortedItems(m_pendingInvisibleItems).toSet();
|
||||
}
|
||||
|
||||
const bool clearPreviews = m_clearPreviews;
|
||||
m_clearPreviews = true;
|
||||
applyResolvedRoles(item, ResolveAll);
|
||||
|
|
Loading…
Reference in a new issue