File indexing completed on 2024-05-05 17:41:52
0001 /* 0002 SPDX-FileCopyrightText: 2016 Ivan Cukic <ivan.cukic(at)kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 // Qt 0010 #include <QSortFilterProxyModel> 0011 #include <QWidgetList> //For WId 0012 0013 // KDE 0014 #include <KActivities/ActivitiesModel> 0015 #include <KActivities/Consumer> 0016 #include <KActivities/Info> 0017 0018 #include <config-X11.h> 0019 0020 #include <netwm.h> 0021 0022 class SortedActivitiesModel : public QSortFilterProxyModel 0023 { 0024 Q_OBJECT 0025 0026 Q_PROPERTY(bool inhibitUpdates READ inhibitUpdates WRITE setInhibitUpdates NOTIFY inhibitUpdatesChanged) 0027 0028 public: 0029 SortedActivitiesModel(const QVector<KActivities::Info::State> &states, QObject *parent = nullptr); 0030 ~SortedActivitiesModel() override; 0031 0032 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0033 0034 QHash<int, QByteArray> roleNames() const override; 0035 0036 QString relativeActivity(int relative) const; 0037 0038 protected: 0039 uint lastUsedTime(const QString &activity) const; 0040 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; 0041 0042 enum AdditionalRoles { 0043 LastTimeUsed = KActivities::ActivitiesModel::UserRole, 0044 LastTimeUsedString = KActivities::ActivitiesModel::UserRole + 1, 0045 WindowCount = KActivities::ActivitiesModel::UserRole + 2, 0046 HasWindows = KActivities::ActivitiesModel::UserRole + 3, 0047 }; 0048 0049 public Q_SLOTS: 0050 bool inhibitUpdates() const; 0051 void setInhibitUpdates(bool sortByLastUsedTime); 0052 0053 void onBackgroundsUpdated(const QStringList &changedBackgrounds); 0054 void onCurrentActivityChanged(const QString ¤tActivity); 0055 0056 QString activityIdForRow(int row) const; 0057 QString activityIdForIndex(const QModelIndex &index) const; 0058 int rowForActivityId(const QString &activity) const; 0059 0060 void rowChanged(int row, const QVector<int> &roles); 0061 0062 void onWindowAdded(WId window); 0063 void onWindowRemoved(WId window); 0064 void onWindowChanged(WId window, NET::Properties properties, NET::Properties2 properties2); 0065 0066 Q_SIGNALS: 0067 void inhibitUpdatesChanged(bool inhibitUpdates); 0068 0069 private: 0070 bool m_inhibitUpdates; 0071 0072 QString m_previousActivity; 0073 0074 KActivities::ActivitiesModel *m_activitiesModel = nullptr; 0075 KActivities::Consumer *m_activities = nullptr; 0076 0077 QHash<QString, QVector<WId>> m_activitiesWindows; 0078 };