From b0383d43da38fb181b756fae2f22c9f6ed33227d Mon Sep 17 00:00:00 2001 From: Yutao Meng Date: Mon, 13 Mar 2023 15:40:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E6=A0=8F=E6=9C=80?= =?UTF-8?q?=E8=BF=91=E4=BD=BF=E7=94=A8=E4=BB=BB=E5=8A=A1=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E6=AE=8B=E7=95=99=E9=94=AF=E9=BD=BF=E5=9B=BE=E6=A0=87=E5=BA=94?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 部分修复了两种场景: - 无法点击图标打开的锯齿应用在系统启动时残留在最近任务栏(如Deepin-Lock) - 锯齿图标应用被关闭后,残留在最近任务栏.(如dde-dconfig-editor) 当前存在问题: 第二种情况在锯齿应用被移除时,任务栏会闪一下. Issue: https://github.com/linuxdeepin/developer-center/issues/3788 Log: 任务栏最近使用任务区域残留锯齿图标应用 --- src/modules/dock/dock.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/modules/dock/dock.cpp b/src/modules/dock/dock.cpp index e51becf..ed3c594 100644 --- a/src/modules/dock/dock.cpp +++ b/src/modules/dock/dock.cpp @@ -23,6 +23,16 @@ #define SETTING DockSettings::instance() #define XCB XCBUtils::instance() +bool shouldShowEntry(Entry *entry) +{ + if (entry->getApp()->isValidApp()) { + QString path = entry->getApp()->getFileName(); + DesktopInfo desktopInfo(path.toStdString()); + return desktopInfo.shouldShow(); + } + return false; +} + Dock::Dock(ApplicationManager *applicationManager, QObject *parent) : SynModule(parent) , m_entriesSum(0) @@ -1221,8 +1231,9 @@ void Dock::updateRecentApps() QStringList unDockedApps; QList recentEntrys = m_entries->unDockedEntries(); for (Entry *entry : recentEntrys) { - QString path = entry->getApp()->getFileName(); - unDockedApps << path; + if (shouldShowEntry(entry)) { + unDockedApps << entry->getApp()->getFileName(); + } } // 保存未驻留的应用作为最近打开的应用 @@ -1242,9 +1253,17 @@ void Dock::removeEntryFromDock(Entry *entry) // 移除应用后,同时更新最近打开的应用 updateRecentApps(); // 如果是高效模式,则发送消息或者关闭了显示最近应用的功能,则从任务栏移除 + // 或者时尚模式显示最近应用时,当前应用不应该驻留最近应用时,需要移除 if ((SETTING->getDisplayMode() == DisplayMode::Efficient || !m_showRecent) && !entry->getIsDocked()) { Q_EMIT entryRemoved(entry->getId()); + } else if (SETTING->getDisplayMode() == DisplayMode::Fashion && m_showRecent && !entry->getIsDocked()) { + if (shouldShowEntry(entry)) { + return; + } + removeAppEntry(entry); + // 移除应用后,同时更新最近打开的应用 + updateRecentApps(); } } else { removeAppEntry(entry);