fix: 任务栏最近使用任务区域残留锯齿图标应用

部分修复了两种场景:
- 无法点击图标打开的锯齿应用在系统启动时残留在最近任务栏(如Deepin-Lock)
- 锯齿图标应用被关闭后,残留在最近任务栏.(如dde-dconfig-editor)

当前存在问题:
第二种情况在锯齿应用被移除时,任务栏会闪一下.

Issue: https://github.com/linuxdeepin/developer-center/issues/3788
Log: 任务栏最近使用任务区域残留锯齿图标应用
This commit is contained in:
Yutao Meng 2023-03-13 15:40:28 +08:00 committed by dengbo
parent 2031f59203
commit b0383d43da

View File

@ -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<Entry *> 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);