From eeada85585315e988e897965c7b86651ed85a29f Mon Sep 17 00:00:00 2001 From: wjyrich Date: Fri, 27 Feb 2026 11:00:41 +0800 Subject: [PATCH] fix: when drag just one app in folder to launchpad quickly will coredump. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复文件夹只有一个应用时,快速拖拽到启动器会崩溃问题。 原因为: 文件夹在被删除后,他的ItemsPage 对象仍然存活(QObject 子对象,未被删除),连接也未断开。如果后续有任何东西触发了这个 "幽灵" page 的 pageCountChanged,仍然会发出 folderPageCountChanged 信号指向一个已不存在的文件夹。 修复方案: 断开Itempage的连接后,再进行删除 folder。 --- src/models/itemarrangementproxymodel.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/models/itemarrangementproxymodel.cpp b/src/models/itemarrangementproxymodel.cpp index 6014d164..297dd1ba 100644 --- a/src/models/itemarrangementproxymodel.cpp +++ b/src/models/itemarrangementproxymodel.cpp @@ -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 @@ -489,10 +489,14 @@ void ItemArrangementProxyModel::removeFolder(const QString &idNumber) QString fullId("internal/folders/" + idNumber); Q_ASSERT(m_folders.contains(fullId)); - m_folders.remove(fullId); + auto *page = m_folders.take(fullId); + page->disconnect(this); + m_topLevel->removeItem(fullId); QList result = m_folderModel.findItems(fullId); m_folderModel.removeRows(result.first()->row(), 1); + + m_folders.remove(fullId); } // get folder by id. 0 is top level, >=1 is folder