【问题标题】:In Catalina, `orderFront:` causes app to become the active application; how do I prevent this?在 Catalina 中,`orderFront:` 使应用程序成为活动应用程序;我该如何防止这种情况?
【发布时间】:2020-01-11 18:41:44
【问题描述】:

我有一个后台“监控”应用程序,它可以作为附件运行,也可以作为常规应用程序运行(用户选择取决于他们是否希望在 Dock 中看到它)。

该应用程序有几个显示后台任务进度的永不键实用程序窗口 (NSPanels)。当后台任务启动时,使用orderFront: 使窗口可见。

这已经好几年了;该窗口只会出现在活动应用程序后面的某个位置。

但是,从 Catalina (macOS 10.15) 开始,orderFront: 会导致我的监控应用程序处于活动状态,从而从用户的应用程序中窃取焦点。

这很糟糕,我想阻止它,但我似乎无法弄清楚如何。

【问题讨论】:

    标签: cocoa nspanel


    【解决方案1】:

    问题不是-orderFront:

    事实证明,在 Catalina 中,如果您将应用程序的激活策略更改为 NSApplicationActivationPolicyRegular,在不久的将来(即不是立即)的某个时间点,该应用程序将成为活动应用程序,就像它已经启动一样.

    让我震惊的是事件的顺序:激活策略发生了变化,窗口被创建并放在前面,然后应用程序变成了最前面的应用程序。

    遗憾的是,由于无法拒绝成为最前面的应用程序,我唯一的解决方法是在我更改激活策略时捕获当前活动的应用程序,等待激活,然后请求原始应用程序再次成为活动应用程序。丑陋,但在我的应用程序中,这应该每天只发生几次;这里希望用户在看屏幕的时候没有看屏幕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多