diff --git a/libtaskmanager/abstracttasksmodel.h b/libtaskmanager/abstracttasksmodel.h --- a/libtaskmanager/abstracttasksmodel.h +++ b/libtaskmanager/abstracttasksmodel.h @@ -59,6 +59,7 @@ IsStartup, /**< This is a startup task. */ IsLauncher, /**< This is a launcher task. */ IsGroupParent, /**< This is a parent item for a group of child tasks. */ + ChildCount, /**< The number of tasks in this group. */ IsGroupable, /**< Whether this task is being ignored by grouping or not. */ IsActive, /**< This is the currently active task. */ IsClosable, /**< requestClose (see below) available. */ diff --git a/libtaskmanager/taskgroupingproxymodel.cpp b/libtaskmanager/taskgroupingproxymodel.cpp --- a/libtaskmanager/taskgroupingproxymodel.cpp +++ b/libtaskmanager/taskgroupingproxymodel.cpp @@ -419,13 +419,11 @@ if (appsMatch(sourceIndex, groupRep)) { const QModelIndex parent = q->index(i, 0); - bool groupFormed = false; if (!silent) { const int newIndex = rowMap.at(i).count(); if (newIndex == 1) { - groupFormed = true; q->beginInsertRows(parent, 0, 1); } else { q->beginInsertRows(parent, newIndex, newIndex); @@ -437,14 +435,7 @@ if (!silent) { q->endInsertRows(); - // If we turned a top-level item into a group parent, we need - // to let consumers know. - // TODO: It _might_ be worth optimizing this at some point by - // adding a roles constaint (e.g. IsGroupParent, MimeType, ...); - // see data(). - if (groupFormed) { - q->dataChanged(parent, parent); - } + q->dataChanged(parent, parent); } return true; @@ -715,6 +706,8 @@ return QVariant(); } else if (role == AbstractTasksModel::IsGroupParent) { return true; + } else if (role == AbstractTasksModel::ChildCount) { + return rowCount(proxyIndex); } else if (role == AbstractTasksModel::IsActive) { return d->any(proxyIndex, AbstractTasksModel::IsActive); } else if (role == AbstractTasksModel::IsClosable) {