Window visible on all spaces (including other fullscreen apps)

前端 未结 2 423
梦谈多话
梦谈多话 2021-02-04 14:12

I\'m trying to make a window (NSWindow) visible on all the spaces including other full screen app windows. I\'ve been trying to set a higher window level as well as playing with

相关标签:
2条回答
  • 2021-02-04 14:50

    If you want a window to be visible on top of other fullscreen windows (in spaces), you should make an agent (accessory) application. You can do it by setting LSUIElement key in the application’s Info.plist to 1 (YES)

    If you still need a regular application you can do following:

    1. Create a separate agent (helper) application inside your main application bundle which will show your window. (There are plenty of good examples on how you can create such application)

    2. Play with NSApplicationActivationPolicy. You can try to change application's activation policy during a runtime. Swift 3:

      • NSApp.setActivationPolicy(.accessory) switch to agent(accessory)
      • NSApp.setActivationPolicy(.regular) switch to ordinary application

    Keep in mind that .accessory policy hides the icon from Dock and you still need the code you have already:

    window.collectionBehavior = .canJoinAllSpaces window.level = Int(CGWindowLevelForKey(.floatingWindow))

    0 讨论(0)
  • 2021-02-04 15:06

    You're on the right track in a way, you need to set your window object's level to one level above the Shield Window's to be in the the forefront:

            window.level = Int(CGShieldingWindowLevel()) + 1
    

    Do note that this technique is not really recommended as some problems might arise from the interaction between full-screen graphics (OpenGL full-screen drawing contexts is an example) and the graphics hardware; but it's your best bet if you want to ensure overlay on top of all other applications.

    0 讨论(0)
提交回复
热议问题