macOS: Relayout layer shell windows on screen size change

This commit is contained in:
Kovid Goyal 2025-04-29 21:33:05 +05:30
parent 2d1cddcc25
commit 4fa67c9ffd
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C

View file

@ -1621,6 +1621,12 @@ - (void) removeGLFWWindow;
@implementation GLFWWindow
static void
handle_screen_size_change(_GLFWwindow *window, NSNotification *notification UNUSED) {
if (!window || !window->ns.layer_shell.is_active) return;
_glfwPlatformSetLayerShellConfig(window, NULL);
}
- (instancetype)initWithGlfwWindow:(NSRect)contentRect
styleMask:(NSWindowStyleMask)style
backing:(NSBackingStoreType)backingStoreType
@ -1630,6 +1636,13 @@ - (instancetype)initWithGlfwWindow:(NSRect)contentRect
if (self != nil) {
glfw_window = initWindow;
self.tabbingMode = NSWindowTabbingModeDisallowed;
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserverForName:NSApplicationDidChangeScreenParametersNotification
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification * _Nonnull notification) {
handle_screen_size_change(glfw_window, notification);
}];
}
return self;
}
@ -1637,6 +1650,7 @@ - (instancetype)initWithGlfwWindow:(NSRect)contentRect
- (void) removeGLFWWindow
{
glfw_window = NULL;
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (BOOL)validateMenuItem:(NSMenuItem *)item {