Swift - 如何使 window 无法激活?

Swift - how to make window unactivable?

我想让应用程序无法激活。

我的意思是它必须处于非活动状态且非前景,即使单击它也是如此。活动 window 必须与点击我的应用之前的应用相同。

我该怎么做?


更新:

  1. 让我们想象一些 window/panel。像一个码头。我们称它为 "Docky"
  2. Docky 处于非活动状态,活动 window 是 Safari:

    NSRunningApplicationSafari.isActive == true
    NSRunningApplicationDocky.isActive == false
    
  3. 我正在点击 Docky 的任何空白点。

预期结果:

  1. Safari 仍然有效window。喜欢之前点击:

    NSRunningApplicationSafari.isActive == true
    NSRunningApplicationDocky.isActive == false
    

实际结果:

  1. Docky 处于活动状态 window,Safari 处于非活动状态:

    NSRunningApplicationSafari.isActive == false
    NSRunningApplicationDocky.isActive == true
    

另一个示例是键盘查看器。您正在单击虚拟键盘,但活动 window 是另一个应用程序。 Ant 完全活跃 window 正在获取 keyPress 事件。

实际上您只需要 .nonactivatingPanel 样式面板。其他一切都是细节,比如 window 的级别、覆盖 acceptsFirstMouse:needsPanelToBecomeKey 的自定义视图等。顺便说一句,按钮默认接受第一次点击,在这种情况下不激活应用程序。

例如,您的 AppDelegate 可能如下所示:

class AppDelegate: NSObject, NSApplicationDelegate {

    var docky: NSPanel!

    func applicationDidFinishLaunching(_ aNotification: Notification) {

        // Create the window and set the content view. 
        docky = NSPanel(
            contentRect: NSRect(x: 0, y: 0, width: 120, height: 600),
            styleMask: [.nonactivatingPanel],
            backing: .buffered, defer: false)
        docky.level = .mainMenu
        ....
        docky.orderFrontRegardless()
    }