diff --git a/src/plugins/terminal/terminalconstants.h b/src/plugins/terminal/terminalconstants.h index 99700475e60..67b618c62de 100644 --- a/src/plugins/terminal/terminalconstants.h +++ b/src/plugins/terminal/terminalconstants.h @@ -15,5 +15,6 @@ constexpr char CLEARSELECTION[] = "Terminal.ClearSelection"; constexpr char MOVECURSORWORDLEFT[] = "Terminal.MoveCursorWordLeft"; constexpr char MOVECURSORWORDRIGHT[] = "Terminal.MoveCursorWordRight"; constexpr char CLEAR_TERMINAL[] = "Terminal.ClearTerminal"; +constexpr char TOGGLE_KEYBOARD_LOCK[] = "Terminal.ToggleKeyboardLock"; } // namespace Terminal::Constants diff --git a/src/plugins/terminal/terminalpane.cpp b/src/plugins/terminal/terminalpane.cpp index a11284ef1bd..cdbbb850173 100644 --- a/src/plugins/terminal/terminalpane.cpp +++ b/src/plugins/terminal/terminalpane.cpp @@ -125,6 +125,8 @@ TerminalPane::TerminalPane(QObject *parent) updateLockButton(); + connect(&toggleKeyboardLock, &QAction::triggered, m_lockKeyboardButton, &QToolButton::toggle); + connect(m_lockKeyboardButton, &QToolButton::toggled, this, [this, updateLockButton] { settings().lockKeyboard.setValue(m_lockKeyboardButton->isChecked()); updateLockButton(); @@ -292,6 +294,8 @@ void TerminalPane::initActions() closeTerminal.setIcon(CLOSE_TERMINAL_ICON.icon()); closeTerminal.setToolTip(Tr::tr("Close the current Terminal.")); + toggleKeyboardLock.setText(Tr::tr("Toggle Keyboard Lock")); + using namespace Constants; Command *cmd = ActionManager::registerAction(&newTerminal, NEWTERMINAL, m_selfContext); @@ -310,6 +314,10 @@ void TerminalPane::initActions() QKeySequence(HostOsInfo::isMacHost() ? QLatin1String("Ctrl+Shift+]") : QLatin1String("Ctrl+PgDown"))}); + ActionManager::registerAction(&toggleKeyboardLock, + TOGGLE_KEYBOARD_LOCK, + m_selfContext); + connect(&newTerminal, &QAction::triggered, this, [this] { openTerminal({}); }); connect(&closeTerminal, &QAction::triggered, this, [this] { removeTab(m_tabWidget.currentIndex()); diff --git a/src/plugins/terminal/terminalpane.h b/src/plugins/terminal/terminalpane.h index c21d1525120..dc3b4d30f15 100644 --- a/src/plugins/terminal/terminalpane.h +++ b/src/plugins/terminal/terminalpane.h @@ -66,6 +66,7 @@ private: QAction nextTerminal; QAction prevTerminal; QAction closeTerminal; + QAction toggleKeyboardLock; QMenu m_shellMenu; diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index c9b52f6bf35..584a15a90cd 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -571,6 +571,12 @@ bool TerminalWidget::event(QEvent *event) return true; } + if (settings().lockKeyboard() + && QKeySequence(keyEvent->keyCombination()) + == ActionManager::command(Constants::TOGGLE_KEYBOARD_LOCK)->keySequence()) { + return false; + } + if (settings().lockKeyboard()) { event->accept(); return true;