From 55fb0650eadb10a0f28fd2911ac26cd56bba3788 Mon Sep 17 00:00:00 2001 From: reionwong Date: Tue, 17 Aug 2021 12:25:38 +0800 Subject: [PATCH] Fix CApplication refresh crash --- src/capplications.cpp | 24 ++++++++++++++++++++---- src/capplications.h | 1 + 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/capplications.cpp b/src/capplications.cpp index 616991c..9984194 100644 --- a/src/capplications.cpp +++ b/src/capplications.cpp @@ -124,8 +124,9 @@ CAppItem *CApplications::matchItem(quint32 pid, const QString &windowClass) void CApplications::refresh() { QStringList addedEntries; - for (CAppItem *item : m_items) + for (CAppItem *item : qAsConst(m_items)) { addedEntries.append(item->path); + } QStringList allEntries; QDirIterator it(s_systemAppFolder, { "*.desktop" }, QDir::NoFilter, QDirIterator::Subdirectories); @@ -145,11 +146,14 @@ void CApplications::refresh() } } - for (CAppItem *item : m_items) { + QList removeItems; + for (CAppItem *item : qAsConst(m_items)) { if (!allEntries.contains(item->path)) { - removeApplication(item); + removeItems.append(item); } } + + removeApplications(removeItems); } void CApplications::addApplication(const QString &filePath) @@ -201,10 +205,22 @@ void CApplications::addApplication(const QString &filePath) void CApplications::removeApplication(CAppItem *item) { - m_items.removeOne(item); + int index = m_items.indexOf(item); + if (index < 0 || index > m_items.size()) + return; + + m_items.removeAt(index); delete item; } +void CApplications::removeApplications(QList items) +{ + for (CAppItem *item : items) { + m_items.removeOne(item); + delete item; + } +} + QStringList CApplications::commandFromPid(quint32 pid) { QFile file(QString("/proc/%1/cmdline").arg(pid)); diff --git a/src/capplications.h b/src/capplications.h index 0ef2e55..7a620b0 100644 --- a/src/capplications.h +++ b/src/capplications.h @@ -52,6 +52,7 @@ private: void refresh(); void addApplication(const QString &filePath); void removeApplication(CAppItem *item); + void removeApplications(QList items); QStringList commandFromPid(quint32 pid);