2016-03-24 3 views
0

Я пытаюсь добавить небольшое окно, которое обеспечивает «быстрый ввод» из любого места в системе в основное приложение.Разрешить NSWindow (NSPanel) плавать над полноэкранными приложениями

Пользователь может попасть в горячую клавишу, окно всплывает и плавает над всеми другими окнами.

По большей части, это не большая проблема. Я могу настроить NSWindow быть:

level = Int(CGWindowLevelKey.TornOffMenuWindowLevelKey.rawValue) 
collectionBehavior = .CanJoinAllSpaces 

Я могу также сделать его NSPanel с NSNonactivatingPanelMask набором опций.

Единственная проблема: как я могу сделать это так, чтобы окно отображалось на экране, даже если пользователь находится в пространстве, содержащем полноэкранное приложение?

Я знаю, что это возможно, когда приложение LSUIElement=true (приложение без позиции в доке), но мое нет.

ответ

1

Хорошо, у меня была правильная идея, сложная часть заключается в том, как все варианты взаимодействуют друг с другом. Вот что работает:

  • NSPanel, не NSWindow
  • маска стиль: NSBorderlessWindowMask | NSNonactivatingPanelMask

И эти свойства:

level = Int(CGWindowLevelKey.MainMenuWindowLevelKey.rawValue) 
collectionBehavior = [.CanJoinAllSpaces, .FullScreenAuxiliary] 
0

Версия your self-answer Swift 3.0

window.level = Int(CGWindowLevelForKey(.mainMenuWindow)) 
window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 
+0

Это не работает сейчас –

0

И перевод Swift 4.0 это. Я все еще проверяю это, но, похоже, он работает.

self.view.window?.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.mainMenuWindow))) 
self.view.window?.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 
Смежные вопросы