kwin: load additional rules from .kwinrules files everywhere

these bits are in 3 places now, have to do something about it but more
importantly the .kwinrules files are now loaded and shown by the KCM

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-05-19 07:38:21 +03:00
parent 8c8246d810
commit 3d78c01c4b
2 changed files with 53 additions and 13 deletions

View file

@ -19,9 +19,11 @@
#include <kcmdlineargs.h>
#include <kapplication.h>
#include <kconfig.h>
#include <KLocalizedString>
#include <klocalizedstring.h>
#include <kstandarddirs.h>
#include <kwindowsystem.h>
#include <QtDBus/QtDBus>
#include <X11/Xlib.h>
#include <fixx11h.h>
@ -35,15 +37,34 @@ namespace KWin
static void loadRules(QList< Rules* >& rules)
{
QList<QByteArray> ruleids;
KConfig _cfg("kwinrulesrc");
KConfigGroup cfg(&_cfg, "General");
int count = cfg.readEntry("count", 0);
for (int i = 1;
i <= count;
++i) {
for (int i = 1; i <= count; ++i) {
cfg = KConfigGroup(&_cfg, QString::number(i));
const QByteArray id = cfg.readEntry("id", QByteArray());
if (ruleids.contains(id)) {
continue;
}
Rules* rule = new Rules(cfg);
rules.append(rule);
ruleids.append(id);
}
const QStringList kwinrules = KGlobal::dirs()->findAllResources("data", "kwin/default_rules/*.kwinrules");
foreach (const QString &kwinrule, kwinrules) {
KConfig cfg(kwinrule, KConfig::NoGlobals);
count = cfg.group("General").readEntry("count", 0);
for (int i = 1; i <= count; ++i) {
KConfigGroup cg(&cfg, QString::number(i));
const QByteArray id = cg.readEntry("id", QByteArray());
if (ruleids.contains(id)) {
continue;
}
Rules* rule = new Rules(cg);
rules.append(rule);
ruleids.append(id);
}
}
}

View file

@ -17,15 +17,16 @@
*/
#include "ruleslist.h"
#include "ruleswidget.h"
#include <klistwidget.h>
#include <kpushbutton.h>
#include <assert.h>
#include <kdebug.h>
#include <kconfig.h>
#include <KFileDialog>
#include <kfiledialog.h>
#include <kstandarddirs.h>
#include "ruleswidget.h"
#include <assert.h>
namespace KWin
{
@ -212,22 +213,40 @@ void KCMRulesList::importClicked()
void KCMRulesList::load()
{
rules_listbox->clear();
for (QVector< Rules* >::Iterator it = rules.begin();
it != rules.end();
++it)
for (QVector< Rules* >::Iterator it = rules.begin(); it != rules.end(); ++it)
delete *it;
rules.clear();
QList<QByteArray> ruleids;
KConfig _cfg("kwinrulesrc");
KConfigGroup cfg(&_cfg, "General");
int count = cfg.readEntry("count", 0);
rules.reserve(count);
for (int i = 1;
i <= count;
++i) {
for (int i = 1; i <= count; ++i) {
cfg = KConfigGroup(&_cfg, QString::number(i));
const QByteArray id = cfg.readEntry("id", QByteArray());
if (ruleids.contains(id)) {
continue;
}
Rules* rule = new Rules(cfg);
rules.append(rule);
rules_listbox->addItem(rule->description);
ruleids.append(id);
}
const QStringList kwinrules = KGlobal::dirs()->findAllResources("data", "kwin/default_rules/*.kwinrules");
foreach (const QString &kwinrule, kwinrules) {
KConfig cfg(kwinrule, KConfig::NoGlobals);
count = cfg.group("General").readEntry("count", 0);
for (int i = 1; i <= count; ++i) {
KConfigGroup cg(&cfg, QString::number(i));
const QByteArray id = cg.readEntry("id", QByteArray());
if (ruleids.contains(id)) {
continue;
}
Rules* rule = new Rules(cg);
rules.append(rule);
rules_listbox->addItem(rule->description);
ruleids.append(id);
}
}
if (rules.count() > 0)
rules_listbox->setCurrentItem(rules_listbox->item(0));