From 69eaa4052c5d5e8f4ac2f87e2ef3362c5d429e64 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 23 Jan 2017 10:45:54 +0100 Subject: QQuickAbstractButton: don't leak space key events Unlike mouse events, key events are not accepted by default. Key events must be accepted to avoid event propagation. Change-Id: I8d9217e6f18d56515470bef2507d462edd274ce2 Reviewed-by: Mitch Curtis --- src/quicktemplates2/qquickabstractbutton.cpp | 2 ++ tests/auto/controls/data/tst_abstractbutton.qml | 36 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp index 6af8b00d..68a0a11b 100644 --- a/src/quicktemplates2/qquickabstractbutton.cpp +++ b/src/quicktemplates2/qquickabstractbutton.cpp @@ -496,6 +496,7 @@ void QQuickAbstractButton::keyPressEvent(QKeyEvent *event) } emit pressed(); + event->accept(); } } @@ -512,6 +513,7 @@ void QQuickAbstractButton::keyReleaseEvent(QKeyEvent *event) if (d->autoRepeat) d->stopPressRepeat(); + event->accept(); } } diff --git a/tests/auto/controls/data/tst_abstractbutton.qml b/tests/auto/controls/data/tst_abstractbutton.qml index b785b7a1..157616d6 100644 --- a/tests/auto/controls/data/tst_abstractbutton.qml +++ b/tests/auto/controls/data/tst_abstractbutton.qml @@ -125,4 +125,40 @@ TestCase { control.destroy() } + + Component { + id: keyCatcher + Item { + property int lastKeyPress: -1 + property int lastKeyRelease: -1 + Keys.onPressed: lastKeyPress = event.key + Keys.onReleased: lastKeyRelease = event.key + } + } + + function test_keyEvents_data() { + return [ + { tag: "space", key: Qt.Key_Space, result: -1 }, + { tag: "backspace", key: Qt.Key_Backspace, result: Qt.Key_Backspace } + ] + } + + function test_keyEvents(data) { + var container = keyCatcher.createObject(testCase) + verify(container) + + var control = button.createObject(container) + verify(control) + + control.forceActiveFocus() + verify(control.activeFocus) + + keyPress(data.key) + compare(container.lastKeyPress, data.result) + + keyRelease(data.key) + compare(container.lastKeyRelease, data.result) + + container.destroy() + } } -- cgit v1.2.3