diff --git a/libtaskmanager/taskfilterproxymodel.cpp b/libtaskmanager/taskfilterproxymodel.cpp index 6bb27537a..7e1062abe 100644 --- a/libtaskmanager/taskfilterproxymodel.cpp +++ b/libtaskmanager/taskfilterproxymodel.cpp @@ -41,6 +41,7 @@ public: bool filterByActivity = false; bool filterNotMinimized = false; bool filterNotMaximized = false; + bool filterHidden = false; bool filterSkipTaskbar = true; bool filterSkipPager = false; @@ -202,6 +203,22 @@ void TaskFilterProxyModel::setFilterNotMaximized(bool filter) } } +bool TaskFilterProxyModel::filterHidden() const +{ + return d->filterHidden; +} + +void TaskFilterProxyModel::setFilterHidden(bool filter) +{ + if (d->filterHidden != filter) { + d->filterHidden = filter; + + invalidateFilter(); + + emit filterHiddenChanged(); + } +} + bool TaskFilterProxyModel::filterSkipTaskbar() const { return d->filterSkipTaskbar; @@ -327,6 +344,15 @@ bool TaskFilterProxyModel::acceptsRow(int sourceRow) const } } + // Filter hidden. + if (d->filterHidden) { + bool isHidden = sourceIdx.data(AbstractTasksModel::IsHidden).toBool(); + + if (isHidden) { + return false; + } + } + return true; } diff --git a/libtaskmanager/taskfilterproxymodel.h b/libtaskmanager/taskfilterproxymodel.h index 88ba3adab..f811160e1 100644 --- a/libtaskmanager/taskfilterproxymodel.h +++ b/libtaskmanager/taskfilterproxymodel.h @@ -53,6 +53,7 @@ class TASKMANAGER_EXPORT TaskFilterProxyModel : public QSortFilterProxyModel, pu Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE setFilterByActivity NOTIFY filterByActivityChanged) Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE setFilterNotMinimized NOTIFY filterNotMinimizedChanged) Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE setFilterNotMaximized NOTIFY filterNotMaximizedChanged) + Q_PROPERTY(bool filterHidden READ filterHidden WRITE setFilterHidden NOTIFY filterHiddenChanged) Q_PROPERTY(bool filterSkipTaskbar READ filterSkipTaskbar WRITE setFilterSkipTaskbar NOTIFY filterSkipTaskbarChanged) Q_PROPERTY(bool filterSkipPager READ filterSkipPager WRITE setFilterSkipPager NOTIFY filterSkipPagerChanged) @@ -230,6 +231,23 @@ public: **/ void setFilterNotMaximized(bool filter); + /** + * Whether hidden tasks should be filtered. Defaults to + * @c false. + * + * @see setFilterHidden + * @returns @c true if hidden tasks should be filtered. + **/ + bool filterHidden() const; + + /** + * Set whether hidden tasks should be filtered. + * + * @see filterHidden + * @param filter Whether hidden tasks should be filtered. + **/ + void setFilterHidden(bool filter); + /** * Whether tasks which should be omitted from 'task bars' should be * filtered. Defaults to @c true. @@ -304,6 +322,7 @@ Q_SIGNALS: void filterByActivityChanged() const; void filterNotMinimizedChanged() const; void filterNotMaximizedChanged() const; + void filterHiddenChanged() const; void filterSkipTaskbarChanged() const; void filterSkipPagerChanged() const; void demandingAttentionSkipsFiltersChanged() const; diff --git a/libtaskmanager/taskgroupingproxymodel.cpp b/libtaskmanager/taskgroupingproxymodel.cpp index 416b3f946..30560f552 100644 --- a/libtaskmanager/taskgroupingproxymodel.cpp +++ b/libtaskmanager/taskgroupingproxymodel.cpp @@ -979,12 +979,12 @@ void TaskGroupingProxyModel::requestToggleMinimized(const QModelIndex &index) if (index.parent().isValid() || !d->isGroup(index.row())) { d->abstractTasksSourceModel->requestToggleMinimized(mapToSource(index)); } else { - const bool goalState = !index.data(AbstractTasksModel::IsMinimized).toBool(); + const bool goalState = !index.data(AbstractTasksModel::IsHidden).toBool(); for (int i = 0; i < rowCount(index); ++i) { const QModelIndex &child = this->index(i, 0, index); - if (child.data(AbstractTasksModel::IsMinimized).toBool() != goalState) { + if (child.data(AbstractTasksModel::IsHidden).toBool() != goalState) { d->abstractTasksSourceModel->requestToggleMinimized(mapToSource(child)); } } diff --git a/libtaskmanager/tasksmodel.cpp b/libtaskmanager/tasksmodel.cpp index b93dcd7f0..7fc40ec06 100644 --- a/libtaskmanager/tasksmodel.cpp +++ b/libtaskmanager/tasksmodel.cpp @@ -303,6 +303,7 @@ void TasksModel::Private::initModels() QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterByActivityChanged, q, &TasksModel::filterByActivityChanged); QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterNotMinimizedChanged, q, &TasksModel::filterNotMinimizedChanged); QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterNotMaximizedChanged, q, &TasksModel::filterNotMaximizedChanged); + QObject::connect(filterProxyModel, &TaskFilterProxyModel::filterHiddenChanged, q, &TasksModel::filterHiddenChanged); groupingProxyModel = new TaskGroupingProxyModel(q); groupingProxyModel->setSourceModel(filterProxyModel); @@ -1163,6 +1164,16 @@ void TasksModel::setFilterNotMaximized(bool filter) d->filterProxyModel->setFilterNotMaximized(filter); } +bool TasksModel::filterHidden() const +{ + return d->filterProxyModel->filterHidden(); +} + +void TasksModel::setFilterHidden(bool filter) +{ + d->filterProxyModel->setFilterHidden(filter); +} + TasksModel::SortMode TasksModel::sortMode() const { return d->sortMode; diff --git a/libtaskmanager/tasksmodel.h b/libtaskmanager/tasksmodel.h index b0c0d21e9..b2f8cca6a 100644 --- a/libtaskmanager/tasksmodel.h +++ b/libtaskmanager/tasksmodel.h @@ -74,6 +74,7 @@ class TASKMANAGER_EXPORT TasksModel : public QSortFilterProxyModel, public Abstr Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE setFilterByActivity NOTIFY filterByActivityChanged) Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE setFilterNotMinimized NOTIFY filterNotMinimizedChanged) Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE setFilterNotMaximized NOTIFY filterNotMaximizedChanged) + Q_PROPERTY(bool filterHidden READ filterHidden WRITE setFilterHidden NOTIFY filterHiddenChanged) Q_PROPERTY(SortMode sortMode READ sortMode WRITE setSortMode NOTIFY sortModeChanged) Q_PROPERTY(bool separateLaunchers READ separateLaunchers WRITE setSeparateLaunchers NOTIFY separateLaunchersChanged) @@ -313,6 +314,23 @@ public: **/ void setFilterNotMaximized(bool filter); + /** + * Whether hidden tasks should be filtered. Defaults to + * @c false. + * + * @see setFilterHidden + * @returns @c true if hidden tasks should be filtered. + **/ + bool filterHidden() const; + + /** + * Set whether hidden tasks should be filtered. + * + * @see filterHidden + * @param filter Whether hidden tasks should be filtered. + **/ + void setFilterHidden(bool filter); + /** * The sort mode used in sorting tasks. Defaults to SortAlpha. * @@ -867,6 +885,7 @@ Q_SIGNALS: void filterByActivityChanged() const; void filterNotMinimizedChanged() const; void filterNotMaximizedChanged() const; + void filterHiddenChanged() const; void sortModeChanged() const; void separateLaunchersChanged() const; void launchInPlaceChanged() const; diff --git a/libtaskmanager/xwindowtasksmodel.cpp b/libtaskmanager/xwindowtasksmodel.cpp index 160c5e9cd..8a45b8154 100644 --- a/libtaskmanager/xwindowtasksmodel.cpp +++ b/libtaskmanager/xwindowtasksmodel.cpp @@ -832,7 +832,7 @@ void XWindowTasksModel::requestToggleMinimized(const QModelIndex &index) const WId window = d->windows.at(index.row()); const KWindowInfo *info = d->windowInfo(window); - if (info->isMinimized()) { + if (index.data(AbstractTasksModel::IsHidden).toBool()) { bool onCurrent = info->isOnCurrentDesktop(); // FIXME: Move logic up into proxy? (See also others.)