diff --git a/deepin-system-monitor-main/process/desktop_entry_cache.cpp b/deepin-system-monitor-main/process/desktop_entry_cache.cpp index 2c8c7196..f4a7f307 100644 --- a/deepin-system-monitor-main/process/desktop_entry_cache.cpp +++ b/deepin-system-monitor-main/process/desktop_entry_cache.cpp @@ -39,6 +39,11 @@ const DesktopEntry DesktopEntryCache::entryWithDesktopFile(const QString &deskto return entry; } +QHash DesktopEntryCache::getCache() +{ + return m_cache; +} + void DesktopEntryCache::updateCache() { m_cache.clear(); diff --git a/deepin-system-monitor-main/process/desktop_entry_cache.h b/deepin-system-monitor-main/process/desktop_entry_cache.h index 08dcd8df..a4aa690e 100644 --- a/deepin-system-monitor-main/process/desktop_entry_cache.h +++ b/deepin-system-monitor-main/process/desktop_entry_cache.h @@ -32,6 +32,7 @@ class DesktopEntryCache const DesktopEntry entry(const QString &name) const; const DesktopEntry entryWithDesktopFile(const QString &desktopFile); const DesktopEntry entryWithSubName(const QString &subName) const; + QHash getCache(); void updateCache(); diff --git a/deepin-system-monitor-main/process/process_icon.cpp b/deepin-system-monitor-main/process/process_icon.cpp index 5be44806..951c0536 100644 --- a/deepin-system-monitor-main/process/process_icon.cpp +++ b/deepin-system-monitor-main/process/process_icon.cpp @@ -115,10 +115,21 @@ struct icon_data_t *ProcessIcon::terminalIconData(const QString &procname) const return iconData; } +QString ProcessIcon::getFileManagerString() +{ + DesktopEntryCache *desktopEntryCache = ProcessDB::instance()->desktopEntryCache(); + QList desktopEntryKeys = desktopEntryCache->getCache().keys(); + for (auto it = desktopEntryKeys.begin(); it != desktopEntryKeys.end(); it++) { + if ((*it).contains("dde-file-manager") && desktopEntryCache->getCache().value((*it))->icon.contains("dde-file-manager")) { + return (*it); + } + } + return ""; +} + std::shared_ptr ProcessIcon::getIcon(Process *proc) { std::shared_ptr iconDataPtr; - auto processDB = ProcessDB::instance(); WMWindowList *windowList = processDB->windowList(); DesktopEntryCache *desktopEntryCache = processDB->desktopEntryCache(); @@ -159,7 +170,14 @@ std::shared_ptr ProcessIcon::getIcon(Process *proc) iconData->desktopentry = true; iconData->type = kIconDataNameType; iconData->proc_name = proc->name(); - iconData->icon_name = entry->icon; + //由于文件管理器和主目录在desktopEntryCache的m_cache中的key都包含"dde-file-manager" + //且value中的结构体里的name都是"dde-file-manager",所以在这里对于文件管理器的图标要多做判断 + QString tempString = getFileManagerString(); + if (tempString.contains(proc->name())) { + iconData->icon_name = desktopEntryCache->getCache().value(tempString)->icon; + } else { + iconData->icon_name = entry->icon; + } iconDataPtr.reset(iconData); windowList->addDesktopEntryApp(proc); return iconDataPtr; diff --git a/deepin-system-monitor-main/process/process_icon.h b/deepin-system-monitor-main/process/process_icon.h index a1bf16d2..38227c59 100644 --- a/deepin-system-monitor-main/process/process_icon.h +++ b/deepin-system-monitor-main/process/process_icon.h @@ -29,6 +29,7 @@ class ProcessIcon std::shared_ptr getIcon(Process *proc); struct icon_data_t *defaultIconData(const QString &procname) const; struct icon_data_t *terminalIconData(const QString &procname) const; + QString getFileManagerString(); private: std::shared_ptr m_data;