fix: 修复任务栏应用强制退出后图标没有移除的问题
在强制退出应用后,发送应用移除的信号 Log: Influence: 打开一个应用,鼠标右键-强制退出,观察应用图标是否在任务栏上 Bug: https://pms.uniontech.com/bug-view-172223.html Change-Id: Iac05ff938ab452cc806d7295af8b06d8ba522331
This commit is contained in:
		@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
@ -642,6 +642,7 @@ void Entry::forceQuit()
 | 
			
		||||
    m_windowInfoMap.clear();
 | 
			
		||||
    // 退出所有的进程后,及时更新当前剩余的窗口数量
 | 
			
		||||
    updateExportWindowInfos();
 | 
			
		||||
    m_dock->removeEntryFromDock(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Entry::presentWindows()
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user