File indexing completed on 2024-05-12 17:07:31

0001 /*
0002     SPDX-FileCopyrightText: 2018 <furkantokac34@gmail.com>
0003     SPDX-FileCopyrightText: 2019 Cyril Rossi <cyril.rossi@enioka.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "workspaceoptions.h"
0009 
0010 #include <KLocalizedString>
0011 #include <KPluginFactory>
0012 
0013 #include <QDBusConnection>
0014 #include <QDBusMessage>
0015 #include <QDBusPendingCall>
0016 
0017 #include "workspaceoptions_kdeglobalssettings.h"
0018 #include "workspaceoptions_kwinsettings.h"
0019 #include "workspaceoptions_plasmasettings.h"
0020 #include "workspaceoptionsdata.h"
0021 
0022 K_PLUGIN_FACTORY_WITH_JSON(KCMWorkspaceOptionsFactory, "kcm_workspace.json", registerPlugin<KCMWorkspaceOptions>(); registerPlugin<WorkspaceOptionsData>();)
0023 
0024 KCMWorkspaceOptions::KCMWorkspaceOptions(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
0025     : KQuickAddons::ManagedConfigModule(parent, metaData, args)
0026     , m_data(new WorkspaceOptionsData(this))
0027 {
0028     qmlRegisterAnonymousType<WorkspaceOptionsGlobalsSettings>("org.kde.plasma.workspaceoptions.kcm", 0);
0029     qmlRegisterAnonymousType<WorkspaceOptionsPlasmaSettings>("org.kde.plasma.workspaceoptions.kcm", 0);
0030     qmlRegisterAnonymousType<WorkspaceOptionsKwinSettings>("org.kde.plasma.workspaceoptions.kcm", 0);
0031 
0032     setButtons(Apply | Default | Help);
0033 }
0034 
0035 WorkspaceOptionsGlobalsSettings *KCMWorkspaceOptions::globalsSettings() const
0036 {
0037     return m_data->workspaceOptionsGlobalsSettings();
0038 }
0039 
0040 WorkspaceOptionsPlasmaSettings *KCMWorkspaceOptions::plasmaSettings() const
0041 {
0042     return m_data->workspaceOptionsPlasmaSettings();
0043 }
0044 
0045 WorkspaceOptionsKwinSettings *KCMWorkspaceOptions::kwinSettings() const
0046 {
0047     return m_data->workspaceOptionsKwinSettings();
0048 }
0049 
0050 void KCMWorkspaceOptions::save()
0051 {
0052     const bool primarySelectionSaved = m_data->workspaceOptionsKwinSettings()->findItem(QStringLiteral("primarySelection"))->isSaveNeeded();
0053 
0054     ManagedConfigModule::save();
0055 
0056     {
0057         QDBusMessage message = QDBusMessage::createSignal("/KGlobalSettings", "org.kde.KGlobalSettings", "notifyChange");
0058         QList<QVariant> args;
0059         args.append(3 /*KGlobalSettings::SettingsChanged*/);
0060         args.append(0 /*GlobalSettings::SettingsCategory::SETTINGS_MOUSE*/);
0061         message.setArguments(args);
0062         QDBusConnection::sessionBus().send(message);
0063     }
0064 
0065     {
0066         QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/kwinrc"), QStringLiteral("org.kde.kconfig.notify"), QStringLiteral("ConfigChanged"));
0067         const QHash<QString, QByteArrayList> changes = {
0068             {QStringLiteral("Wayland"), {"EnablePrimarySelection"}},
0069         };
0070         message.setArguments({QVariant::fromValue(changes)});
0071         QDBusConnection::sessionBus().send(message);
0072     }
0073 
0074     if (primarySelectionSaved) {
0075         Q_EMIT primarySelectionOptionSaved();
0076     }
0077 }
0078 
0079 void KCMWorkspaceOptions::requestReboot()
0080 {
0081     QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.LogoutPrompt"),
0082                                                       QStringLiteral("/LogoutPrompt"),
0083                                                       QStringLiteral("org.kde.LogoutPrompt"),
0084                                                       QStringLiteral("promptReboot"));
0085     QDBusConnection::sessionBus().asyncCall(msg);
0086 }
0087 
0088 #include "moc_workspaceoptions.cpp"
0089 #include "workspaceoptions.moc"