From 18b01267a6bb2a17060ec70153cff26d3427a916 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Thu, 10 Oct 2024 20:31:38 +0200 Subject: [PATCH] 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 (cherry picked from commit 87c6d142d25bec937c0a521830fcb9e06d921114) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qmenu.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 0ce07aee40a..17e7ee48712 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -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());