diff --git a/panels/dock/taskmanager/abstractwindowmonitor.cpp b/panels/dock/taskmanager/abstractwindowmonitor.cpp index ae07623d3..c8b198e7f 100644 --- a/panels/dock/taskmanager/abstractwindowmonitor.cpp +++ b/panels/dock/taskmanager/abstractwindowmonitor.cpp @@ -158,5 +158,13 @@ void AbstractWindowMonitor::destroyWindow(AbstractWindow * window) endRemoveRows(); } +void AbstractWindowMonitor::clearTrackedWindows() +{ + if (m_trackedWindows.isEmpty()) + return; + beginResetModel(); + m_trackedWindows.clear(); + endResetModel(); +} } diff --git a/panels/dock/taskmanager/abstractwindowmonitor.h b/panels/dock/taskmanager/abstractwindowmonitor.h index ddf60c527..dbc20dec4 100644 --- a/panels/dock/taskmanager/abstractwindowmonitor.h +++ b/panels/dock/taskmanager/abstractwindowmonitor.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -26,6 +26,7 @@ class AbstractWindowMonitor : public QAbstractListModel, public AbstractTaskMana void trackWindow(AbstractWindow* window); void destroyWindow(AbstractWindow * window); + void clearTrackedWindows(); AbstractWindowMonitor(QObject* parent = nullptr); virtual void start() = 0; diff --git a/panels/dock/taskmanager/treelandwindowmonitor.cpp b/panels/dock/taskmanager/treelandwindowmonitor.cpp index 7d5a4362a..32cf23e5e 100644 --- a/panels/dock/taskmanager/treelandwindowmonitor.cpp +++ b/panels/dock/taskmanager/treelandwindowmonitor.cpp @@ -102,6 +102,7 @@ void TreeLandWindowMonitor::stop() void TreeLandWindowMonitor::clear() { + clearTrackedWindows(); m_windows.clear(); m_dockPreview.reset(nullptr); updateFullscreenState(); diff --git a/panels/dock/taskmanager/x11windowmonitor.cpp b/panels/dock/taskmanager/x11windowmonitor.cpp index 7eca4f72a..b10badf8e 100644 --- a/panels/dock/taskmanager/x11windowmonitor.cpp +++ b/panels/dock/taskmanager/x11windowmonitor.cpp @@ -91,6 +91,7 @@ void X11WindowMonitor::stop() void X11WindowMonitor::clear() { + clearTrackedWindows(); m_windows.clear(); m_windowPreview.reset(nullptr); }