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()