Add optional filtering by SkipPager window state.

Summary: For use by desktop pagers using libtaskmanager.

Reviewers: #plasma, davidedmundson

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D2674
wilder-5.14
Eike Hein 10 years ago
parent a2202472aa
commit c1424673db
  1. 3
      libtaskmanager/abstracttasksmodel.h
  2. 22
      libtaskmanager/taskfilterproxymodel.cpp
  3. 23
      libtaskmanager/taskfilterproxymodel.h
  4. 2
      libtaskmanager/waylandtasksmodel.cpp
  5. 4
      libtaskmanager/xwindowtasksmodel.cpp

@ -83,7 +83,8 @@ public:
ScreenGeometry, /**< Screen geometry for the task (i.e. the window's screen). */
Activities, /**< Activities for the task (i.e. window). */
IsDemandingAttention, /**< Task is demanding attention. */
SkipTaskbar /**< Task desires not to be shown in a user interface. */
SkipTaskbar, /**< Task desires not to be shown in a 'task bar' user interface. */
SkipPager, /**< Task desires not to be shown in a 'pager' user interface. */
};
explicit AbstractTasksModel(QObject *parent = nullptr);

@ -40,6 +40,7 @@ public:
bool filterByActivity = false;
bool filterNotMinimized = false;
bool filterSkipTaskbar = true;
bool filterSkipPager = false;
private:
TaskFilterProxyModel *q;
@ -201,6 +202,22 @@ void TaskFilterProxyModel::setFilterSkipTaskbar(bool filter)
}
}
bool TaskFilterProxyModel::filterSkipPager() const
{
return d->filterSkipPager;
}
void TaskFilterProxyModel::setFilterSkipPager(bool filter)
{
if (d->filterSkipPager != filter) {
d->filterSkipPager = filter;
invalidateFilter();
emit filterSkipPagerChanged();
}
}
QModelIndex TaskFilterProxyModel::mapIfaceToSource(const QModelIndex &index) const
{
return mapToSource(index);
@ -217,6 +234,11 @@ bool TaskFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &so
return false;
}
// Filter tasks that are not to be shown on the pager.
if (d->filterSkipPager && sourceIdx.data(AbstractTasksModel::SkipPager).toBool()) {
return false;
}
// Filter by virtual desktop.
if (d->filterByVirtualDesktop && d->virtualDesktop != 0) {
if (!sourceIdx.data(AbstractTasksModel::IsOnAllVirtualDesktops).toBool()

@ -54,6 +54,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 filterSkipTaskbar READ filterSkipTaskbar WRITE setFilterSkipTaskbar NOTIFY filterSkipTaskbarChanged)
Q_PROPERTY(bool filterSkipPager READ filterSkipPager WRITE setFilterSkipPager NOTIFY filterSkipPagerChanged)
public:
explicit TaskFilterProxyModel(QObject *parent = 0);
@ -229,6 +230,27 @@ public:
* filtered.
**/
void setFilterSkipTaskbar(bool filter);
/**
* Whether tasks which indicate they want to be omitted from 'pagers'
* should be filtered. Defaults to @c true.
*
* @see setFilterSkipPager
* @returns @c true if tasks which want to skip the 'pager' should be
* filtered.
**/
bool filterSkipPager() const;
/**
* Set whether tasks which indicate they want to be omitted from 'pagers'
* should be filtered.
*
* @see filterSkipPager
* @param filter Whether tasks which want to skip the 'pager' should be
* filtered.
**/
void setFilterSkipPager(bool filter);
Q_SIGNALS:
void virtualDesktopChanged() const;
void screenGeometryChanged() const;
@ -238,6 +260,7 @@ Q_SIGNALS:
void filterByActivityChanged() const;
void filterNotMinimizedChanged() const;
void filterSkipTaskbarChanged() const;
void filterSkipPagerChanged() const;
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;

@ -331,6 +331,8 @@ QVariant WaylandTasksModel::data(const QModelIndex &index, int role) const
return window->isDemandingAttention();
} else if (role == SkipTaskbar) {
return window->skipTaskbar();
} else if (role == SkipPager) {
// FIXME Implement.
}
return QVariant();

@ -359,7 +359,7 @@ void XWindowTasksModel::Private::windowChanged(WId window, NET::Properties prope
if (properties & (NET::WMState | NET::XAWMState)) {
wipeInfoCache = true;
changedRoles << IsFullScreen << IsMaximized << IsMinimized << IsKeepAbove << IsKeepBelow;
changedRoles << IsShaded << IsDemandingAttention << SkipTaskbar;
changedRoles << IsShaded << IsDemandingAttention << SkipTaskbar << SkipPager;
}
if (properties2 & NET::WM2AllowedActions) {
@ -887,6 +887,8 @@ QVariant XWindowTasksModel::data(const QModelIndex &index, int role) const
return d->demandsAttention(window);
} else if (role == SkipTaskbar) {
return d->windowInfo(window)->hasState(NET::SkipTaskbar);
} else if (role == SkipPager) {
return d->windowInfo(window)->hasState(NET::SkipPager);
}
return QVariant();

Loading…
Cancel
Save