cocoa - 在 Catalina 中,`orderFront:` 使应用程序成为活动应用程序;我该如何防止这种情况?
问题描述
我有一个后台“监控”应用程序,它可以作为附件运行,也可以作为常规应用程序运行(用户选择取决于他们是否想在 Dock 中看到它)。
NSPanel
该应用程序有几个显示后台任务进度的永不键实用程序窗口。当后台任务启动时,窗口使用orderFront:
.
这多年来一直很有效。该窗口只会出现在活动应用程序后面的某个位置。
但是,从 Catalina (macOS 10.15) 开始,orderFront:
会导致我的监控应用程序变得活跃,从而从用户的应用程序中窃取焦点。
这很糟糕,我想阻止它,但我似乎无法弄清楚如何。
解决方案
问题不是-orderFront:
。
事实证明,在 Catalina 中,如果您将应用程序的激活策略更改为NSApplicationActivationPolicyRegular
,在不久的将来(即不是立即)的某个时间点,该应用程序将成为活动应用程序,就像它已经启动一样。
让我震惊的是事件的顺序:激活策略发生了变化,窗口被创建并放在前面,然后应用程序变成了最前面的应用程序。
遗憾的是,由于无法拒绝成为最前面的应用程序,我唯一的解决方法是在更改激活策略时捕获当前活动的应用程序,等待激活,然后请求原始应用程序再次成为活动应用程序。丑陋,但在我的应用程序中,这应该每天只发生几次;这里希望用户在看屏幕的时候没有看屏幕。
推荐阅读
- maven - Maven 无法执行目标 maven-assembly-plugin
- python - 使用 mapbox-tile-copy 将 geojson 文件转换为矢量切片的问题
- arrays - 将矩阵中的图像与 MatLab 中的其他矩阵图像连接起来
- sql - wordpress 数据库被主题入侵
- python - 用于文档目的的带有注释的 YAML 解析
- python - 为什么 os.fork() 之后 pyscard 无法连接到 pcscd 服务?
- multithreading - ColdFusion 动态线程名称
- c# - .NET Core Web API:自动加载不正确的 appsettings.json 文件
- tsql - T-SQL - 获取总逗留时间和第一天逗留时间
- python - 如何在熊猫中组合两个数据框?