From 87a62e46e4352e069aec9cc709a578019cc1715f Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 13 Jan 2022 09:55:03 +0100 Subject: [PATCH] Don't return an associated screen for embedded widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Widgets embedded in a graphics view via QGraphicsProxyWidget don't have an associated screen, even though they are top level windows in the widget hierarchy. Their screen has to be based on the screen of the toplevel widget they are embedded in. This fallback is taken care of by QWidget::screen already. Task-number: QTBUG-20531 Pick-to: 6.3 Change-Id: I77af092b2f8e6322662499be464eec40cfd9ac1c Reviewed-by: Tor Arne Vestbø --- src/widgets/kernel/qwidget.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 1a76b887ee..80dcadb81f 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -1104,6 +1104,11 @@ QWindow *QWidgetPrivate::_q_closestWindowHandle() const QScreen *QWidgetPrivate::associatedScreen() const { +#if QT_CONFIG(graphicsview) + // embedded widgets never have a screen associated, let QWidget::screen fall back to toplevel + if (nearestGraphicsProxyWidget(q_func())) + return nullptr; +#endif if (auto window = windowHandle(WindowHandleMode::Closest)) return window->screen(); return nullptr;