macOS: Restore logic to set wantsBestResolutionOpenGLSurface

The logic was removed in 1fc7ca091b when
we removed support for surface-backed views, based on the documentation
for wantsBestResolutionOpenGLSurface noting that layer-backed views
ignore the property.

But in some cases, when plugin views are embedded into host views, and
the host was built with a pre-10.14 SDK, AppKit seems to get confused,
and we still need to set this property.

Fixes: QTBUG-93770
Pick-to: 6.1
Change-Id: Id67f2fcb8c090c0e01c05d00792eaef311146df1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
bb10
Tor Arne Vestbø 2021-05-20 14:26:47 +02:00
parent 9e8f43e5ac
commit 40878e7517
1 changed files with 8 additions and 0 deletions

View File

@ -393,6 +393,14 @@ bool QCocoaGLContext::setDrawable(QPlatformSurface *surface)
if (view == QT_IGNORE_DEPRECATIONS(m_context.view))
return true;
// We generally want high-DPI GL surfaces, unless the user has explicitly disabled them.
// According to the documentation, layer-backed views ignore wantsBestResolutionOpenGLSurface
// and configure their own backing surface at an appropriate resolution, but in some cases
// we've seen this fail (plugin views embedded in surface-backed hosts), so we do it anyways.
QT_IGNORE_DEPRECATIONS(view.wantsBestResolutionOpenGLSurface) = qt_mac_resolveOption(YES,
cocoaWindow->window(), "_q_mac_wantsBestResolutionOpenGLSurface",
"QT_MAC_WANTS_BEST_RESOLUTION_OPENGL_SURFACE");
// Setting the drawable may happen on a separate thread as a result of
// a call to makeCurrent, so we need to set up the observers before we
// associate the view with the context. That way we will guarantee that