diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-21 23:25:55 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-21 23:25:55 +1000 |
| commit | d89dc8f318ba4dcb107239f01796903e6f3bdf1c (patch) | |
| tree | c85c3e0638857f726d99d94a0699c0f477290920 | |
| parent | batterymonitor: change charging icon (diff) | |
| download | caelestia-shell-d89dc8f318ba4dcb107239f01796903e6f3bdf1c.tar.gz caelestia-shell-d89dc8f318ba4dcb107239f01796903e6f3bdf1c.tar.bz2 caelestia-shell-d89dc8f318ba4dcb107239f01796903e6f3bdf1c.zip | |
plugin/fsm: fix crash
Don't capture entries cause entries may be destroyed before async callback
| -rw-r--r-- | plugin/src/Caelestia/Models/filesystemmodel.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/plugin/src/Caelestia/Models/filesystemmodel.cpp b/plugin/src/Caelestia/Models/filesystemmodel.cpp index b7889f0..536f14b 100644 --- a/plugin/src/Caelestia/Models/filesystemmodel.cpp +++ b/plugin/src/Caelestia/Models/filesystemmodel.cpp @@ -276,9 +276,13 @@ void FileSystemModel::updateEntriesForDir(const QString& dir) { const auto showHidden = m_showHidden; const auto filter = m_filter; const auto nameFilters = m_nameFilters; - const auto oldEntries = m_entries; const auto baseDir = m_dir; + QSet<QString> oldPaths; + for (const auto& entry : m_entries) { + oldPaths << entry->path(); + } + const auto future = QtConcurrent::run([=](QPromise<QPair<QSet<QString>, QSet<QString>>>& promise) { const auto flags = recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags; @@ -336,11 +340,6 @@ void FileSystemModel::updateEntriesForDir(const QString& dir) { newPaths.insert(path); } - QSet<QString> oldPaths; - for (const auto& entry : oldEntries) { - oldPaths.insert(entry->path()); - } - if (promise.isCanceled() || newPaths == oldPaths) { return; } |