From e486486287e04f695374fca23a2f1440a34d94ae Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Mon, 25 Apr 2022 15:30:19 +0800 Subject: [PATCH] libtaskmanager: Use Remove/Insert to update the manual sort map Otherwise the launcher items can't be dragged until the manual sort map is reset after porting to QConcatenateTablesProxyModel, becuase in TasksModel there is no slot for modelReset, and in KConcatenateRowsProxyModel, after receiving a modelReset, there will be a rowsAboutToBeInserted signal, but not in QConcatenateTablesProxyModel. --- libtaskmanager/launchertasksmodel.cpp | 32 ++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/libtaskmanager/launchertasksmodel.cpp b/libtaskmanager/launchertasksmodel.cpp index c04f5886c..4f1907f90 100644 --- a/libtaskmanager/launchertasksmodel.cpp +++ b/libtaskmanager/launchertasksmodel.cpp @@ -445,17 +445,37 @@ void LauncherTasksModel::setLauncherList(const QStringList &serializedLaunchers) } } - if (newLaunchersOrder != d->launchersOrder || newActivitiesForLauncher != d->activitiesForLauncher) { - beginResetModel(); + if (newLaunchersOrder != d->launchersOrder) { + // Use Remove/Insert to update the manual sort map in TasksModel + if (!d->launchersOrder.empty()) { + beginRemoveRows(QModelIndex(), 0, d->launchersOrder.size() - 1); - std::swap(newLaunchersOrder, d->launchersOrder); - std::swap(newActivitiesForLauncher, d->activitiesForLauncher); + d->launchersOrder.clear(); + d->activitiesForLauncher.clear(); - d->appDataCache.clear(); + endRemoveRows(); + } + + if (!newLaunchersOrder.empty()) { + beginInsertRows(QModelIndex(), 0, newLaunchersOrder.size() - 1); - endResetModel(); + d->launchersOrder = newLaunchersOrder; + d->activitiesForLauncher = newActivitiesForLauncher; + + endInsertRows(); + } Q_EMIT launcherListChanged(); + + } else if (newActivitiesForLauncher != d->activitiesForLauncher) { + for (int i = 0; i < d->launchersOrder.size(); i++) { + const QUrl &url = d->launchersOrder.at(i); + + if (d->activitiesForLauncher[url] != newActivitiesForLauncher[url]) { + d->activitiesForLauncher[url] = newActivitiesForLauncher[url]; + Q_EMIT dataChanged(index(i, 0), index(i, 0), {Activities}); + } + } } }