QQuickTextInput/Edit: ensure original context menu event is accepted

We make a copy of the context menu event in order to map its position
to cursorRectangle, but we forgot to set the accepted state back onto
the original event. If we don't do this, showEditMenu (in
src/plugins/platforms/ios/qiostextinputoverlay.mm) shows the built-in
native text editing context menu (QIOSTextInputOverlay::s_editMenu)
because it sees that the event wasn't accepted, resulting in both that
and Controls' menu being shown.

Amends 31ca3936d3.

Fixes: QTBUG-138209
Change-Id: Iac001d9632af2f891337821720a372ec4833f173
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
Mitch Curtis 2025-07-04 15:29:14 +08:00 committed by Shawn Rutledge
parent 1aefea26e5
commit 2c2e585771
2 changed files with 6 additions and 2 deletions

View File

@ -3328,7 +3328,9 @@ bool QQuickTextEdit::contextMenuEvent(QContextMenuEvent *event)
Q_Q(QQuickTextEdit);
QContextMenuEvent mapped(event->reason(), q->cursorRectangle().center().toPoint(),
event->globalPos(), event->modifiers());
return QQuickItemPrivate::handleContextMenuEvent(&mapped);
const bool eventProcessed = QQuickItemPrivate::handleContextMenuEvent(&mapped);
event->setAccepted(mapped.isAccepted());
return eventProcessed;
}
void QQuickTextEditPrivate::handleFocusEvent(QFocusEvent *event)

View File

@ -1727,7 +1727,9 @@ bool QQuickTextInput::contextMenuEvent(QContextMenuEvent *event)
Q_Q(QQuickTextInput);
QContextMenuEvent mapped(event->reason(), q->cursorRectangle().center().toPoint(),
event->globalPos(), event->modifiers());
return QQuickItemPrivate::handleContextMenuEvent(&mapped);
const bool eventProcessed = QQuickItemPrivate::handleContextMenuEvent(&mapped);
event->setAccepted(mapped.isAccepted());
return eventProcessed;
}
bool QQuickTextInputPrivate::sendMouseEventToInputContext(QMouseEvent *event)