summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-12-04 09:38:38 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-12-04 09:38:38 +0100
commitcf708de03aa96d18c5bc043c90b2795fcf1b0517 (patch)
treea45e5d6c3fe9a6772ce8585b73fb7b721fb2ff35 /src/plugins/platforms
parent2a494875b8f3d50046d35fb21988c288fcfa1dc7 (diff)
parent08de243eaa007597c2bfbc97d3d14e2f821ac4be (diff)
Merge remote-tracking branch 'origin/5.11.3' into 5.11
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/windows/qwindowssystemtrayicon.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/plugins/platforms/windows/qwindowssystemtrayicon.cpp b/src/plugins/platforms/windows/qwindowssystemtrayicon.cpp
index 901d132ea5..3c27f2914d 100644
--- a/src/plugins/platforms/windows/qwindowssystemtrayicon.cpp
+++ b/src/plugins/platforms/windows/qwindowssystemtrayicon.cpp
@@ -382,12 +382,20 @@ bool QWindowsSystemTrayIcon::winEvent(const MSG &message, long *result)
emit activated(DoubleClick); // release we must ignore it
break;
case WM_CONTEXTMENU: {
+ // QTBUG-67966: Coordinates may be out of any screen in PROCESS_DPI_UNAWARE mode
+ // since hi-res coordinates are delivered in this case (Windows issue).
+ // Default to primary screen with check to prevent a crash.
const QPoint globalPos = QPoint(GET_X_LPARAM(message.wParam), GET_Y_LPARAM(message.wParam));
- const QPlatformScreen *screen = QWindowsContext::instance()->screenManager().screenAtDp(globalPos);
- emit contextMenuRequested(globalPos, screen);
- emit activated(Context);
- if (m_menu)
- m_menu->trackPopupMenu(message.hwnd, globalPos.x(), globalPos.y());
+ const auto &screenManager = QWindowsContext::instance()->screenManager();
+ const QPlatformScreen *screen = screenManager.screenAtDp(globalPos);
+ if (!screen)
+ screen = screenManager.screens().value(0);
+ if (screen) {
+ emit contextMenuRequested(globalPos, screen);
+ emit activated(Context);
+ if (m_menu)
+ m_menu->trackPopupMenu(message.hwnd, globalPos.x(), globalPos.y());
+ }
}
break;
case NIN_BALLOONUSERCLICK: