kde-workspace/kcontrol/componentchooser/componentchooserwm.cpp

169 lines
5 KiB
C++
Raw Normal View History

2014-11-15 03:14:34 +02:00
/***************************************************************************
componentchooserwm.cpp - description
-------------------
copyright : (C) 2002 by Joseph Wenninger
email : jowenn@kde.org
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License verstion 2 as *
* published by the Free Software Foundation *
* *
***************************************************************************/
#include "componentchooserwm.h"
2015-02-27 09:28:46 +00:00
#include "moc_componentchooserwm.cpp"
2014-11-15 03:14:34 +02:00
#include <kdesktopfile.h>
#include <kmessagebox.h>
#include <kstandarddirs.h>
#include <kconfiggroup.h>
#include <kdebug.h>
#include <qfileinfo.h>
#include <qprocess.h>
2014-11-15 03:14:34 +02:00
#include <netwm.h>
2014-11-15 03:14:34 +02:00
CfgWm::CfgWm(QWidget *parent)
: QWidget(parent)
, Ui::WmConfig_UI()
, CfgPlugin()
2014-11-15 03:14:34 +02:00
{
setupUi(this);
connect(wmCombo,SIGNAL(activated(int)), this, SLOT(configChanged()));
connect(kwinRB,SIGNAL(toggled(bool)),this,SLOT(configChanged()));
connect(differentRB,SIGNAL(toggled(bool)),this,SLOT(configChanged()));
connect(differentRB,SIGNAL(toggled(bool)),this,SLOT(checkConfigureWm()));
connect(wmCombo,SIGNAL(activated(int)),this,SLOT(checkConfigureWm()));
connect(configureButton,SIGNAL(clicked()),this,SLOT(configureWm()));
KGlobal::dirs()->addResourceType("windowmanagers", "data", "plasma/windowmanagers");
2014-11-15 03:14:34 +02:00
}
CfgWm::~CfgWm()
{
}
void CfgWm::configChanged()
{
emit changed(true);
}
void CfgWm::defaults()
{
wmCombo->setCurrentIndex( 0 );
}
void CfgWm::load(KConfig *)
{
KConfig cfg("plasmarc", KConfig::NoGlobals);
2014-11-15 03:14:34 +02:00
KConfigGroup c( &cfg, "General");
loadWMs(c.readEntry("windowManager", "kwin"));
emit changed(false);
}
void CfgWm::save(KConfig *)
{
saveAndConfirm();
}
bool CfgWm::saveAndConfirm()
{
KConfig cfg("plasmarc", KConfig::NoGlobals);
2014-11-15 03:14:34 +02:00
KConfigGroup c( &cfg, "General");
c.writeEntry("windowManager", currentWm());
emit changed(false);
if (oldwm == currentWm()) {
2014-11-15 03:14:34 +02:00
return true;
}
oldwm = currentWm();
cfg.sync();
KMessageBox::information(
window(),
i18n(
"The change will take effect on the next KDE session."
),
i18n("Window Manager Changed"),
"restartafterwmchange"
);
return true;
2014-11-15 03:14:34 +02:00
}
void CfgWm::loadWMs(const QString &current)
2014-11-15 03:14:34 +02:00
{
WmData kwin;
kwin.internalName = "kwin";
kwin.exec = "kwin";
kwin.configureCommand = "";
kwin.parentArgument = "";
wms["KWin"] = kwin;
2014-11-15 03:14:34 +02:00
oldwm = "kwin";
kwinRB->setChecked(true);
wmCombo->setEnabled(false);
2014-11-15 03:14:34 +02:00
QStringList list = KGlobal::dirs()->findAllResources("windowmanagers", QString(), KStandardDirs::NoDuplicates);
foreach (const QString& wmfile, list) {
KDesktopFile file(wmfile);
if (file.noDisplay())
2014-11-15 03:14:34 +02:00
continue;
if (!file.tryExec())
2014-11-15 03:14:34 +02:00
continue;
QString name = file.readName();
if (name.isEmpty())
2014-11-15 03:14:34 +02:00
continue;
QString wm = QFileInfo(file.name()).baseName();
if (wms.contains(name))
2014-11-15 03:14:34 +02:00
continue;
WmData data;
data.internalName = wm;
data.exec = file.desktopGroup().readEntry("Exec");
if (data.exec.isEmpty())
2014-11-15 03:14:34 +02:00
continue;
data.configureCommand = file.desktopGroup().readEntry("X-KDE-WindowManagerConfigure");
data.parentArgument = file.desktopGroup().readEntry("X-KDE-WindowManagerConfigureParentArgument");
wms[name] = data;
wmCombo->addItem(name);
if (wms[name].internalName == current) {
// make it selected
wmCombo->setCurrentIndex(wmCombo->count() - 1);
2014-11-15 03:14:34 +02:00
oldwm = wm;
differentRB->setChecked(true);
wmCombo->setEnabled(true);
2014-11-15 03:14:34 +02:00
}
}
differentRB->setEnabled(wmCombo->count() > 0);
2014-11-15 03:14:34 +02:00
checkConfigureWm();
}
CfgWm::WmData CfgWm::currentWmData() const
{
return kwinRB->isChecked() ? wms["KWin"] : wms[wmCombo->currentText()];
2014-11-15 03:14:34 +02:00
}
QString CfgWm::currentWm() const
{
return currentWmData().internalName;
}
void CfgWm::checkConfigureWm()
{
configureButton->setEnabled(!currentWmData().configureCommand.isEmpty());
2014-11-15 03:14:34 +02:00
}
void CfgWm::configureWm()
{
if (oldwm != currentWm() && !saveAndConfirm()) {
// needs switching first
2014-11-15 03:14:34 +02:00
return;
}
QStringList args;
if (!currentWmData().parentArgument.isEmpty()) {
args << currentWmData().parentArgument << QString::number(window()->winId());
}
if (!QProcess::startDetached(currentWmData().configureCommand, args)) {
KMessageBox::sorry(window(), i18n("Running the configuration tool failed"));
}
2014-11-15 03:14:34 +02:00
}