Browse Source

Implement try-transient for osx, partially (whatever is possible)

tags/1.9.8
falkTX 6 years ago
parent
commit
846cd15e00
1 changed files with 48 additions and 1 deletions
  1. +48
    -1
      source/utils/CarlaPluginUI.cpp

+ 48
- 1
source/utils/CarlaPluginUI.cpp View File

@@ -1050,7 +1050,54 @@ bool CarlaPluginUI::tryTransientWinIdMatch(const uintptr_t pid, const char* cons
#endif

#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

#ifdef CARLA_OS_WIN


Loading…
Cancel
Save