From 7fcadc4c17d60cc700e8144935e6db77262fd8b1 Mon Sep 17 00:00:00 2001 From: Niklas Korz Date: Tue, 17 Mar 2026 15:26:13 +0100 Subject: [PATCH] Fix Metal layer detection in Qt 6.10 and newer --- appleutils.mm | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/appleutils.mm b/appleutils.mm index 52058b53..a688fbb3 100644 --- a/appleutils.mm +++ b/appleutils.mm @@ -38,16 +38,21 @@ #if TARGET_OS_IPHONE UIView* view = (__bridge UIView*)handle; assert([view isKindOfClass:[UIView class]]); - - void *pLayer =(__bridge void*)view.layer; - return pLayer; #else NSView* view = (__bridge NSView*)handle; assert([view isKindOfClass:[NSView class]]); - - void *pLayer = (__bridge void *)view.layer; - return pLayer; #endif + + CALayer* layer = view.layer; + if (![layer isKindOfClass:[CAMetalLayer class]] && [layer respondsToSelector:@selector(contentLayer)]) { + // In Qt 6.10+, the window has an intermediate QContainerLayer in which + // the actual CAMetalLayer is nested. + // https://github.com/qt/qtbase/commit/0bdbf4688e4265a1ddf42efbe4c780770809d365 + layer = [layer contentLayer]; + } + assert([layer isKindOfClass:[CAMetalLayer class]]); + + return (__bridge void*)layer; } #endif