From f581ad7ded893bae3c99cd979af70f3dea0ece61 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 19 Jan 2017 15:25:03 +0100 Subject: [PATCH] QmlDesigner: Override shortcuts in text editor There are a couple of known shortcuts that we have to override in the text editor. We install an event filter and handle the shortcut override event for the keys in question. Change-Id: Icb5483b19e2202d85e99d24c20d05097aaa33da6 Reviewed-by: Tim Jenssen --- .../texteditor/texteditorwidget.cpp | 19 +++++++++++++++++++ .../components/texteditor/texteditorwidget.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp index 5e7407fdf7b..49c9e2dba5a 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp @@ -34,8 +34,12 @@ #include +#include #include +#include +#include + namespace QmlDesigner { TextEditorWidget::TextEditorWidget(TextEditorView *textEditorView) : QWidget() @@ -64,6 +68,7 @@ void TextEditorWidget::setTextEditor(TextEditor::BaseTextEditor *textEditor) { connect(textEditor->editorWidget(), &QPlainTextEdit::cursorPositionChanged, &m_updateSelectionTimer, static_cast(&QTimer::start)); + textEditor->editorWidget()->installEventFilter(this); } QString TextEditorWidget::contextHelpId() const @@ -136,4 +141,18 @@ int TextEditorWidget::currentLine() const return -1; } +bool TextEditorWidget::eventFilter( QObject *, QEvent *event) +{ + static std::vector overrideKeys = { Qt::Key_Delete, Qt::Key_Backspace, Qt::Key_Left, Qt::Key_Right, Qt::Key_Up, Qt::Key_Down }; + if (event->type() == QEvent::ShortcutOverride) { + QKeyEvent *keyEvent = static_cast(event); + if (std::find(overrideKeys.begin(), overrideKeys.end(), keyEvent->key()) != overrideKeys.end()) { + keyEvent->accept(); + return true; + } + } + return false; +} + + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h index 41da765aa0b..46a65cdd24b 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h @@ -58,6 +58,9 @@ public: void clearStatusBar(); int currentLine() const; +protected: + bool eventFilter(QObject *object, QEvent *event) override; + private: void updateSelectionByCursorPosition();