diff options
| author | Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> | 2025-06-11 14:02:36 +0200 |
|---|---|---|
| committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2025-07-12 06:48:23 +0000 |
| commit | d7ee847bd6260367de35632235a449efedba698e (patch) | |
| tree | 6dd71fdc54a476a0e2e270badb2027037c3bccbb /src | |
| parent | b03f57c290691bd16d833a14de98a6b5b040e55e (diff) | |
Propagate ignored shortcut key events in quick text edit to parent
The delivery agent generally accepts key events before sending them to
the quick item; the corresponding item can further accept or ignore
those events.
The reason that the user can't override the shortcut key event in the
quick text edit is that these events are marked as accepted by default
in the delivery agent, and the quick text edit also doesn't explicitly
handle the read-only case, which causes the event state to remain as
accepted.
This patch ignores the shortcut override event by default in the
delivery agent. Also, make the quick text edit to execute the
configured key handler to either accept or ignore before processing
the events. This gives the chance to execute the required shortcut
actions.
Fixes: QTBUG-136959
Pick-to: 6.8 6.5
Change-Id: Ib6400f083f4e21d1b23db87b002acb1cbd4ac82b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 1aefea26e5a574dad25646d330a6b3bb943a596c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit f00ec31e8a0c832ffffafb1ab42152db3b8db66e)
Diffstat (limited to 'src')
| -rw-r--r-- | src/quick/items/qquicktextcontrol.cpp | 2 | ||||
| -rw-r--r-- | src/quick/items/qquicktextedit.cpp | 13 | ||||
| -rw-r--r-- | src/quick/util/qquickdeliveryagent.cpp | 4 |
3 files changed, 12 insertions, 7 deletions
diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp index 6ea8f96a23..0cb2fd019d 100644 --- a/src/quick/items/qquicktextcontrol.cpp +++ b/src/quick/items/qquicktextcontrol.cpp @@ -756,7 +756,7 @@ void QQuickTextControl::processEvent(QEvent *e, const QTransform &transform) case QEvent::ShortcutOverride: if (d->interactionFlags & Qt::TextEditable) { - QKeyEvent* ke = static_cast<QKeyEvent *>(e); + QKeyEvent *ke = static_cast<QKeyEvent *>(e); ke->setAccepted(isCommonTextEditShortcut(ke)); } break; diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index e6ca6be9cb..9cf36fda9e 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1975,12 +1975,15 @@ QRectF QQuickTextEdit::cursorRectangle() const bool QQuickTextEdit::event(QEvent *event) { Q_D(QQuickTextEdit); - if (event->type() == QEvent::ShortcutOverride) { - d->control->processEvent(event, QPointF(-d->xoff, -d->yoff)); - if (event->isAccepted()) - return true; + bool state = QQuickImplicitSizeItem::event(event); + if (event->type() == QEvent::ShortcutOverride && !event->isAccepted()) { + QQuickItemPrivate *itemPriv = QQuickItemPrivate::get(this); + if (!itemPriv->extra.isAllocated() || !itemPriv->extra->keyHandler) { + d->control->processEvent(event, QPointF(-d->xoff, -d->yoff)); + } + state = true; } - return QQuickImplicitSizeItem::event(event); + return state; } /*! diff --git a/src/quick/util/qquickdeliveryagent.cpp b/src/quick/util/qquickdeliveryagent.cpp index 048830c65f..be1352b248 100644 --- a/src/quick/util/qquickdeliveryagent.cpp +++ b/src/quick/util/qquickdeliveryagent.cpp @@ -970,7 +970,9 @@ void QQuickDeliveryAgentPrivate::deliverKeyEvent(QKeyEvent *e) e->isAutoRepeat(), e->count()); do { - e->accept(); + Q_ASSERT(e->type() != QEvent::ShortcutOverride || !e->isAccepted()); + if (e->type() != QEvent::ShortcutOverride) + e->accept(); QCoreApplication::sendEvent(item, e); } while (!e->isAccepted() && (item = item->parentItem())); } |
