diff -Nru a/containmentactions/contextmenu/menu.cpp b/containmentactions/contextmenu/menu.cpp --- a/containmentactions/contextmenu/menu.cpp 2016-09-15 13:01:20.000000000 +0200 +++ b/containmentactions/contextmenu/menu.cpp 2016-09-20 13:04:53.349279880 +0200 @@ -31,6 +31,7 @@ #include <QIcon> #include <KGlobalAccel> #include <KLocalizedString> +#include <KToolInvocation> #include <Plasma/Containment> #include <Plasma/Corona> @@ -46,6 +47,7 @@ ContextMenu::ContextMenu(QObject *parent, const QVariantList &args) : Plasma::ContainmentActions(parent, args), + m_runKonsoleAction(0), m_runCommandAction(0), m_lockScreenAction(0), m_logoutAction(0), @@ -75,7 +77,7 @@ m_actionOrder << QStringLiteral("add widgets") << QStringLiteral("_add panel") << QStringLiteral("lock widgets") << QStringLiteral("_context") << QStringLiteral("configure") << QStringLiteral("remove"); } else { actions.insert(QStringLiteral("configure shortcuts"), false); - m_actionOrder << QStringLiteral("_context") << QStringLiteral("_run_command") << QStringLiteral("add widgets") << QStringLiteral("_add panel") + m_actionOrder << QStringLiteral("_context") << QStringLiteral("_run_konsole") << QStringLiteral("_run_command") << QStringLiteral("add widgets") << QStringLiteral("_add panel") << QStringLiteral("manage activities") << QStringLiteral("remove") << QStringLiteral("lock widgets") << QStringLiteral("_sep1") <<QStringLiteral("_lock_screen") << QStringLiteral("_logout") << QStringLiteral("_sep2") << QStringLiteral("run associated application") << QStringLiteral("configure") << QStringLiteral("configure shortcuts") << QStringLiteral("_sep3") << QStringLiteral("_wallpaper"); @@ -94,6 +96,10 @@ // everything below should only happen once, so check for it if (!m_runCommandAction) { + m_runKonsoleAction = new QAction(i18n("Konsole"), this); + m_runKonsoleAction->setIcon(QIcon::fromTheme("utilities-terminal")); + connect(m_runKonsoleAction, &QAction::triggered, this, &ContextMenu::runKonsole); + m_runCommandAction = new QAction(i18nc("plasma_containmentactions_contextmenu", "Run Command..."), this); m_runCommandAction->setIcon(QIcon::fromTheme(QStringLiteral("system-run"))); m_runCommandAction->setShortcut(KGlobalAccel::self()->globalShortcut(QStringLiteral("krunner"), QStringLiteral("run command")).value(0)); @@ -165,6 +171,8 @@ 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("_run_command")) { if (KAuthorized::authorizeAction(QStringLiteral("run_command"))) { return m_runCommandAction; @@ -192,6 +200,11 @@ return 0; } +void ContextMenu::runKonsole() +{ + KToolInvocation::invokeTerminal(QString(), QDir::homePath()); +} + void ContextMenu::runCommand() { if (!KAuthorized::authorizeAction(QStringLiteral("run_command"))) { diff -Nru a/containmentactions/contextmenu/menu.h b/containmentactions/contextmenu/menu.h --- a/containmentactions/contextmenu/menu.h 2016-09-15 13:01:20.000000000 +0200 +++ b/containmentactions/contextmenu/menu.h 2016-09-20 13:06:06.902766638 +0200 @@ -40,12 +40,14 @@ void save(KConfigGroup &config) override; public Q_SLOTS: + void runKonsole(); void runCommand(); void lockScreen(); void startLogout(); void logout(); private: + QAction *m_runKonsoleAction; QAction *m_runCommandAction; QAction *m_lockScreenAction; QAction *m_logoutAction;