From 7364149af89ba2bd5b9d9a64b911594c8f01bad9 Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Thu, 21 Apr 2022 23:45:23 +0800 Subject: [PATCH] libtaskmanager: Port to QConcatenateTablesProxyModel for ConcatenateTasksProxyModel Add source model before connecting to model signals to avoid crashes. --- libtaskmanager/concatenatetasksproxymodel.cpp | 2 +- libtaskmanager/concatenatetasksproxymodel.h | 6 +++--- libtaskmanager/tasksmodel.cpp | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/libtaskmanager/concatenatetasksproxymodel.cpp b/libtaskmanager/concatenatetasksproxymodel.cpp index 6f5e6e6ee..4a68cf344 100644 --- a/libtaskmanager/concatenatetasksproxymodel.cpp +++ b/libtaskmanager/concatenatetasksproxymodel.cpp @@ -9,7 +9,7 @@ namespace TaskManager { ConcatenateTasksProxyModel::ConcatenateTasksProxyModel(QObject *parent) - : KConcatenateRowsProxyModel(parent) + : QConcatenateTablesProxyModel(parent) { } diff --git a/libtaskmanager/concatenatetasksproxymodel.h b/libtaskmanager/concatenatetasksproxymodel.h index 7b74defa4..02a49b198 100644 --- a/libtaskmanager/concatenatetasksproxymodel.h +++ b/libtaskmanager/concatenatetasksproxymodel.h @@ -8,7 +8,7 @@ #include "abstracttasksproxymodeliface.h" -#include +#include #include "taskmanager_export.h" @@ -17,13 +17,13 @@ namespace TaskManager /** * @short A proxy tasks model for concatenating multiple source tasks models. * - * This proxy model is a subclass of KConcatenateRowsProxyModel implementing + * This proxy model is a subclass of \QConcatenateTablesProxyModel implementing * AbstractTasksModelIface, forwarding calls to the correct source model. * * @author Eike Hein **/ -class TASKMANAGER_EXPORT ConcatenateTasksProxyModel : public KConcatenateRowsProxyModel, public AbstractTasksProxyModelIface +class TASKMANAGER_EXPORT ConcatenateTasksProxyModel : public QConcatenateTablesProxyModel, public AbstractTasksProxyModelIface { Q_OBJECT diff --git a/libtaskmanager/tasksmodel.cpp b/libtaskmanager/tasksmodel.cpp index bc0bec1ac..d6908ede9 100644 --- a/libtaskmanager/tasksmodel.cpp +++ b/libtaskmanager/tasksmodel.cpp @@ -152,10 +152,14 @@ void TasksModel::Private::initModels() // -> flattenGroupsProxyModel (optionally, if groupInline == true) flattens groups out. // -> TasksModel collapses (top-level) items into task lifecycle abstraction; sorts. + concatProxyModel = new ConcatenateTasksProxyModel(q); + if (!windowTasksModel) { windowTasksModel = new WindowTasksModel(); } + concatProxyModel->addSourceModel(windowTasksModel); + QObject::connect(windowTasksModel, &QAbstractItemModel::rowsInserted, q, [this]() { if (sortMode == SortActivity) { updateActivityTaskCounts(); @@ -204,9 +208,6 @@ void TasksModel::Private::initModels() startupTasksModel = new StartupTasksModel(); } - concatProxyModel = new ConcatenateTasksProxyModel(q); - - concatProxyModel->addSourceModel(windowTasksModel); concatProxyModel->addSourceModel(startupTasksModel); // If we're in manual sort mode, we need to seed the sort map on pending row