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.
wilder-5.25
Fushan Wen 4 years ago
parent 7364149af8
commit e486486287
No known key found for this signature in database
GPG Key ID: 2E48D1487C91DCAA
  1. 32
      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});
}
}
}
}

Loading…
Cancel
Save