diff --git a/README.md b/README.md index 11aa631d..ad36fa0c 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,9 @@ GLFW bundles a number of dependencies in the `deps/` directory. - [Cocoa] Bugfix: Cursor creation failed unless a window had been created. - [Cocoa] Bugfix: Window refresh events were not generated by iconification or restoration + - [Cocoa] Bugfix: The primary monitor would get reported as disconnected when + entering full screen on a dual-GPU machine with automatic + graphics switching - [X11] Bugfix: `glfwInit` would segfault on systems without RandR - [X11] Bugfix: The response to `_NET_WM_PING` was sent to the wrong window - [X11] Bugfix: Character input via XIM did not work in many cases diff --git a/src/cocoa_monitor.m b/src/cocoa_monitor.m index d1635de7..82409e50 100644 --- a/src/cocoa_monitor.m +++ b/src/cocoa_monitor.m @@ -268,7 +268,8 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count) char* name = getDisplayName(displays[i]); monitor = _glfwAllocMonitor(name, size.width, size.height); - monitor->ns.displayID = displays[i]; + monitor->ns.displayID = displays[i]; + monitor->ns.unitNumber = CGDisplayUnitNumber(displays[i]); free(name); @@ -284,7 +285,9 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count) GLboolean _glfwPlatformIsSameMonitor(_GLFWmonitor* first, _GLFWmonitor* second) { - return first->ns.displayID == second->ns.displayID; + // HACK: Compare unit numbers instead of display IDs to work around display + // replacement on machines with automatic graphics switching + return first->ns.unitNumber == second->ns.unitNumber; } void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) diff --git a/src/cocoa_platform.h b/src/cocoa_platform.h index 59982b53..dea7a310 100644 --- a/src/cocoa_platform.h +++ b/src/cocoa_platform.h @@ -90,6 +90,7 @@ typedef struct _GLFWmonitorNS { CGDirectDisplayID displayID; CGDisplayModeRef previousMode; + uint32_t unitNumber; } _GLFWmonitorNS;