File indexing completed on 2024-05-19 05:39:09

0001 /*
0002  SPDX-FileCopyrightText: 2023 David Edmundson <davidedmundson@kde.org>
0003 
0004  SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <KActionCollection>
0008 #include <KDEDModule>
0009 #include <KGlobalAccel>
0010 #include <KLocalizedString>
0011 #include <KPluginFactory>
0012 
0013 #include <sessionmanagement.h>
0014 
0015 class SessionShortcutsModule : public KDEDModule
0016 {
0017     Q_OBJECT
0018 public:
0019     SessionShortcutsModule(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args);
0020 };
0021 
0022 K_PLUGIN_CLASS_WITH_JSON(SessionShortcutsModule, "sessionshortcuts.json");
0023 
0024 SessionShortcutsModule::SessionShortcutsModule(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args)
0025     : KDEDModule(parent)
0026 {
0027     Q_UNUSED(args)
0028     Q_UNUSED(metaData)
0029     SessionManagement *sessionManagement = new SessionManagement(this);
0030 
0031     KActionCollection *actionCollection = new KActionCollection(this);
0032     actionCollection->setComponentDisplayName(i18n("Session Management"));
0033     actionCollection->setComponentName(QStringLiteral("ksmserver")); // for migration purposes
0034     QAction *a;
0035 
0036     // "Just show the logout dialog with all options" action
0037     // TODO: change ID to "Show Logout Prompt" and migrate settings
0038     a = actionCollection->addAction(QStringLiteral("Log Out"));
0039     a->setText(i18nc("@action", "Show Logout Prompt"));
0040     KGlobalAccel::self()->setGlobalShortcut(a, QList<QKeySequence>() << (Qt::ALT | Qt::CTRL | Qt::Key_Delete));
0041     connect(a, &QAction::triggered, this, [sessionManagement]() {
0042         sessionManagement->requestLogoutPrompt();
0043     });
0044 
0045     // "With confirmation" actions
0046     // TODO: change ID to "Log Out" and migrate settings
0047     a = actionCollection->addAction(QStringLiteral("LogOut"));
0048     a->setText(i18n("Log Out"));
0049     KGlobalAccel::self()->setGlobalShortcut(a, QKeySequence());
0050     connect(a, &QAction::triggered, this, [sessionManagement]() {
0051         sessionManagement->requestLogout(SessionManagement::ConfirmationMode::ForcePrompt);
0052     });
0053     a = actionCollection->addAction(QStringLiteral("Shut Down"));
0054     a->setText(i18n("Shut Down"));
0055     KGlobalAccel::self()->setGlobalShortcut(a, QKeySequence());
0056     connect(a, &QAction::triggered, this, [sessionManagement]() {
0057         sessionManagement->requestShutdown(SessionManagement::ConfirmationMode::ForcePrompt);
0058     });
0059     a = actionCollection->addAction(QStringLiteral("Reboot"));
0060     a->setText(i18n("Reboot"));
0061     KGlobalAccel::self()->setGlobalShortcut(a, QKeySequence());
0062     connect(a, &QAction::triggered, this, [sessionManagement]() {
0063         sessionManagement->requestReboot(SessionManagement::ConfirmationMode::ForcePrompt);
0064     });
0065 
0066     // "Without confirmation" actions
0067     a = actionCollection->addAction(QStringLiteral("Log Out Without Confirmation"));
0068     a->setText(i18n("Log Out Without Confirmation"));
0069     KGlobalAccel::self()->setGlobalShortcut(a, QKeySequence());
0070     connect(a, &QAction::triggered, this, [sessionManagement]() {
0071         sessionManagement->requestLogout(SessionManagement::ConfirmationMode::Skip);
0072     });
0073     a = actionCollection->addAction(QStringLiteral("Halt Without Confirmation"));
0074     a->setText(i18n("Shut Down Without Confirmation"));
0075     KGlobalAccel::self()->setGlobalShortcut(a, QKeySequence());
0076     connect(a, &QAction::triggered, this, [sessionManagement]() {
0077         sessionManagement->requestShutdown(SessionManagement::ConfirmationMode::Skip);
0078     });
0079     a = actionCollection->addAction(QStringLiteral("Reboot Without Confirmation"));
0080     a->setText(i18n("Reboot Without Confirmation"));
0081     KGlobalAccel::self()->setGlobalShortcut(a, QKeySequence());
0082     connect(a, &QAction::triggered, this, [sessionManagement]() {
0083         sessionManagement->requestReboot(SessionManagement::ConfirmationMode::Skip);
0084     });
0085 }
0086 
0087 #include "main.moc"