NSRunningApplication activateWithOptions 方法行为随 Big Sur 发生变化

NSRunningApplication activateWithOptions method behavior change with Big Sur

我正在 MacOS Big Sur 上使用 select windows 的应用程序。 (我有轻微的手颤,导致我经常点击鼠标错过预期的目标。)

应用程序:

不幸的是,我看到大苏尔下的行为发生了变化。具体来说,假设我打开了两个应用程序,每个应用程序都有两个 windows:

从 X1 和 X2 都可见(在顶部)开始:

同样的事情发生在相反的情况下(从 Y1Y2 可见(在顶部)开始,然后尝试将 X1 向前看还是看到 Y2).

NSRunningApplicationactivateWithOptions: 方法的文档说:

By default, activation brings only the main and key windows forward. If you specify NSApplicationActivateAllWindows, all of the application's windows are brought forward." My application is not specifying NSApplicationActivateAllWindows.

关于应用应该如何处理这个问题的任何建议? (如果您说“该应用程序已经在做正确的事情”,那完全没问题,但我很想知道是否有合理的解决方法。)

[旁白:我也欢迎任何关于让 Apple 注意到这一点的最佳方式的提示。]

我刚刚使用以下代码使我的应用再次正常运行。它使用已弃用的函数(从 10.9 开始),所以我不希望这些函数很快消失。不理想,但至少不会导致奇怪的用户体验。

- (OSStatus)makeApplicationFront:(NSRunningApplication*)application
{
    if(!application || application.processIdentifier == -1) {
        return procNotFound; // Previous front most application is nil or does not have a process identifier.
    }
    ProcessSerialNumber process;
    OSStatus error = GetProcessForPID(application.processIdentifier, &process); // Deprecated, but replacement (NSRunningApplication:activateWithOptions:] does not work properly on Big Sur.
    if(error) {
        return error; // Process could not be obtained. Evaluate error (e.g. using osstatus.com) to understand why.
    }
    return SetFrontProcessWithOptions(&process, kSetFrontProcessFrontWindowOnly); // Deprecated, but replacement (NSRunningApplication:activateWithOptions:] does not work properly on Big Sur.
}

希望对你也有帮助。