diff --git a/utilities.h b/utilities.h index 10df702..4ff83c6 100644 --- a/utilities.h +++ b/utilities.h @@ -99,7 +99,7 @@ FRAMELESSHELPER_EXPORT quint32 getWindowDpi(const QWindow *window); FRAMELESSHELPER_EXPORT QMargins getWindowNativeFrameMargins(const QWindow *window); FRAMELESSHELPER_EXPORT QColor getNativeWindowFrameColor(const bool isActive = true); -FRAMELESSHELPER_EXPORT void displaySystemMenu(const QWindow *window, const QPoint pos = {}); +FRAMELESSHELPER_EXPORT void displaySystemMenu(const QWindow *window, const QPoint &pos = {}); #endif } diff --git a/utilities_win32.cpp b/utilities_win32.cpp index 9b1700e..416ba87 100644 --- a/utilities_win32.cpp +++ b/utilities_win32.cpp @@ -714,7 +714,7 @@ bool Utilities::shouldUseTraditionalBlur() return false; } -void Utilities::displaySystemMenu(const QWindow *window, const QPoint pos) +void Utilities::displaySystemMenu(const QWindow *window, const QPoint &pos) { Q_ASSERT(window); if (!window) { @@ -776,8 +776,12 @@ void Utilities::displaySystemMenu(const QWindow *window, const QPoint pos) if (isMin) { SetMenuItemInfoW(hMenu, SC_MINIMIZE, FALSE, &mii); } + const bool isRtl = QGuiApplication::layoutDirection() == Qt::RightToLeft; const QPoint point = pos.isNull() ? QCursor::pos(window->screen()) : pos; - const LPARAM cmd = TrackPopupMenu(hMenu, (TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_TOPALIGN | TPM_LEFTALIGN), point.x(), point.y(), 0, hwnd, nullptr); + const LPARAM cmd = TrackPopupMenu(hMenu, + (TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_TOPALIGN | + (isRtl ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), + point.x(), point.y(), 0, hwnd, nullptr); if (cmd) { PostMessageW(hwnd, WM_SYSCOMMAND, cmd, 0); }