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(); }