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"