Cocoa: Use modern API to get display name

On Apple Silicon, IOKit is deprecated and there will be no
matching io_service that we can query for name. Luckilly,
NSScreen got an API to fetch the display name in 10.15.

This is a blocker to get glfw running on Apple Silicon.

Fixes #1809.
Closes #1833.
This commit is contained in:
Nevyn Bengtsson 2021-01-11 17:27:27 +01:00 committed by Camilla Löwy
parent 5aff72aa00
commit 2bc52ca82e

View File

@ -41,6 +41,22 @@
// //
static char* getDisplayName(CGDirectDisplayID displayID) static char* getDisplayName(CGDirectDisplayID displayID)
{ {
// IOKit doesn't work on Apple Silicon anymore. Luckilly, 10.15 introduced -[NSScreen localizedName].
// Use it if available, and fall back to IOKit otherwise.
if ([NSScreen instancesRespondToSelector:@selector(localizedName)])
{
for(NSScreen *screen in [NSScreen screens])
{
if ([[[screen deviceDescription] objectForKey:@"NSScreenNumber"] intValue] == displayID)
{
NSString *name = [screen valueForKey:@"localizedName"];
if (name)
{
return _glfw_strdup([name UTF8String]);
}
}
}
}
io_iterator_t it; io_iterator_t it;
io_service_t service; io_service_t service;
CFDictionaryRef info; CFDictionaryRef info;