Don't return an associated screen for embedded widgets

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ø <tor.arne.vestbo@qt.io>
bb10
Volker Hilsheimer 2022-01-13 09:55:03 +01:00
parent 55928821d1
commit 87a62e46e4
1 changed files with 5 additions and 0 deletions

View File

@ -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;