From 126034f33eac80c755d005b5d7b7affe073a90be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 11 Aug 2023 14:56:17 +0800 Subject: [PATCH] WM (macOS): detect if WindowServer is running --- .../displayserver/displayserver_apple.c | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/detection/displayserver/displayserver_apple.c b/src/detection/displayserver/displayserver_apple.c index 60feb6efe..84f3c48fe 100644 --- a/src/detection/displayserver/displayserver_apple.c +++ b/src/detection/displayserver/displayserver_apple.c @@ -19,8 +19,6 @@ static void detectDisplays(FFDisplayServerResult* ds) if(CGGetOnlineDisplayList(sizeof(screens) / sizeof(screens[0]), screens, &screenCount) != kCGErrorSuccess) return; - CGDirectDisplayID primary = CGMainDisplayID(); - for(uint32_t i = 0; i < screenCount; i++) { CGDirectDisplayID screen = screens[i]; @@ -63,7 +61,7 @@ static void detectDisplays(FFDisplayServerResult* ds) (uint32_t)CGDisplayRotation(screen), &name, CGDisplayIsBuiltin(screen) ? FF_DISPLAY_TYPE_BUILTIN : FF_DISPLAY_TYPE_EXTERNAL, - screen == primary, + CGDisplayIsMain(screen), (uint64_t)screen ); CGDisplayModeRelease(mode); @@ -103,9 +101,20 @@ static void detectWMPlugin(FFstrbuf* name) void ffConnectDisplayServerImpl(FFDisplayServerResult* ds) { - ffStrbufInitStatic(&ds->wmProcessName, "WindowServer"); - ffStrbufInitStatic(&ds->wmPrettyName, "Quartz Compositor"); - ffStrbufInit(&ds->wmProtocolName); + { + FF_CFTYPE_AUTO_RELEASE CFMachPortRef port = CGWindowServerCreateServerPort(); + if (port) + { + ffStrbufInitStatic(&ds->wmProcessName, "WindowServer"); + ffStrbufInitStatic(&ds->wmPrettyName, "Quartz Compositor"); + } + else + { + ffStrbufInit(&ds->wmProcessName); + ffStrbufInit(&ds->wmPrettyName); + } + } + ffStrbufInitStatic(&ds->wmProtocolName, "Core Graphics"); if(instance.config.allowSlowOperations) {