From 88aabf069a0e454777c15227126732a04c8cb8b2 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Fri, 18 Sep 2020 00:13:07 +0100 Subject: [PATCH] Block shortcuts when recording key sequences Otherwise you can't select alt+a as a shortcut without triggering the nmenomic generated shortcut on the "add application" button. Testing done: - clicked "Add custom shortcut", pressed alt+a, it was recorded successfully - focussed "Add custom shortcut", pressed alt+a, the relevant shortcut activated Note that isRecording was already declared, but not defined, which is why it looks like my diff misses something. BUG: 425979 --- src/qmlcontrols/kquickcontrols/KeySequenceItem.qml | 7 +++++++ .../kquickcontrols/private/keysequencehelper.cpp | 8 +++++++- .../kquickcontrols/private/keysequencehelper.h | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/qmlcontrols/kquickcontrols/KeySequenceItem.qml b/src/qmlcontrols/kquickcontrols/KeySequenceItem.qml index 9d8e035..d1fbc02 100644 --- a/src/qmlcontrols/kquickcontrols/KeySequenceItem.qml +++ b/src/qmlcontrols/kquickcontrols/KeySequenceItem.qml @@ -83,6 +83,13 @@ RowLayout { } } + Keys.onShortcutOverride: { + if (_helper.isRecording) { + _helper.keyPressed(event.key, event.modifiers); + event.accepted = true; + } + } + Keys.onPressed: { _helper.keyPressed(event.key, event.modifiers); event.accepted = true; diff --git a/src/qmlcontrols/kquickcontrols/private/keysequencehelper.cpp b/src/qmlcontrols/kquickcontrols/private/keysequencehelper.cpp index ba7ce01..26b0331 100644 --- a/src/qmlcontrols/kquickcontrols/private/keysequencehelper.cpp +++ b/src/qmlcontrols/kquickcontrols/private/keysequencehelper.cpp @@ -237,7 +237,10 @@ void KeySequenceHelper::setCheckAgainstShortcutTypes(KeySequenceHelper::Shortcut Q_EMIT checkAgainstShortcutTypesChanged(); } - +bool KeySequenceHelper::isRecording() const +{ + return d->isRecording; +} void KeySequenceHelper::clearKeySequence() { @@ -251,6 +254,7 @@ void KeySequenceHelperPrivate::startRecording() oldKeySequence = keySequence; keySequence = QKeySequence(); isRecording = true; + emit q->isRecordingChanged(); grabbedWindow = QQuickRenderControl::renderWindowFor(q->window()); if (!grabbedWindow) { grabbedWindow = q->window(); @@ -265,6 +269,8 @@ void KeySequenceHelper::doneRecording() { d->modifierlessTimeout.stop(); d->isRecording = false; + emit isRecordingChanged(); + d->stealActions.clear(); if (d->grabbedWindow) { d->grabbedWindow->setKeyboardGrabEnabled(false); diff --git a/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h b/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h index c9068e8..daeedc5 100644 --- a/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h +++ b/src/qmlcontrols/kquickcontrols/private/keysequencehelper.h @@ -51,6 +51,12 @@ class KeySequenceHelper : public QQuickItem NOTIFY checkAgainstShortcutTypesChanged ) + Q_PROPERTY( + bool isRecording + READ isRecording + NOTIFY isRecordingChanged + ) + public: enum ShortcutType { @@ -116,6 +122,7 @@ Q_SIGNALS: void shortcutDisplayChanged(const QString &string); void captureFinished(); void checkAgainstShortcutTypesChanged(); + void isRecordingChanged(); public Q_SLOTS: void captureKeySequence(); -- GitLab