From 22f682d620bb8e73346deaf928b6f968eddbbe9c Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Tue, 4 Jan 2022 10:06:57 +0100 Subject: [PATCH] Fix Pick Screen Color with multiple monitors QScreen::grabWindow expects screen coordinates, not global ones, use QScreen::geometry() to compute them. Fixes: QTBUG-99472 Change-Id: Ic4b99577b8cb394e6cd0a2d3f554bb3ec8250afa Reviewed-by: Shawn Rutledge Reviewed-by: Zhang Hao (cherry picked from commit da6c8b2fc6bc1a29b8a88c4ecce53eaf811eb06c) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/dialogs/qcolordialog.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp index 9db8d5687cf..8696797b642 100644 --- a/src/widgets/dialogs/qcolordialog.cpp +++ b/src/widgets/dialogs/qcolordialog.cpp @@ -1566,7 +1566,9 @@ QColor QColorDialogPrivate::grabScreenColor(const QPoint &p) QScreen *screen = QGuiApplication::screenAt(p); if (!screen) screen = QGuiApplication::primaryScreen(); - const QPixmap pixmap = screen->grabWindow(0, p.x(), p.y(), 1, 1); + const QRect screenRect = screen->geometry(); + const QPixmap pixmap = + screen->grabWindow(0, p.x() - screenRect.x(), p.y() - screenRect.y(), 1, 1); const QImage i = pixmap.toImage(); return i.pixel(0, 0); }