diff --git a/libtaskmanager/taskfilterproxymodel.h b/libtaskmanager/taskfilterproxymodel.h --- a/libtaskmanager/taskfilterproxymodel.h +++ b/libtaskmanager/taskfilterproxymodel.h @@ -56,6 +56,8 @@ Q_PROPERTY(bool filterSkipTaskbar READ filterSkipTaskbar WRITE setFilterSkipTaskbar NOTIFY filterSkipTaskbarChanged) Q_PROPERTY(bool filterSkipPager READ filterSkipPager WRITE setFilterSkipPager NOTIFY filterSkipPagerChanged) + Q_PROPERTY(bool demandingAttentionSkipsFilters READ demandingAttentionSkipsFilters WRITE setDemandingAttentionSkipsFilters NOTIFY demandingAttentionSkipsFiltersChanged) + public: explicit TaskFilterProxyModel(QObject *parent = 0); virtual ~TaskFilterProxyModel(); @@ -251,6 +253,24 @@ **/ void setFilterSkipPager(bool filter); + /** + * Whether tasks which demand attention skip filters by virtual desktop + * or activity. Defaults to @c true. + * + * @see setDemandingAttentionSkipsFilters + * @returns @c true if tasks which demand attention skip filters. + **/ + bool demandingAttentionSkipsFilters() const; + + /** + * Sets whether tasks which demand attention should bypass filters by + * virtual desktop or activity. + * + * @see demandingAttentionSkipsFilters + * @param skip Whether tasks which demand attention should skip filters. + **/ + void setDemandingAttentionSkipsFilters(bool skip); + Q_SIGNALS: void virtualDesktopChanged() const; void screenGeometryChanged() const; @@ -261,6 +281,7 @@ void filterNotMinimizedChanged() const; void filterSkipTaskbarChanged() const; void filterSkipPagerChanged() const; + void demandingAttentionSkipsFiltersChanged() const; protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; diff --git a/libtaskmanager/taskfilterproxymodel.cpp b/libtaskmanager/taskfilterproxymodel.cpp --- a/libtaskmanager/taskfilterproxymodel.cpp +++ b/libtaskmanager/taskfilterproxymodel.cpp @@ -42,6 +42,8 @@ bool filterSkipTaskbar = true; bool filterSkipPager = false; + bool demandingAttentionSkipsFilters = true; + private: TaskFilterProxyModel *q; }; @@ -218,6 +220,22 @@ } } +bool TaskFilterProxyModel::demandingAttentionSkipsFilters() const +{ + return d->demandingAttentionSkipsFilters; +} + +void TaskFilterProxyModel::setDemandingAttentionSkipsFilters(bool skip) +{ + if (d->demandingAttentionSkipsFilters != skip) { + d->demandingAttentionSkipsFilters = skip; + + invalidateFilter(); + + emit demandingAttentionSkipsFiltersChanged(); + } +} + QModelIndex TaskFilterProxyModel::mapIfaceToSource(const QModelIndex &index) const { return mapToSource(index); @@ -242,7 +260,7 @@ // Filter by virtual desktop. if (d->filterByVirtualDesktop && d->virtualDesktop != 0) { if (!sourceIdx.data(AbstractTasksModel::IsOnAllVirtualDesktops).toBool() - && !sourceIdx.data(AbstractTasksModel::IsDemandingAttention).toBool()) { + && (!d->demandingAttentionSkipsFilters || !sourceIdx.data(AbstractTasksModel::IsDemandingAttention).toBool())) { const QVariant &virtualDesktop = sourceIdx.data(AbstractTasksModel::VirtualDesktop); if (!virtualDesktop.isNull()) { @@ -267,7 +285,7 @@ // Filter by activity. if (d->filterByActivity && !d->activity.isEmpty()) { - if (!sourceIdx.data(AbstractTasksModel::IsDemandingAttention).toBool()) { + if (!d->demandingAttentionSkipsFilters || !sourceIdx.data(AbstractTasksModel::IsDemandingAttention).toBool()) { const QVariant &activities = sourceIdx.data(AbstractTasksModel::Activities); if (!activities.isNull()) {