From 23f921e8507ffc7df526c329632ca31427837c41 Mon Sep 17 00:00:00 2001 From: tanghongyao Date: Thu, 13 Jun 2024 10:50:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=B3=BB=E7=BB=9F=E7=9B=91=E8=A7=86?= =?UTF-8?q?=E5=99=A8=E6=96=87=E4=BB=B6=E7=AE=A1=E7=90=86=E5=99=A8=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=E5=9B=BE=E6=A0=87=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 系统监视器文件管理器进程图标显示错误 Log: 系统监视器文件管理器进程图标显示错误 Bug: https://pms.uniontech.com/bug-view-257355.html --- .../process/desktop_entry_cache.cpp | 5 +++++ .../process/desktop_entry_cache.h | 1 + .../process/process_icon.cpp | 22 +++++++++++++++++-- .../process/process_icon.h | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) 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;