From 8b31d63212408dcb1b429e20f3d37778a37c5140 Mon Sep 17 00:00:00 2001 From: donghualin Date: Fri, 18 Nov 2022 08:49:21 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E5=BA=94=E7=94=A8=E5=BC=BA=E5=88=B6=E9=80=80=E5=87=BA?= =?UTF-8?q?=E5=90=8E=E5=9B=BE=E6=A0=87=E6=B2=A1=E6=9C=89=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在强制退出应用后,发送应用移除的信号 Log: Influence: 打开一个应用,鼠标右键-强制退出,观察应用图标是否在任务栏上 Bug: https://pms.uniontech.com/bug-view-172223.html Change-Id: Iac05ff938ab452cc806d7295af8b06d8ba522331 --- src/modules/dock/dock.cpp | 49 ++++++++++++++++++++------------------ src/modules/dock/dock.h | 1 + src/modules/dock/entry.cpp | 1 + 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/modules/dock/dock.cpp b/src/modules/dock/dock.cpp index 0e44324..c1a989c 100644 --- a/src/modules/dock/dock.cpp +++ b/src/modules/dock/dock.cpp @@ -1135,29 +1135,8 @@ void Dock::detachWindow(WindowInfoBase *info) if (!entry) return; - bool needRemove = entry->detachWindow(info); - if (needRemove) { - // 如果是最近打开应用 - if (m_entries->shouldInRecent()) { - // 更新entry的导出窗口信息 - entry->updateExportWindowInfos(); - // 更新entry的右键菜单的信息 - entry->updateMenu(); - // 更新entry的当前窗口的信息 - entry->setCurrentWindowInfo(nullptr); - // 移除应用后,同时更新最近打开的应用 - updateRecentApps(); - // 如果是高效模式,则发送消息或者关闭了显示最近应用的功能,则从任务栏移除 - if (SETTING->getDisplayMode() == DisplayMode::Efficient - || !m_showRecent) { - Q_EMIT entryRemoved(entry->getId()); - } - } else { - removeAppEntry(entry); - // 移除应用后,同时更新最近打开的应用 - updateRecentApps(); - } - } + if (entry->detachWindow(info)) + removeEntryFromDock(entry); } /** @@ -1265,6 +1244,30 @@ void Dock::updateRecentApps() SETTING->setRecentApps(unDockedApps); } +void Dock::removeEntryFromDock(Entry *entry) +{ + // 如果是最近打开应用 + if (m_entries->shouldInRecent()) { + // 更新entry的导出窗口信息 + entry->updateExportWindowInfos(); + // 更新entry的右键菜单的信息 + entry->updateMenu(); + // 更新entry的当前窗口的信息 + entry->setCurrentWindowInfo(nullptr); + // 移除应用后,同时更新最近打开的应用 + updateRecentApps(); + // 如果是高效模式,则发送消息或者关闭了显示最近应用的功能,则从任务栏移除 + if ((SETTING->getDisplayMode() == DisplayMode::Efficient + || !m_showRecent) && !entry->getIsDocked()) { + Q_EMIT entryRemoved(entry->getId()); + } + } else { + removeAppEntry(entry); + // 移除应用后,同时更新最近打开的应用 + updateRecentApps(); + } +} + void Dock::onShowRecentChanged(bool visible) { if (m_showRecent == visible) diff --git a/src/modules/dock/dock.h b/src/modules/dock/dock.h index 199babc..3279d01 100644 --- a/src/modules/dock/dock.h +++ b/src/modules/dock/dock.h @@ -145,6 +145,7 @@ public: void setPluginSettings(QString jsonStr); void mergePluginSettings(QString jsonStr); void removePluginSettings(QString pluginName, QStringList settingkeys); + void removeEntryFromDock(Entry *entry); Q_SIGNALS: void serviceRestarted(); diff --git a/src/modules/dock/entry.cpp b/src/modules/dock/entry.cpp index 9bb0185..46d1883 100644 --- a/src/modules/dock/entry.cpp +++ b/src/modules/dock/entry.cpp @@ -642,6 +642,7 @@ void Entry::forceQuit() m_windowInfoMap.clear(); // 退出所有的进程后,及时更新当前剩余的窗口数量 updateExportWindowInfos(); + m_dock->removeEntryFromDock(this); } void Entry::presentWindows()