summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoamenu.mm
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-02-02 08:50:15 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-02-05 21:35:15 +0000
commit1ffc6ba402114a3443df5309dec186fd337e5b66 (patch)
tree192aee72837c55232a87cfbaa11f9601ed7a7310 /src/plugins/platforms/cocoa/qcocoamenu.mm
parent57f4521c99df1e4e2c1fd321a41019ae4e0c17b1 (diff)
macOS: fix menu positioning on high-DPI
The target position is passed in physical native pixels, so call QPlatformScreen::availableGeometry() and QPlatformWindow::mapToGlobal() instead of QScreen::availableSize() and QWindow::mapToGlobal(). The latter two operate on logical pixels. Task-number: QTBUG-55251 Change-Id: I281f47baee727bc0f4738fd6d6cdf12c9f462b0f Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoamenu.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index 8bdd0512de..e41c70b8ca 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -46,6 +46,7 @@
#include <QtCore/private/qthread_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include "qcocoaapplication.h"
+#include "qcocoaintegration.h"
#include "qcocoamenuloader.h"
#include "qcocoamenubar.h"
#include "qcocoawindow.h"
@@ -573,8 +574,9 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect,
[popupCell setMenu:m_nativeMenu];
[popupCell selectItem:nsItem];
- int availableHeight = screen->availableSize().height();
- const QPoint &globalPos = parentWindow->mapToGlobal(pos);
+ QCocoaScreen *cocoaScreen = static_cast<QCocoaScreen *>(screen->handle());
+ int availableHeight = cocoaScreen->availableGeometry().height();
+ const QPoint &globalPos = cocoaWindow->mapToGlobal(pos);
int menuHeight = m_nativeMenu.size.height;
if (globalPos.y() + menuHeight > availableHeight) {
// Maybe we need to fix the vertical popup position but we don't know the