q->connect(job, &KIO::PreviewJob::gotPreview, q, [this, job](const KFileItem &item, const QPixmap &pixmap) {
addToPreviewQueue(item, pixmap, job);
+ m_dirModel->setData(m_dirModel->indexForItem(item), job->handlesSequences(), KDirModel::HandleSequencesRole);
+ });
+
+ q->connect(job, &KIO::PreviewJob::failed, q, [this, job](const KFileItem &item) {
+ m_dirModel->setData(m_dirModel->indexForItem(item), job->handlesSequences(), KDirModel::HandleSequencesRole);
});
q->connect(job, &KIO::PreviewJob::finished, q, [this, job]() {
item.standardThumbnailer = plugin.description() == QStringLiteral("standardthumbnailer");
item.plugin = plugin;
items.push_back(item);
+ bool handlesSequencesValue = item.plugin.value(QStringLiteral("HandleSequences"), false);
+ thumbnailWorkerMetaData.insert(QStringLiteral("handlesSequences"), QString::number(handlesSequencesValue));
if (!bNeedCache && bSave && plugin.value(QStringLiteral("CacheThumbnail"), true)) {
const QUrl url = fileItem.targetUrl();
KDirModel *dirModel = dynamic_cast<KDirModel *>(model);
if (dirModel) {
// qDebug() << "requesting" << currentSequenceIndex;
- dirModel->requestSequenceIcon(index, currentSequenceIndex);
- iconSequenceTimer.start(); // Some upper-bound interval is needed, in case items are not generated
+ // Only request sequence icons for items that have them
+ if (dirModel->data(index, KDirModel::HandleSequencesRole).toBool()) {
+ dirModel->requestSequenceIcon(index, currentSequenceIndex);
+ iconSequenceTimer.start(); // Some upper-bound interval is needed, in case items are not generated
+ }
}
}
m_preview = icn;
}
+ bool previewHandlesSequences()
+ {
+ return m_previewHandlesSequences;
+ }
+
+ void setPreviewHandlesSequences(bool handlesSequences)
+ {
+ m_previewHandlesSequences = handlesSequences;
+ }
+
private:
KFileItem m_item;
KDirModelDirNode *const m_parent;
QIcon m_preview;
+ bool m_previewHandlesSequences = true; // First sequence is always allowed
};
// Specialization for directory nodes
}
}
break;
+ case HandleSequencesRole:
+ if (index.column() == Name) {
+ return node->previewHandlesSequences();
+ }
+ break;
case Qt::TextAlignmentRole:
if (index.column() == Size) {
// use a right alignment for L2R and R2L languages
return true;
}
break;
+ case HandleSequencesRole:
+ if (index.column() == Name) {
+ KDirModelNode *node = static_cast<KDirModelNode *>(index.internalPointer());
+ Q_ASSERT(node);
+ node->setPreviewHandlesSequences(value.toBool());
+ return true;
+ }
+ break;
default:
break;
}
FileItemRole = 0x07A263FF, ///< returns the KFileItem for a given index. roleName is "fileItem".
ChildCountRole = 0x2C4D0A40, ///< returns the number of items in a directory, or ChildCountUnknown. roleName is "childCount".
HasJobRole = 0x01E555A5, ///< returns whether or not there is a job on an item (file/directory). roleName is "hasJob".
+ HandleSequencesRole = 0x1E642272,
};
/**