| @@ -1050,7 +1050,54 @@ bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* cons | |||||
| #endif | #endif | ||||
| #ifdef CARLA_OS_MAC | #ifdef CARLA_OS_MAC | ||||
| // TODO | |||||
| uint const hints = kCGWindowListOptionOnScreenOnly|kCGWindowListExcludeDesktopElements; | |||||
| CFArrayRef const windowListRef = CGWindowListCopyWindowInfo(hints, kCGNullWindowID); | |||||
| const NSArray* const windowList = (const NSArray*)windowListRef; | |||||
| int windowToMap, windowWithPID = 0, windowWithNameAndPID = 0; | |||||
| for (NSDictionary* const entry in windowList) | |||||
| { | |||||
| if ([entry[(id)kCGWindowSharingState] intValue] == kCGWindowSharingNone) | |||||
| continue; | |||||
| NSString* const windowName = entry[(id)kCGWindowName]; | |||||
| int const windowNumber = [entry[(id)kCGWindowNumber] intValue]; | |||||
| uintptr_t const windowPID = [entry[(id)kCGWindowOwnerPID] intValue]; | |||||
| if (windowPID != pid) | |||||
| continue; | |||||
| windowWithPID = windowNumber; | |||||
| if (windowName != nullptr && std::strcmp([windowName UTF8String], uiTitle) == 0) | |||||
| windowWithNameAndPID = windowNumber; | |||||
| } | |||||
| CFRelease(windowListRef); | |||||
| if (windowWithNameAndPID != 0) | |||||
| { | |||||
| carla_stdout("Match found using pid and name"); | |||||
| windowToMap = windowWithNameAndPID; | |||||
| } | |||||
| else if (windowWithPID != 0) | |||||
| { | |||||
| carla_stdout("Match found using pid"); | |||||
| windowToMap = windowWithPID; | |||||
| } | |||||
| else | |||||
| { | |||||
| return false; | |||||
| } | |||||
| NSWindow* const parentWindow = [NSApp windowWithWindowNumber:winId]; | |||||
| CARLA_SAFE_ASSERT_RETURN(parentWindow != nullptr, false); | |||||
| [parentWindow orderWindow:NSWindowBelow | |||||
| relativeTo:windowToMap]; | |||||
| return true; | |||||
| #endif | #endif | ||||
| #ifdef CARLA_OS_WIN | #ifdef CARLA_OS_WIN | ||||