SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
SPDX-FileCopyrightText: 2023 Jeremy Whiting <jpwhiting@kde.org>
SPDX-FileCopyrightText: 2023 NiccolΓ² Venerandi <niccolo@venerandi.com>
SPDX-FileCopyrightText: 2025 Yelsin Sepulveda <yelsin.sepulveda@kdemail.org>
SPDX-FileCopyrightText: 2025 Jakob Petsovits <jpetso@petsovits.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "kcm.h"
#include <KConfigGroup>
#include <KPluginFactory>
#include <KSharedConfig>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusPendingCall>
#include <qqml.h>
#include "axesmodel.h"
#include "axesproxymodel.h"
#include "buttonmodel.h"
#include "devicemodel.h"
#include "gamecontrolleremulationsettings.h"
#include "gamecontrollermoduledata.h"
#include "hatmodel.h"
K_PLUGIN_FACTORY_WITH_JSON(KCMGameControllerFactory, "kcm_gamecontroller.json", registerPlugin<KCMGameController>(); registerPlugin<GameControllerModuleData>();)
static const QString s_kwinPluginId = QStringLiteral("gamecontroller");
KCMGameController::KCMGameController(QObject *parent, const KPluginMetaData &metaData)
: KQuickConfigModule(parent, metaData)
, m_emulationSettings(std::make_unique<GameControllerEmulationSettings>())
{
setButtons(Help);
constexpr const char *uri{"org.kde.plasma.gamecontroller.kcm"};
qmlRegisterUncreatableType<KCMGameController>(uri, 1, 0, "KCMGameController", QString());
qmlRegisterSingletonInstance<DeviceModel>(uri, 1, 0, "DeviceModel", DeviceModel::instance());
qmlRegisterType<AxesModel>(uri, 1, 0, "AxesModel");
qmlRegisterType<AxesProxyModel>(uri, 1, 0, "AxesProxyModel");
qmlRegisterType<ButtonModel>(uri, 1, 0, "ButtonModel");
qmlRegisterType<HatModel>(uri, 1, 0, "HatModel");
}
KCMGameController::~KCMGameController()
{
}
bool KCMGameController::isPluginEnabled() const
{
return m_emulationSettings->gamecontrollerEnabled();
}
void KCMGameController::setPluginEnabled(bool enabled)
{
m_emulationSettings->setGamecontrollerEnabled(enabled);
m_emulationSettings->save();
QDBusMessage message;
if (enabled) {
message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin"),
QStringLiteral("/Plugins"),
QStringLiteral("org.kde.KWin.Plugins"),
QStringLiteral("LoadPlugin"));
message << s_kwinPluginId;
} else {
message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin"),
QStringLiteral("/Plugins"),
QStringLiteral("org.kde.KWin.Plugins"),
QStringLiteral("UnloadPlugin"));
message << s_kwinPluginId;
}
QDBusConnection::sessionBus().asyncCall(message);
Q_EMIT pluginEnabledChanged();
}
#include "kcm.moc"
#include "moc_kcm.cpp"