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:
parent
5aff72aa00
commit
2bc52ca82e
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user