diff --git a/kcmkwin/kwinrules/kcmrules.h b/kcmkwin/kwinrules/kcmrules.h
--- a/kcmkwin/kwinrules/kcmrules.h
+++ b/kcmkwin/kwinrules/kcmrules.h
@@ -35,12 +35,14 @@
Q_OBJECT
Q_PROPERTY(RuleBookModel *ruleBookModel MEMBER m_ruleBookModel CONSTANT)
- Q_PROPERTY(RulesModel *rulesModel MEMBER m_rulesModel CONSTANT)
+ Q_PROPERTY(RulesModel *rulesModel READ rulesModel CONSTANT)
Q_PROPERTY(int editIndex READ editIndex NOTIFY editIndexChanged)
public:
explicit KCMKWinRules(QObject *parent, const QVariantList &arguments);
+ RulesModel *rulesModel();
+
Q_INVOKABLE void setRuleDescription(int index, const QString &description);
Q_INVOKABLE void editRule(int index);
@@ -67,7 +69,7 @@
private:
RuleBookModel *m_ruleBookModel;
- RulesModel* m_rulesModel;
+ RulesModel* m_rulesModel = nullptr;
QPersistentModelIndex m_editIndex;
};
diff --git a/kcmkwin/kwinrules/kcmrules.cpp b/kcmkwin/kwinrules/kcmrules.cpp
--- a/kcmkwin/kwinrules/kcmrules.cpp
+++ b/kcmkwin/kwinrules/kcmrules.cpp
@@ -29,14 +29,14 @@
#include
#include
+#include "ruleitem.h"
namespace KWin
{
KCMKWinRules::KCMKWinRules(QObject *parent, const QVariantList &arguments)
: KQuickAddons::ConfigModule(parent, arguments)
, m_ruleBookModel(new RuleBookModel(this))
- , m_rulesModel(new RulesModel(this))
{
auto about = new KAboutData(QStringLiteral("kcm_kwinrules"),
i18n("Window Rules"),
@@ -54,15 +54,29 @@
" KWin as your window manager. If you do use a different window manager, please refer to its documentation"
" for how to customize window behavior.
"));
- connect(m_rulesModel, &RulesModel::descriptionChanged, this, [this]{
- if (m_editIndex.isValid()) {
- m_ruleBookModel->setDescriptionAt(m_editIndex.row(), m_rulesModel->description());
- }
- } );
- connect(m_rulesModel, &RulesModel::dataChanged, this, &KCMKWinRules::updateNeedsSave);
+ qmlRegisterUncreatableType("org.kde.kcms.kwinrules", 1, 0, "RuleItem",
+ QStringLiteral("Do not create objects of type RuleItem"));
+ qmlRegisterUncreatableType("org.kde.kcms.kwinrules", 1, 0, "RulesModel",
+ QStringLiteral("Do not create objects of type RulesModel"));
+
connect(m_ruleBookModel, &RulesModel::dataChanged, this, &KCMKWinRules::updateNeedsSave);
}
+RulesModel *KCMKWinRules::rulesModel()
+{
+ if (!m_rulesModel) {
+ m_rulesModel = new RulesModel(this);
+ connect(m_rulesModel, &RulesModel::descriptionChanged, this, [this]{
+ if (m_editIndex.isValid()) {
+ m_ruleBookModel->setDescriptionAt(m_editIndex.row(), m_rulesModel->description());
+ }
+ } );
+ connect(m_rulesModel, &RulesModel::dataChanged, this, &KCMKWinRules::updateNeedsSave);
+ }
+
+ return m_rulesModel;
+}
+
void KCMKWinRules::load()
{
m_ruleBookModel->load();
@@ -93,7 +107,7 @@
void KCMKWinRules::saveCurrentRule()
{
if (m_editIndex.isValid() && needsSave()) {
- m_ruleBookModel->setRuleAt(m_editIndex.row(), m_rulesModel->exportToRules());
+ m_ruleBookModel->setRuleAt(m_editIndex.row(), rulesModel()->exportToRules());
}
}
@@ -113,7 +127,7 @@
}
if (m_editIndex.row() == index) {
- m_rulesModel->setDescription(description);
+ rulesModel()->setDescription(description);
return;
}
m_ruleBookModel->setDescriptionAt(index, description);
@@ -132,7 +146,7 @@
m_editIndex = m_ruleBookModel->index(index);
emit editIndexChanged();
- m_rulesModel->importFromRules(m_ruleBookModel->ruleAt(m_editIndex.row()));
+ rulesModel()->importFromRules(m_ruleBookModel->ruleAt(m_editIndex.row()));
// Set the active page to rules editor (0:RulesList, 1:RulesEditor)
setCurrentIndex(1);
@@ -240,7 +254,7 @@
// Reset rule editor if the current rule changed when importing
if (m_editIndex.row() == newIndex) {
- m_rulesModel->importFromRules(m_ruleBookModel->ruleAt(m_editIndex.row()));
+ rulesModel()->importFromRules(m_ruleBookModel->ruleAt(m_editIndex.row()));
}
}
diff --git a/kcmkwin/kwinrules/rulesmodel.cpp b/kcmkwin/kwinrules/rulesmodel.cpp
--- a/kcmkwin/kwinrules/rulesmodel.cpp
+++ b/kcmkwin/kwinrules/rulesmodel.cpp
@@ -40,11 +40,6 @@
RulesModel::RulesModel(QObject *parent)
: QAbstractListModel(parent)
{
- qmlRegisterUncreatableType("org.kde.kcms.kwinrules", 1, 0, "RuleItem",
- QStringLiteral("Do not create objects of type RuleItem"));
- qmlRegisterUncreatableType("org.kde.kcms.kwinrules", 1, 0, "RulesModel",
- QStringLiteral("Do not create objects of type RulesModel"));
-
populateRuleList();
}