69fccf9c28
X-KDE-ParentComponents is a list, so we have to check if this list contains the plugin, not do a string comparison. It seems the queryparser has become a bit stricter in this case. This query should be fixed anyway, however, and it fixes a fairly important bug in the effect system. REVIEW:122821
115 lines
4.8 KiB
C++
115 lines
4.8 KiB
C++
/**************************************************************************
|
|
* KWin - the KDE window manager *
|
|
* This file is part of the KDE project. *
|
|
* *
|
|
* Copyright (C) 2013 Antonis Tsiapaliokas <kok3rs@gmail.com> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
**************************************************************************/
|
|
|
|
#include "effectconfig.h"
|
|
|
|
#include <KCModule>
|
|
#include <KPluginTrader>
|
|
|
|
#include <KNS3/DownloadDialog>
|
|
|
|
#include <QDialog>
|
|
#include <QDialogButtonBox>
|
|
#include <QVBoxLayout>
|
|
#include <QPointer>
|
|
#include <QPushButton>
|
|
#include <QStandardPaths>
|
|
#include <QString>
|
|
|
|
static const QString s_pluginDir = QStringLiteral("kwin/effects/configs/");
|
|
|
|
namespace KWin {
|
|
namespace Compositing {
|
|
|
|
EffectConfig::EffectConfig(QObject *parent)
|
|
: QObject(parent)
|
|
{
|
|
}
|
|
|
|
void EffectConfig::openConfig(const QString &serviceName, bool scripted, const QString &title)
|
|
{
|
|
//setup the UI
|
|
QDialog dialog;
|
|
dialog.setWindowTitle(title);
|
|
|
|
// create the KCModule through the plugintrader
|
|
KCModule *kcm = nullptr;
|
|
if (scripted) {
|
|
// try generic module for scripted
|
|
const auto offers = KPluginTrader::self()->query(s_pluginDir, QString(),
|
|
QStringLiteral("[X-KDE-Library] == 'kcm_kwin4_genericscripted'"));
|
|
if (!offers.isEmpty()) {
|
|
const KPluginInfo &generic = offers.first();
|
|
KPluginLoader loader(generic.libraryPath());
|
|
KPluginFactory *factory = loader.factory();
|
|
if (factory) {
|
|
kcm = factory->create<KCModule>(serviceName, &dialog);
|
|
}
|
|
}
|
|
} else {
|
|
kcm = KPluginTrader::createInstanceFromQuery<KCModule>(s_pluginDir, QString(),
|
|
QStringLiteral("'%1' in [X-KDE-ParentComponents]").arg(serviceName),
|
|
&dialog);
|
|
}
|
|
if (!kcm) {
|
|
return;
|
|
}
|
|
|
|
connect(&dialog, &QDialog::accepted, kcm, &KCModule::save);
|
|
|
|
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok |
|
|
QDialogButtonBox::Cancel |
|
|
QDialogButtonBox::Apply |
|
|
QDialogButtonBox::RestoreDefaults |
|
|
QDialogButtonBox::Reset,
|
|
&dialog);
|
|
|
|
QPushButton *apply = buttons->button(QDialogButtonBox::Apply);
|
|
QPushButton *reset = buttons->button(QDialogButtonBox::Reset);
|
|
apply->setEnabled(false);
|
|
reset->setEnabled(false);
|
|
//Here we connect our buttons with the dialog
|
|
connect(buttons, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
|
|
connect(buttons, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
|
|
connect(apply, &QPushButton::clicked, kcm, &KCModule::save);
|
|
connect(reset, &QPushButton::clicked, kcm, &KCModule::load);
|
|
auto changedSignal = static_cast<void(KCModule::*)(bool)>(&KCModule::changed);
|
|
connect(kcm, changedSignal, apply, &QPushButton::setEnabled);
|
|
connect(kcm, changedSignal, reset, &QPushButton::setEnabled);
|
|
connect(buttons->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, kcm, &KCModule::defaults);
|
|
|
|
QVBoxLayout *layout = new QVBoxLayout(&dialog);
|
|
layout->addWidget(kcm);
|
|
layout->addWidget(buttons);
|
|
dialog.exec();
|
|
}
|
|
|
|
void EffectConfig::openGHNS()
|
|
{
|
|
QPointer<KNS3::DownloadDialog> downloadDialog = new KNS3::DownloadDialog(QStringLiteral("kwineffect.knsrc"));
|
|
if (downloadDialog->exec() == QDialog::Accepted) {
|
|
emit effectListChanged();
|
|
}
|
|
|
|
delete downloadDialog;
|
|
}
|
|
|
|
}//end namespace Compositing
|
|
}//end namespace KWin
|