File indexing completed on 2026-07-19 16:00:59
0001 /* 0002 SPDX-FileCopyrightText: 2020 Ismael Asensio <isma.af@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include "ruleitem.h" 0010 #include <rules.h> 0011 #include <rulesettings.h> 0012 #include <virtualdesktopsdbustypes.h> 0013 0014 #include <QAbstractListModel> 0015 #include <QObject> 0016 #include <QSortFilterProxyModel> 0017 0018 #if KWIN_BUILD_ACTIVITIES 0019 #include <KActivities/Consumer> 0020 #endif 0021 0022 namespace KWin 0023 { 0024 0025 class RulesModel : public QAbstractListModel 0026 { 0027 Q_OBJECT 0028 0029 Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged) 0030 Q_PROPERTY(QStringList warningMessages READ warningMessages NOTIFY warningMessagesChanged) 0031 0032 public: 0033 enum RulesRole { 0034 NameRole = Qt::DisplayRole, 0035 DescriptionRole = Qt::ToolTipRole, 0036 IconRole = Qt::DecorationRole, 0037 IconNameRole = Qt::UserRole + 1, 0038 KeyRole, 0039 SectionRole, 0040 EnabledRole, 0041 SelectableRole, 0042 ValueRole, 0043 TypeRole, 0044 PolicyRole, 0045 PolicyModelRole, 0046 OptionsModelRole, 0047 SuggestedValueRole 0048 }; 0049 Q_ENUM(RulesRole) 0050 0051 public: 0052 explicit RulesModel(QObject *parent = nullptr); 0053 ~RulesModel(); 0054 0055 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0056 QHash<int, QByteArray> roleNames() const override; 0057 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0058 bool setData(const QModelIndex &index, const QVariant &value, int role) override; 0059 0060 QModelIndex indexOf(const QString &key) const; 0061 bool hasRule(const QString &key) const; 0062 RuleItem *ruleItem(const QString &key) const; 0063 0064 RuleSettings *settings() const; 0065 void setSettings(RuleSettings *settings); 0066 0067 void setSuggestedProperties(const QVariantMap &info); 0068 0069 QString description() const; 0070 void setDescription(const QString &description); 0071 QStringList warningMessages() const; 0072 0073 Q_INVOKABLE void detectWindowProperties(int miliseconds); 0074 0075 Q_SIGNALS: 0076 void descriptionChanged(); 0077 void warningMessagesChanged(); 0078 0079 void showSuggestions(); 0080 void showErrorMessage(const QString &title, const QString &message); 0081 0082 void virtualDesktopsUpdated(); 0083 0084 private: 0085 void populateRuleList(); 0086 RuleItem *addRule(RuleItem *rule); 0087 void writeToSettings(RuleItem *rule); 0088 0089 QString defaultDescription() const; 0090 void processSuggestion(const QString &key, const QVariant &value); 0091 0092 bool wmclassWarning() const; 0093 bool geometryWarning() const; 0094 0095 static const QHash<QString, QString> x11PropertyHash(); 0096 void updateVirtualDesktops(); 0097 0098 QList<OptionsModel::Data> windowTypesModelData() const; 0099 QList<OptionsModel::Data> virtualDesktopsModelData() const; 0100 QList<OptionsModel::Data> activitiesModelData() const; 0101 QList<OptionsModel::Data> placementModelData() const; 0102 QList<OptionsModel::Data> focusModelData() const; 0103 QList<OptionsModel::Data> colorSchemesModelData() const; 0104 0105 private Q_SLOTS: 0106 void selectX11Window(); 0107 0108 private: 0109 QList<RuleItem *> m_ruleList; 0110 QHash<QString, RuleItem *> m_rules; 0111 DBusDesktopDataVector m_virtualDesktops; 0112 #if KWIN_BUILD_ACTIVITIES 0113 KActivities::Consumer *m_activities; 0114 #endif 0115 RuleSettings *m_settings; 0116 }; 0117 0118 }