diff --git a/containmentactions/contextmenu/menu.cpp b/containmentactions/contextmenu/menu.cpp index 3271140..dcee8fd 100644 --- a/containmentactions/contextmenu/menu.cpp +++ b/containmentactions/contextmenu/menu.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -40,6 +41,7 @@ ContextMenu::ContextMenu(QObject *parent, const QVariantList &args) : Plasma::ContainmentActions(parent, args) + , m_runKonsoleAction(nullptr) , m_lockScreenAction(nullptr) , m_logoutAction(nullptr) , m_separator1(nullptr) @@ -70,7 +72,7 @@ void ContextMenu::restore(const KConfigGroup &config) } else { actions.insert(QStringLiteral("configure shortcuts"), false); m_actionOrder << QStringLiteral("configure") << QStringLiteral("run associated application") << QStringLiteral("configure shortcuts") - << QStringLiteral("_sep1") << QStringLiteral("_context") << QStringLiteral("_run_command") << QStringLiteral("add widgets") + << QStringLiteral("_sep1") << QStringLiteral("_context") << QStringLiteral("_run_konsole") << QStringLiteral("_run_command") << QStringLiteral("add widgets") << QStringLiteral("_add panel") << QStringLiteral("manage activities") << QStringLiteral("remove") << QStringLiteral("edit mode") << QStringLiteral("_sep2") << QStringLiteral("_lock_screen") << QStringLiteral("_logout") << QStringLiteral("_sep3") << QStringLiteral("_wallpaper"); @@ -89,6 +91,10 @@ void ContextMenu::restore(const KConfigGroup &config) // everything below should only happen once, so check for it if (!m_lockScreenAction) { + m_runKonsoleAction = new QAction(i18n("Konsole"), this); + m_runKonsoleAction->setIcon(QIcon::fromTheme("utilities-terminal")); + connect(m_runKonsoleAction, &QAction::triggered, this, &ContextMenu::runKonsole); + m_lockScreenAction = new QAction(i18nc("plasma_containmentactions_contextmenu", "Lock Screen"), this); m_lockScreenAction->setIcon(QIcon::fromTheme(QStringLiteral("system-lock-screen"))); m_lockScreenAction->setShortcut(KGlobalAccel::self()->globalShortcut(QStringLiteral("ksmserver"), QStringLiteral("Lock Session")).value(0)); @@ -163,6 +169,8 @@ QAction *ContextMenu::action(const QString &name) if (c->corona() && c->corona()->immutability() == Plasma::Types::Mutable) { return c->corona()->actions()->action(QStringLiteral("add panel")); } + } else if (name == QLatin1String("_run_konsole")) { + return m_runKonsoleAction; } else if (name == QLatin1String("_lock_screen")) { if (KAuthorized::authorizeAction(QStringLiteral("lock_screen"))) { return m_lockScreenAction; @@ -186,6 +194,11 @@ QAction *ContextMenu::action(const QString &name) return nullptr; } +void ContextMenu::runKonsole() +{ + KToolInvocation::invokeTerminal(QString(), QDir::homePath()); +} + void ContextMenu::runCommand() { if (!KAuthorized::authorizeAction(QStringLiteral("run_command"))) { diff --git a/containmentactions/contextmenu/menu.h b/containmentactions/contextmenu/menu.h index 3cc3d32..5735fb8 100644 --- a/containmentactions/contextmenu/menu.h +++ b/containmentactions/contextmenu/menu.h @@ -42,10 +42,12 @@ public: void save(KConfigGroup &config) override; public Q_SLOTS: + void runKonsole(); void runCommand(); void startLogout(); private: + QAction *m_runKonsoleAction; QAction *m_lockScreenAction; QAction *m_logoutAction; QAction *m_separator1;