summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-31 23:47:13 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-31 23:47:13 +1000
commitee0c011822312d3d3378294bcb4014226a5f49fa (patch)
tree443df14ae0c167658419432b463e1d378c2d3027 /plugin/src/Caelestia
parentplugin/fsm: add new roles (diff)
downloadcaelestia-shell-ee0c011822312d3d3378294bcb4014226a5f49fa.tar.gz
caelestia-shell-ee0c011822312d3d3378294bcb4014226a5f49fa.tar.bz2
caelestia-shell-ee0c011822312d3d3378294bcb4014226a5f49fa.zip
plugin/fsm: lazy entriesChanged
Only emit when it actually changes (comparison via paths)
Diffstat (limited to 'plugin/src/Caelestia')
-rw-r--r--plugin/src/Caelestia/filesystemmodel.cpp47
1 files changed, 32 insertions, 15 deletions
diff --git a/plugin/src/Caelestia/filesystemmodel.cpp b/plugin/src/Caelestia/filesystemmodel.cpp
index 8722cc0..3fb20d9 100644
--- a/plugin/src/Caelestia/filesystemmodel.cpp
+++ b/plugin/src/Caelestia/filesystemmodel.cpp
@@ -130,19 +130,17 @@ void FileSystemModel::updateWatcher() {
void FileSystemModel::updateEntries() {
if (m_path.isEmpty()) {
- beginResetModel();
- qDeleteAll(m_entries);
- m_entries.clear();
- emit entriesChanged();
- endResetModel();
+ if (!m_entries.isEmpty()) {
+ beginResetModel();
+ qDeleteAll(m_entries);
+ m_entries.clear();
+ emit entriesChanged();
+ endResetModel();
+ }
return;
}
- beginResetModel();
- qDeleteAll(m_entries);
- m_entries.clear();
-
const auto flags = m_recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags;
std::optional<QDirIterator> iter;
@@ -160,17 +158,36 @@ void FileSystemModel::updateEntries() {
iter.emplace(m_path, QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot, flags);
}
+ QStringList newPaths;
+
while (iter.value().hasNext()) {
- QString entry = iter.value().next();
+ QString path = iter.value().next();
if (m_filter == Images) {
- QImageReader reader(entry);
- if (reader.canRead()) {
- m_entries << new FileSystemEntry(entry, m_dir.relativeFilePath(entry), this);
+ QImageReader reader(path);
+ if (!reader.canRead()) {
+ continue;
}
- } else {
- m_entries << new FileSystemEntry(entry, m_dir.relativeFilePath(entry), this);
}
+
+ newPaths << path;
+ }
+
+ QStringList oldPaths;
+ for (const auto& entry : m_entries) {
+ oldPaths << entry->path();
+ }
+
+ if (newPaths == oldPaths) {
+ return;
+ }
+
+ beginResetModel();
+ qDeleteAll(m_entries);
+ m_entries.clear();
+
+ for (const auto& path : newPaths) {
+ m_entries << new FileSystemEntry(path, m_dir.relativeFilePath(path), this);
}
emit entriesChanged();