QMenu: fix PM_SubMenuOverlap in rtl mode

The submenu in rtl mode was not placed correctly due to the missing
handling of PM_SubMenuOverlap.

Pick-to: 6.5
Task-number: QTBUG-129716
Change-Id: I0a0d6a9007b4427a95a92b81a3450d65b944189c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 87c6d142d25bec937c0a521830fcb9e06d921114)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Christian Ehrlicher 2024-10-10 20:31:38 +02:00 committed by Qt Cherry-pick Bot
parent cc331ef757
commit 18b01267a6

View File

@ -3634,7 +3634,8 @@ void QMenu::internalDelayedPopup()
int subMenuOffset = style()->pixelMetric(QStyle::PM_SubMenuOverlap, nullptr, this);
const QRect actionRect(d->actionRect(d->currentAction));
QPoint subMenuPos(mapToGlobal(QPoint(actionRect.right() + subMenuOffset + 1, actionRect.top())));
const auto ofs = isRightToLeft() ? (-subMenuOffset - actionRect.width() + 1) : subMenuOffset;
QPoint subMenuPos(mapToGlobal(QPoint(actionRect.right() + ofs, actionRect.top())));
if (subMenuPos.x() > screen.right())
subMenuPos.setX(geometry().left());