diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-01-22 11:32:48 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-01-22 11:55:32 +0000 |
commit | 0dbbfc2f2824aa3891fde0b219fb4951e94a64c9 (patch) | |
tree | f735f11050201208149cfc17dfc58767e9ac155f | |
parent | deb779cdbaeeaea52ca0e99c9295db587c25f41c (diff) |
Fix Action shortcuts in Repeater
QQuickRepeater does not set a QObject-parent, so make
QQuickShortcutContext::matcher() start from the object itself and
if no window is found, then iterate to the QObject parents.
Task-number: QTBUG-65889
Change-Id: I30a1ed0616edd002abcf28d1b8dc7e2d87e99c13
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickshortcutcontext.cpp | 4 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_action.qml | 28 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickshortcutcontext.cpp b/src/quicktemplates2/qquickshortcutcontext.cpp index b491cab2..e94de722 100644 --- a/src/quicktemplates2/qquickshortcutcontext.cpp +++ b/src/quicktemplates2/qquickshortcutcontext.cpp @@ -76,14 +76,16 @@ bool QQuickShortcutContext::matcher(QObject *obj, Qt::ShortcutContext context) return true; case Qt::WindowShortcut: while (obj && !obj->isWindowType()) { - obj = obj->parent(); item = qobject_cast<QQuickItem *>(obj); if (item) { obj = item->window(); + break; } else if (QQuickPopup *popup = qobject_cast<QQuickPopup *>(obj)) { obj = popup->window(); item = popup->popupItem(); + break; } + obj = obj->parent(); } if (QWindow *renderWindow = QQuickRenderControl::renderWindowFor(qobject_cast<QQuickWindow *>(obj))) obj = renderWindow; diff --git a/tests/auto/controls/data/tst_action.qml b/tests/auto/controls/data/tst_action.qml index 7d057c26..35e65202 100644 --- a/tests/auto/controls/data/tst_action.qml +++ b/tests/auto/controls/data/tst_action.qml @@ -137,4 +137,32 @@ TestCase { keyClick(Qt.Key_B, Qt.ControlModifier) compare(container.lastSource, container.action) } + + Component { + id: actionAndRepeater + Item { + property alias action: testAction + Action { + id: testAction + shortcut: "Ctrl+A" + } + Repeater { + model: 1 + Button { + action: testAction + } + } + } + } + + function test_repeater() { + var container = createTemporaryObject(actionAndRepeater, testCase) + verify(container) + + var spy = signalSpy.createObject(container, {target: container.action, signalName: "triggered"}) + verify(spy.valid) + + keyClick(Qt.Key_A, Qt.ControlModifier) + compare(spy.count, 1) + } } |